Start-Process передает хеш-таблицу в ArgumentList
Рассмотрим следующую ситуацию:
содержание 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
,
1 ответ
Решение
Вы должны передать хеш-таблицу в нотации объектов PowerShell, как если бы вы запускали скрипт из окна PowerShell.
Как вы строите строку зависит от вас.
Вы могли бы
- использовать шаблон строки
- использовать быстрый и грязный вызов
"@$((ConvertTo-Json $CitrixFarm -Compress) -replace ':','=')"
- используйте функцию для преобразования объекта хеш-таблицы.
Ниже приведено описание того, чего вы пытаетесь достичь.
$Arguments = @()
...
$Arguments += "-CitrixFarm @{'Server1' = '6.5'}"
$StartParams = @{
Credential = $Credentials
ArgumentList = "-File ""$ScriptPath"" -verb runas" + $Arguments
WindowStyle = 'Hidden'
}
Start-Process powershell @StartParams
Источник: лучший метод ToString() для хэш-таблиц