Powershell: используйте выражение Select-Object со строкой

Для некоторых скриптов мне нужно иметь вывод, составленный из вычисляемых свойств.

Например, для списка IP-адресов в ip.txt, я хочу знать, отвечают ли они на пинг. Поэтому я пробую следующую команду:

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

Но я получаю ошибку, независимо от того, что я делаю в выражении блока скрипта.

Ошибка (по-французски, извините):

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 ответ

Решение

Попробуйте это вместо этого, вам нужно создать вычисляемые свойства для каждого значения:

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) переданные по конвейеру элементы выводятся.

Другие вопросы по тегам