Как пропустить Computernames в OU Active Directory - PullRequest
0 голосов
/ 04 февраля 2020

Я хотел бы получить отсутствующие имена компьютеров в нашей Active Directory.

В настоящее время у нас есть соглашение об именах для ноутбуков:

NB-DE-00001 

и для P C:

PC-DE-00001

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

В AD, например

NB-DN-00001
NB-DE-00004

Сейчас Я хотел бы определить недостающие так 2-3 в этом примере.

Есть ли способ сделать это в PowerShell?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

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

Мое решение прямо сейчас:

Мой первый шаг - получить отсортированный список компьютеров и ноутбуков (мне просто нужны эти фильтры для вещей)

$ADnbSorted = Get-ADComputer -SearchBase 'OU=computers,dc=example,dc=com' -Filter {(Name -like "NB-DE-*") -and (Name -notlike "NB-DE-M*") }| Sort-Object | Select-Object Name

$ADpcSorted = Get-ADComputer -SearchBase 'OU=computers,dc=example,dc=com' -Filter {(Name -notlike "PC-DE-R*") -and (Name -like "PC-DE-*") } | Sort-Object | Select-Object Name

Мой следующий шаг - создать список шаблонов, как должен выглядеть правильный список имен хостов

$templatehostname = 1..$ADpcSorted[-1].Name |
         ForEach-Object{ "$prefix" + $_.ToString("00000")}

Я использую префикс, потому что это небольшое приложение, в которое пользователь может войти, если он хочет знать все неизвестные P C и все неизвестные ноутбуки Имена хостов :)

После этого я просто сравниваю оба из них и добавляю пропущенные записи просто в новый список

> ForEach($Hostname in $templatehostname) 
>     {
>         if (-Not ($ADpcSorted.Name.Contains($Hostname))) 
>     {  
>     $freeHostname += $Hostname 
>      }
>      }

Извините за эту кучу дерьма :)

0 голосов
/ 04 февраля 2020

Будет несколько способов сделать это. Но это хорошая отправная точка для перечисления всех пропущенных чисел в формате Five-Di git.

$Computers = Get-ADComputer -Filter "Name -like '*-*'" -SearchBase 'OU Path' |
    Where Name -match '-\d+$' | Select-Object -Expand Name
[int[]]$UsedNumbers = $Computers -replace '.*?-(?=\d+$)' | Sort-Object { [int]$_ }
1..$UsedNumbers[-1] | Where {$_ -notin $UsedNumbers} |
    Foreach-Object { "{0:d5}" -f $_ }

Вы не указали, используете ли NB-DE-*, NB-DN-* или PC-DE-* один и тот же пул номеров, если эти системы используют одни и те же подразделения или если PC-DE-00001 может сосуществовать с NB-DN-00001.

...