Как мне исправить этот скрипт? - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь заставить этот короткий скрипт работать, и я не понимаю почему, PowerShell выдает несколько искаженные и бесполезные сообщения об ошибках!

Сценарий:

$us = Read-Host 'Enter Your User Group Name:' |Get-ADGroup -Filter {name -like "*$us*"} -Properties Description,info | Select Name | Sort Name

Ошибка:

Get-ADGroup : The input object cannot be bound to any parameters for the
command either because the command does not take pipeline input or the input
and its properties do not match any of the parameters that take pipeline input.
At line:1 char:42
+ ... ser Name:' |Get-ADGroup -Filter {name -like "*$us*"} -Properties Desc ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (River:PSObject) [Get-ADGroup], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Проблема в том, что $ US не установлена ​​до конца конвейера и поэтому пуста.

Попробуйте:

  $us = Read-Host 'Enter Your User Group Name:' |  # get the name
          %{"*$($_)*"} |               # Add the asterisk wildcard.
          %{Get-ADGroup -filter {name -like $_}} | # read from AD
          Select Name |
          Sort Name

Это попросит вас ввести имя группы, изатем сохраните результаты в конвейер (не в $ us).Значение конвейера используется для добавления звездочек и последующего вывода значения в конвейер перед тем, как конвейер затем будет использован для команды Get-Adgroups.

Как только результаты поиска возвращаются, он очищается и сводится к простому имени, затем сортируется, чтобы получить список имен в отсортированном порядке.

Описание "-Properties", информация "не нужна, потому что все, что вам нужно, это имя, так зачем запрашивать описание или информационные поля?

Я только что проверил это, и, несмотря на то, что сказал Ансгар Вичерс, это работает.Если этот ответ поможет вам, пожалуйста, проголосуйте.

0 голосов
/ 08 февраля 2019

Вы не можете таким образом передать определение строки в отфильтрованный командлет.Сначала объявите переменную.

Как только вы это сделаете, отфильтруйте, как требуется, затем выберите нужные свойства (свойство Description необходимо, так как оно не возвращается по умолчанию командлетом, тогда как Nameсвойство есть).

$us = Read-Host 'Enter Your User Group Name:'
Get-ADGroup -filter "Name -like '*$us*'" -Properties Description | Select-Object Name , Description | Sort-Object Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...