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