Получите AD-компьютер не похожий на отличительное имя - PullRequest
1 голос
/ 04 августа 2020

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

$ServerList = Get-ADComputer -Filter * | Where { 
    $_.DistinguishedName -like "*Computers*" -and $_.DistinguishedName -notlike @("*server1*","*Server2*")
} | Select-Object Name 

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

-and $_.DistinguishedName -notlike "*serverIwantToExclude*"

Вы, ребята, можете дать мне какое-нибудь представление о том, как Могу я это исправить?

Ответы [ 3 ]

2 голосов
/ 04 августа 2020

-notlike не поддерживает коллекции с правой стороны (RHS). Аналогичный подход заключается в использовании -notmatch, который является строкой регулярного выражения:

$ServerList = Get-ADComputer -Filter * |
    Where { $_.DistinguishedName -like "*Computers*" -and $_.DistinguishedName -notmatch 'server1|Server2'} |
        Select-Object Name

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

$serverdown = 'server1','server2'
$regex = $serverdown -join '|'
$ServerList = Get-ADComputer -Filter * |
    Where { $_.DistinguishedName -like "*Computers*" -and $_.DistinguishedName -notmatch $regex} |
        Select-Object Name

Если вы не привязываете свои строки регулярного выражения, он ищет совпадение регулярного выражения в любом месте целевой строки (фактически имея окружающие подстановочные знаки). | - это альтернатива (эффективный OR).

Существуют и другие операторы, поддерживающие коллекции, например -contains, -in, -notin и -notcontains. Однако они должны точно совпадать и не могут использовать подстановочные знаки.

0 голосов
/ 06 августа 2020

другой способ исключить их - добавить все эти компьютеры в группу и исключить ее

# Укажите DN группы

$ groupname = "CN = groupname, OU = Groups, DC = Domain, DC = COM "

get-adcomputer -filter {(OperatingSystem -like" Windows ")} | -собственности * | ? {([строка] $ _. memberof -notmatch $ groupname)} | выберите имя, lastlogondate

0 голосов
/ 04 августа 2020

, вы можете использовать оператор -inotin, если знаете полное имя серверов, которые вы sh исключаете, то есть вы не можете использовать подстановочный знак или регулярное выражение с оператором -inotin. Если это так и вы знаете имена, я рекомендую использовать свойство Name объекта ADComputer.

[string[]] $excludedServers = 'server1','server2'

$ServerList = Get-ADComputer -Filter * | Where { 
    $_.DistinguishedName -like "*Computers*" -and $_.Name -inotin $excludedServers 
} | Select-Object Name 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...