Powershell:使用带字符串的Select-Object表达式

时间:2013-06-04 14:40:12

标签: powershell

对于某些脚本,我需要一个由计算属性组成的输出。

例如,对于ip.txt中的ip地址列表,我想知道它们是否响应ping。所以我尝试以下命令:

Get-Content .\ip.txt | Select-Object $_,@{Name="ping?";Expression={Test-Connection $_ -Quiet -Count 1}}

但无论我在scriptblock表达式中做了什么,我都会收到错误。

错误(法语,抱歉):

Select-Object : Paramètre Null. Le type attendu doit être l'un des suivants : {System.String, System.Management.Automation.ScriptBlock}. Au niveau de ligne : 1 Caractère : 37 + Get-Content .\ip.txt | Select-Object <<<< $_,@{Name="ping?";Expression={Test-Connection $_ -Quiet -Count 1}} + CategoryInfo : InvalidArgument: (:) [Select-Object], NotSupportedException + FullyQualifiedErrorId : DictionaryKeyUnknownType,Microsoft.PowerShell.Commands.SelectObjectCommand

之前我在某些脚本中使用过“计算属性”,但是使用了目录对象。为什么它不能用于字符串?

1 个答案:

答案 0 :(得分:12)

尝试此操作,您需要为每个值创建计算属性:

Get-Content .\ip.txt | Select-Object  @{n="Server IP";e={$_}},@{n="ping?";e={[bool](Test-Connection $_ -Quiet -Count 1)}}

代码中的问题是$_而不是计算属性。 Select-object接受和属性数组,如果您传递的数组$_未被评估为属性。 如果只执行select-object $_(作为select-object -prop $ null),则输出管道项。