【问题标题】:Powershell - Passing Array Value as a ParameterPowershell - 将数组值作为参数传递
【发布时间】:2021-02-22 14:46:52
【问题描述】:

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:无法验证参数“计算机名”上的参数。论据 为空或为空。提供一个不为 null 或空的参数,然后尝试该命令 再次。

但这确实可以输出数组值吗??

$ServerList = @(
'Server1',
'Server2',
'Server3'
)

$ServerList | ForEach-Object {write-output $_}

为什么在第一个例子中 '$_' 为空?但在第二个填充?

谢谢

【问题讨论】:

  • 您在第一个示例中使用了错误的括号。它应该是 {} 而不是 ()
  • 谢谢!很简单!这行得通。
  • 现在有新问题。传递给我的标签“ServerName”的值是“rtcpdpcore”,而不是数组值。很奇怪。
  • 新问题,新问题。
  • WaitingForGuacamole - 搞定了。非常感谢。

标签: arrays powershell foreach


【解决方案1】:

将括号从() 更改为{},您遇到的问题是$_ 的范围在通过管道时会发生变化,因此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
  }

【讨论】:

  • 不错。 | 之后不需要反引号。如果同一行没有标记,PowerShell 会自动在下一行继续解析。
猜你喜欢
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 2011-08-12
  • 2016-09-26
相关资源
最近更新 更多