Powershell -将数组值作为参数传递



Powershell新手。试图找出为什么$_值不能在我的表达式中使用:

$ServerList = @(
'Server1',
'Server2',
'Server3'
)
$ServerList | ForEach-Object (get-cswindowsservice -Name "rtcpdpcore" -Computer $_ | Select-object @{Label = "ServerName";Expression={$_}}, Status, Displayname | format-table -autosize -wrap)

错误:Get-CsWindowsService:无法验证参数"ComputerName"的参数。这个论点为null或空。提供一个非null或空的参数,然后尝试执行该命令一次。

但这输出数组值好吗??

$ServerList = @(
'Server1',
'Server2',
'Server3'
)
$ServerList | ForEach-Object {write-output $_}

为什么在第一个例子中'$_'为空?但在第二个世界里呢?

感谢

将括号从()更改为{},您遇到的问题是$_的范围在通过管道工作时发生了变化,因此Select-Object上的$_是由Get-CSWindowsService传递的对象,而不是ForEach-Object。尝试小重构:

$ServerList | `
ForEach-Object {
$serverName = $_
Get-CSWindowsservice -Name "rtcpdpcore" -Computer $serverName | `
Select-object @{Label = "ServerName";Expression={$serverName}}, Status, Displayname | `
Format-Table -autosize -wrap
}

最新更新