2017-10-07 72 views
0

我有问题将数组作为参数从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 
+0

'-file' - >'-command' – PetSerAl

+0

请务必试运行[MCVE]代码,以确保它母鹿不会引入额外的错误,如参数定义中的虚假尾随逗号和函数缺失的右括号。 –

回答

0

您可以从命令提示符下运行此

powershell script.ps1 "Server1,Server2" "parameter2 argument" "parameter3 argument"

+0

'powershell -NoProfile -File。\ script.ps1 ...''' – lit

0

CMD不知道PowerShell的数组什么。您可以通过服务器列表作为单独的标记

powershell -File .\script.ps1 Server1 Server2 

,并在脚本中使用automatic variable$args而不是命名参数:

foreach ($server in $args) { 
    ... 
} 

,或者你可以在逗号split参数的值身体:

[CmdletBinding()] 
Param(
    [string]$Servers 
) 

$serverArray = $Servers -split ','