将数组作为参数从CMD传递给PowerShell会出现问题

将数组作为参数从CMD传递给PowerShell会出现问题,powershell,cmd,Powershell,Cmd,我无法将数组作为CMD的参数传递给PowerShell脚本。 以下是PS代码的示例: [CmdletBinding()] Param( [string[]]$serverArray, ) $serviceName = 'service1' function getState { Process { $serverArray foreach ($server in $serverArray) { $servState =

我无法将数组作为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
.\script.ps1 -serverArray Server1,Server2
服务器1 服务器2
您可以在命令提示符下运行此命令:
powershell script.ps1“服务器1,服务器2”

如果向脚本中添加更多参数:


powershell script.ps1“Server1,Server2”“parameter2参数”“parameter3参数”
CMD对powershell数组一无所知。您可以将服务器列表作为单个令牌传递

powershell -File .\script.ps1 Server1 Server2
并在脚本中使用
$args
而不是命名参数:

foreach ($server in $args) {
    ...
}
也可以在正文中的逗号处输入参数值:

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

$serverArray = $Servers -split ','

-file
->
-command
请确保测试运行您的代码,以确保它不会引入额外的错误,如参数定义中虚假的尾随逗号和函数缺少的结束括号。如何
powershell-NoProfile-file.\script.ps1…
[CmdletBinding()]
Param(
    [string]$Servers
)

$serverArray = $Servers -split ','