将数组作为参数从CMD传递给PowerShell给出问题
问题描述:
我有问题将数组作为参数从CMD传递给PowerShell脚本。 这里的PS码的例子:将数组作为参数从CMD传递给PowerShell给出问题
[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
作为数组:
powershell script.ps1 "Server1,Server2"
而且:
.\script.ps1 -serverArray Server1,Server2
Server1 Server2
答
您可以从命令提示符下运行此
powershell script.ps1 "Server1,Server2" "parameter2 argument" "parameter3 argument"
+0
'powershell -NoProfile -File。\ script.ps1 ...''' – lit
答
CMD不知道PowerShell的数组什么。您可以通过服务器列表作为单独的标记
powershell -File .\script.ps1 Server1 Server2
,并在脚本中使用automatic variable$args
而不是命名参数:
foreach ($server in $args) {
...
}
,或者你可以在逗号split参数的值身体:
[CmdletBinding()]
Param(
[string]$Servers
)
$serverArray = $Servers -split ','
'-file' - >'-command' – PetSerAl
请务必试运行[MCVE]代码,以确保它母鹿不会引入额外的错误,如参数定义中的虚假尾随逗号和函数缺失的右括号。 –