Объединение команд PowerShell - PullRequest
0 голосов
/ 27 февраля 2019

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

Возвращает счетчик всех активных пользователей.в определенном подразделении

(Get-ADUser -searchbase "OU=OU, DC=domain, DC=com" -filter * |Where {$_.enabled -eq "True"}).count

Возвращает подразделение, расположенное под тем же подразделением, указанным выше, со значением "string" в свойстве description.

Get-ADOrganizationalUnit -searchbase "OU=OU, DC=domain, DC=com" -filter * -Properties description | where {$_.description -eq "string"}

Я пытаюсь выполнить дляскрипт для подсчета всех активных пользователей под подразделениями, у которых есть «строка» в свойстве description.

Ответы [ 2 ]

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

Полезный ответ Серхио Танака работает хорошо;позвольте мне дополнить его улучшением производительности :

Вы можете значительно ускорить вашу команду, отфильтровав в источнике , передав фильтркритерий как -Filter аргумент вместо того, чтобы сначала извлекать все объекты, а затем фильтровать их с помощью отдельного вызова Where-Object:

Get-ADOrganizationalUnit -SearchBase 'OU=OU, DC=domain, DC=com' `
                        -Filter  'Description -eq "string"' -Properties description |   #`
  ForEach-Object {
    $count = (Get-ADUser -SearchBase $_ -Filter 'Enabled -eq $true').Count
  }

Обратите внимание, что -Filter -синтаксис строки командлетов AD напоминает код PowerShell, но отличается во многих важных аспектах - см. Get-Help about_ActiveDirectory_Filter


Общие преимуществаиспользование -Filter:

В общем, такое же улучшение производительности может быть достигнуто с помощью командлетов для других поставщиков данных PowerShell, например, для файловой системы (например, Get-ChildItem), если они поддерживают-Filter параметр:

  • Строка -Filter применяется к источнику данных , что означает, что PowerShell получает только результат фильтрация.

    • Так как провайдеры внедреныd в скомпилированном коде (и у них есть доступ к внутренним компонентам более низкого уровня), это обычно значительно повышает производительность;Кроме того, в сценариях удаленного взаимодействия производительность повышается за счет простой передачи меньшего количества данных по сети.
  • Обратите внимание, что параметры -Filter всегда строки с специфичный для поставщика синтаксис , поэтому вы должны обратиться к документации соответствующего поставщика / командлета.

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

Я думаю, что это самый простой способ достижения вашей цели

$OUs = Get-ADOrganizationalUnit -searchbase "OU=OU, DC=domain, DC=com" -filter * -Properties description | where {$_.description -eq "string"}
ForEach ($OU in $OUs) {
    $count = (Get-ADUser -searchbase $OU -filter * | Where {$_.enabled -eq "True"}).count
    Write-Host "OU $OU has $count users"
}

результат будет

OU OU=foo,DC=domain,DC=com has 6 users
OU OU=Computers,OU=foo,DC=domain,DC=com has 0 users
OU OU=Users,OU=foo,DC=domain,DC=com has 6 users
OU OU=Groups,OU=foo,DC=domain,DC=com has 0 users
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...