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
}