【发布时间】:2018-11-02 13:35:49
【问题描述】:
考虑以下情况:
内容MyScript.ps1:
Param (
[String]$CountryCode,
[String]$FilesPath,
[String]$KeepassDatabase,
[String]$KeepassKeyFile,
[String]$EventLog = 'HCScripts',
[String]$EventSource,
[HashTable]$CitrixFarm = @{'Server1' = '6.5'}
)
$CountryCode
$FilesPath
$KeepassDatabase
$KeepassKeyFile
$EventLog
$EventSource
$CitrixFarm
Caller.ps1的内容:
Param (
$FilesPath = ".\MyScript.ps1",
$EvenntLog = 'Test',
$CountryCode = 'BNL',
$KeepasDatabase,
$KeepasKeyFile
)
$Arguments = @()
$Arguments += "-EventSource ""$AppName"""
$Arguments += "-EventLog ""$EventLog"""
$Arguments += "-FilesPath ""$((Get-Item $FilesPath).FullName)"""
$Arguments += "-CountryCode ""$CountryCode"""
$Arguments += "-KeepassDatabase ""$((Get-Item $KeepasDatabase).FullName)"""
$Arguments += "-KeepassKeyFile ""$((Get-Item $KeepasKeyFile).FullName)"""
$Arguments += "-CitrixFarm $CitrixFarm"
$StartParams = @{
Credential = $Credentials
ArgumentList = "-File ""$ScriptPath"" -verb runas" + $Arguments
WindowStyle = 'Hidden'
}
Start-Process powershell @StartParams
我们似乎找不到将[HashTable] 传递给参数$CitrixFarm 的方法。怎么可能添加那个论点。或者将其传递给 Start-Process 调用的脚本,并在新的 PowerShell 会话中提升权限?
当省略参数$CitrixFarm 时,一切正常。所以问题真的在于通过HashTable。
【问题讨论】:
-
你想用
-verb runas完成什么? -
@TheIncorrigible1
-Verb runas请求提升。 -
@Bill_Stewart 我知道确实如此,但他需要吗?如果他不需要,他为什么要尝试启动不同的 powershell 进程?
-
您需要将哈希表转换回其 PowerShell 对象表示法 using a function。
-
$CitrixFarm参数的参数在命令行上应该是什么样子?
标签: powershell arguments parameter-passing start-process