【问题标题】:Start-Process passing a hashtable in the ArgumentListStart-Process 在 ArgumentList 中传递哈希表
【发布时间】: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


【解决方案1】:

您应该以 PowerShell 对象表示法传递哈希表,就像从 PowerShell 窗口运行脚本一样。

如何构造字符串取决于您。

你可以

  • 使用字符串模板
  • 使用快速而肮脏的电话"@$((ConvertTo-Json $CitrixFarm -Compress) -replace ':','=')"
  • use a function 转换哈希表对象。

以下实际上是您想要实现的目标。

$Arguments = @()
...
$Arguments += "-CitrixFarm @{'Server1' = '6.5'}"

$StartParams = @{
    Credential   = $Credentials
    ArgumentList = "-File ""$ScriptPath"" -verb runas" + $Arguments
    WindowStyle  = 'Hidden'
}
Start-Process powershell @StartParams

来源:A Better ToString() Method for Hash Tables

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    相关资源
    最近更新 更多