
Когда я пытаюсь выполнить следующую команду PowerShell, я получаю ошибку.
Команда :
*PS cert:\currentuser\authroot> gci | где тема -like "УТН"*
Ошибка ниже:
Where-Object : Невозможно привязать параметр 'FilterScript'. Невозможно преобразовать значение "subject" типа "System.String" в тип "System.Management.Automation.ScriptBlock". В строке:1 символ:12 + gci | где <<<< subject -like "УТН" + CategoryInfo : InvalidArgument: (:) [Where-Object], ParameterBindingException + FullyQualifiedErrorId : Невозможно преобразоватьАргументБезСообщения,Microsoft.PowerShell.Commands.WhereObjectCommand
Я использую Windows PowerShell ISE.
Буду очень признателен за работоспособное решение.
решение1
Похоже, вы используете PowerShell Vs.2, в этой версии не было поддержки нового where syntax
.
В PowerShell версии 1 и 2 используйте:
gci | where {$_.subject -like "UTN"}
Вам необходимо заключить выражение в фигурные скобки и сослаться на все свойства с $_.
префиксом.
решение2
Питер Хандорф уже ответил на этот вопрос, но я хотел бы подробнее остановиться на сообщении об ошибке, которое вы получили:
Невозможно преобразовать значение "subject" типа "System.String" в тип System.Management.Automation.ScriptBlock"
Это означает, что он не может преобразовать a string
в a scriptBlock
, а это значит, что where
за ним должен следовать блок скрипта, например:{code here}
Обязательно прочитайте сообщения об ошибках и попытайтесь понять, что они означают.
решение3
Используйте «-match», чтобы найти UTN, который может находиться в любом месте темы.
gci | ?{$_.subject -match "UTN"}
Если вы используете «-like» и ничего не отображается, поместите искомое между звездочками в кавычках.
gci | ?{$_.subject -like "*UTN*"}