我有问题将数组作为参数从CMD传递给PowerShell脚本。 这是PS代码的一个例子:
[CmdletBinding()]
Param(
[string[]]$serverArray,
)
$serviceName = 'service1'
function getState {
Process {
$serverArray
foreach ($server in $serverArray) {
$servState = (Get-WmiObject Win32_Service -ComputerName $server -Filter "name='$serviceName'").State
}
}
getState
我如何从CMD调用脚本:
powershell -file .\script.ps1 -serverArray Server1,Server2
我收到错误,因为$serverArray
未传递数组:
Server1,Server2 Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) At C:\script.ps1:58 char:29 + $servState = (Get-WmiObject <<<< Win32_Service -ComputerName $server -Filter "name='$serviceName'").State + CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
如果我从PowerShell窗口运行相同的命令,它可以工作,因为脚本接受$serverArray
作为数组:
.\script.ps1 -serverArray Server1,Server2
Server1 Server2
答案 0 :(得分:1)
CMD对PowerShell阵列一无所知。您可以将服务器列表作为单独的令牌传递
powershell -File .\script.ps1 Server1 Server2
并在脚本中使用automatic variable $args
而不是命名参数:
foreach ($server in $args) {
...
}
或者您可以split正文中逗号参数的值:
[CmdletBinding()]
Param(
[string]$Servers
)
$serverArray = $Servers -split ','
答案 1 :(得分:0)
您可以从命令提示符运行:
powershell script.ps1 "Server1,Server2"
如果您在脚本中添加更多参数:
powershell script.ps1 "Server1,Server2" "parameter2 argument" "parameter3 argument"