Polecenie cmdlet programu PowerShell Pobierz ad-komputer może służyć do uzyskiwania różnych informacji o kontach komputerowych (serwerach i stacjach roboczych) w domenie Active Directory. Jest to jedno z najbardziej przydatnych poleceń cmdlet do wybierania i wyszukiwania komputerów według różnych kryteriów w domenie AD (aby uzyskać informacje o kontach użytkowników AD, używane jest inne polecenie cmdlet - Get-ADUser).
Treść
- Podstawowa składnia i korzystanie z polecenia cmdlet Get-ADComputer
- Przykłady poleceń cmdlet Get-ADComputer
Załóżmy, że Twoim zadaniem jest znalezienie w Active Directory wszystkich nieaktywnych komputerów, które nie były zarejestrowane w domenie przez ponad 120 dni i zablokowanie kont tych komputerów.
Przed rozpoczęciem korzystania z polecenia cmdlet Get-ADComputer należy podłączyć moduł Active Directory dla Windows PowerShell.
Aktywowany katalog Import-Module
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell
Podstawowa składnia i korzystanie z polecenia cmdlet Get-ADComputer
Pomoc dotyczącą parametrów polecenia cmdlet Get-ADComputer jest standardowo wywoływana za pomocą Get-Help:
Uzyskaj pomoc Get-ADComputer
Aby uzyskać informacje o koncie domeny określonego komputera lub serwera, podaj jego nazwę jako argument parametru -Tożsamość:
Get-ADComputer -Identity SRV-DB01
DistinguishedName: CN = DB01, OU = serwery, OU = MSK, DC = winitpro, DC = en DNSHostName: DB01.winitpro.ru Włączone: True Name: DB01 ObjectClass: komputer ObjectGUID: 1234567c-13f8-4a2c-8b00-b30a32324103 SamAccountName: DB01 $ SID: S-1-5-21-3243682314-1360322815-2238451561-4318 UserPrincipalName:
Polecenie cmdlet zwróciło tylko podstawowe właściwości obiektu Computer z AD. Interesuje nas czas ostatniej rejestracji komputera w domenie AD, ale ta informacja nie znajduje się w danych wyjściowych polecenia. Wyświetl wszystkie dostępne właściwości tego komputera z usługi Active Directory:
Get-ADComputer -Identity SRV-DB01 -Properties *
Get-ADComputer -Filter * -Properties * | Pobierz członka
Jak widać, czas ostatniego zalogowania komputera do sieci jest wskazany w atrybucie komputera LastLogonDate - 09/21/2015 12:20:17.
Polecenie cmdlet Get-ADComputer pozwala wyświetlać dowolne właściwości komputera w wynikach polecenia. Usuwamy wszystkie niepotrzebne informacje, pozostawiając tylko wartości pól w danych wyjściowych Imię i LastLogonDate.
Get-ADComputer -identity SRV-DB01 -Properties * | Nazwa FT, LastLogonDate -Autosize
Mamy więc dane o ostatnim czasie rejestracji w domenie dla jednego komputera. Teraz musimy zmienić polecenie, aby zwracało informacje o czasie ostatniej rejestracji w sieci dla wszystkich komputerów w domenie. Aby to zrobić, zastąp parametr -Tożsamość na -Filtruj:
Get-ADComputer -Filter * -Properties * | Nazwa FT, LastLogonDate -Autosize
Mamy tabelę zawierającą tylko 2 pola: nazwę komputera i datę LastLogonData. Możesz dodać inne pola obiektu Computer z AD do tej tabeli. Aby wyświetlić informacje o komputerach w kontenerze określonej domeny (OU), użyj parametru SearchBase:Get-ADComputer -SearchBase 'OU = Moskwa, DC = winitpro, DC = loc' -Filter * -Properties * | Nazwa FT, LastLogonDate -Autosize
Sortujemy wyniki zapytania według czasu ostatniego logowania do sieci (pole LastLogonDate) za pomocą polecenia Sortuj:
Get-ADComputer -Filter * -Properties * | Sortuj LastLogonDate | Nazwa FT, LastLogonDate -Autosize
Mamy więc listę komputerów w domenie i czas ich ostatniego wejścia do sieci Active Directory. Teraz chcemy zablokować konta komputerowe, które nie były używane przez ponad 120 dni.
Za pomocą Get-Date otrzymujemy bieżącą datę w zmiennej i odejmujemy 120 dni od bieżącej daty:
$ date_with_offset = (Get-Date) .AddDays (-120)
Uzyskaną zmienną z datą można wykorzystać jako filtr dla żądania Get-ADComputer według pola LastLogonDate
Get-ADComputer -Properties LastLogonDate -Filter LastLogonDate -lt $ date_with_offset | Sortuj LastLogonDate | Nazwa FT, LastLogonDate -Autosize
W ten sposób otrzymaliśmy listę nieaktywnych komputerów, które nie były zarejestrowane w sieci przez ponad 120 dni. Za pomocą polecenia cmdlet Ustaw komputer-reklamowy lub Disable-ADAccount możesz wyłączyć te konta.
Wskazówka. Po raz pierwszy lepiej przetestować wyniki polecenia za pomocą przełącznika -Whatif, dzięki czemu zespół nie dokonuje żadnych zmian, pokazując, co się stanie po jego wykonaniu.
Get-ADComputer -Properties LastLogonDate -Filter LastLogonData -lt $ date_with_offset | Set-ADComputer -Enabled $ false -whatif
Teraz możesz zablokować wszystkie otrzymane konta komputerowe:
Get-ADComputer -Properties LastLogonDate -Filter LastLogonData -lt $ datecutoff | Set-ADComputer -Enabled $ false
Wskazówka. Listę zablokowanych, rozłączonych i nieaktywnych komputerów i użytkowników domeny można także uzyskać za pomocą osobnego polecenia cmdlet Search-ADAccount..
Przykłady poleceń cmdlet Get-ADComputer
Poniżej znajdują się bardziej przydatne przykłady poleceń korzystających z polecenia cmdlet Get-ADComputer, za pomocą którego można wybierać i wyszukiwać komputery w domenie według określonych kryteriów.
Uzyskaj całkowitą liczbę aktywnych (odblokowanych) komputerów w Active Directory:
(Get-ADComputer -Filter włączone -eq „prawda”)
Przeczytaj liczbę serwerów Windows Server w domenie:
(Get-ADComputer -Filter włączony -eq „true” -i OperatingSystem -Like „* Windows Server *”).
Uzyskaj listę komputerów w konkretnej jednostce organizacyjnej, których nazwy zaczynają się od BuhPC:
Get-ADComputer -Filter Nazwa „BuhPC *” -SearchBase 'OU = Moskwa, DC = winitpro, DC = loc' -Properties IPv4Address | Nazwa tabeli formatów, DNSHostName, IPv4Address | ft-wrap-auto
Podczas wyszukiwania według jednostki organizacyjnej możesz użyć dodatkowego parametru -SearchScope 1, co oznacza, że musisz wyszukiwać tylko na partycji głównej. Parametr -SearchScope 2 oznacza rekurencyjne wyszukiwanie komputerów we wszystkich zagnieżdżonych jednostkach organizacyjnych.
Wybierz wszystkie stacje robocze z systemem Windows 10:
Get-ADComputer -Filter podobny do systemu operacyjnego „* Windows 10 *”
Uzyskaj listę serwerów w domenie z zainstalowaną wersją systemu operacyjnego, adresem IP i dodatkiem Service Pack:Get-ADComputer -Filter podobny do systemu operacyjnego „* Windows Server *” i włączony -eq „true” ”-Properties Nazwa, system operacyjny, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address | Sort-Object -Property Operatingsystem | Select-Object -Property Name, Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address | ft-wrap-auto
Wynik był taki piękny stół z listą Windows Server w AD.
Atrybut -LDAPFilter umożliwia użycie różnych zapytań LDAP jako parametru polecenia cmdlet Get-ADComputer, na przykład:
Get-ADComputer -LDAPFilter "(name = * db *)" | ft
Wybierz zablokowane komputery w określonej jednostce organizacyjnej:
Get-ADComputer -filter * -SearchBase 'OU = Komputery, dc = winitpro, dc = loc' | Where-Object $ _. Enabled -eq $ False
Aby usunąć wszystkie konta komputerów w domenie, które nie logowały się w domenie przez ponad 6 miesięcy, możesz użyć polecenia:
get-adcomputer -properties lastLogonDate -filter * | gdzie $ _. lastLogonDate -lt (get-date) .addmonths (-6) | Remove-ADComputer
Wynik polecenia Get-ADComputer można pobrać do pliku tekstowego:
Get-ADComputer -Filter OperatingSystem -Like '* Windows Server 2008 *' -Properties OperatingSystem | Wybierz DNSHostName, OperatingSystem | Format-Table -AutoSize C: \ Script \ server_system.txt
Możesz także uzyskać wybór komputerów i wyeksportować go do pliku CSV:
Get-ADComputer -Filter * -Property * | Wybierz nazwę obiektu, OperatingSystem, OperatingSystemServicePack | Export-CSV All-Windows.csv -NoTypeInformation -Encoding UTF8
Lub pobierz plik raportu HTML z listą komputerów i niezbędnymi atrybutami komputera:
Get-ADComputer -Filter OperatingSystem -Like '* Windows Server 2012 *' -Properties * | Wybierz nazwę obiektu, system operacyjny | ConvertTo-Html | Plik wyjściowy C: \ ps \ ad_computer.html
Aby wykonać określoną akcję na wszystkich komputerach z listy, musisz użyć pętli Foreach. W tym przykładzie chcemy uzyskać listę serwerów w domenie wraz z modelem i producentem:
$ Computers = Get-ADComputer -Filter OperatingSystem -Like '* Windows Server *'
Foreach ($ Komputery w $ Komputery)
$ Hostname = $ Computer.Name
$ ComputerInfo = (Get-WmiObject -Nazwa komputera $ Nazwa hosta Win32_ComputerSystem)
$ Producent = $ Komputer. Producent
$ Model = $ Computer.Model
Host zapisu „Nazwa: $ Nazwa hosta”
Host zapisu „Producent: $ Producent”
Host zapisu „Model: $ Model”
Host zapisu „”
$ Content = "$ Nazwa hosta; $ Producent; $ Model"
Dodaj treść -Wartość $ Treść -Ścieżka „C: \ PS \ ServersInfo.txt”
Lub możesz użyć krótszej składni pętli. Załóżmy, że musimy wykonać określone polecenie na wszystkich komputerach w określonej jednostce organizacyjnej (w tym przykładzie chcemy uruchomić polecenie w celu zaktualizowania ustawień zasad grupy na wszystkich serwerach):
get-adcomputer -SearchBase "OU = Serwery, DC = winitpro, DC = loc" -Filter * | % Invoke-Command -Computer $ _. Nazwa -ScriptBlock gpupdate / force
Za pomocą Get-AdComputer i logowania do skryptu PowerShell można kontrolować różne ustawienia komputera. Na przykład monitoruję status agenta SCCM na komputerach użytkowników. Po uruchomieniu każdego komputera uruchamia skrypt logowania, który za pomocą Set-ADComputer zapisuje status usługi ccmexec w atrybucie wolnego komputera - extensionAttribute10.
Następnie za pomocą następującego polecenia mogę znaleźć komputery, na których brakuje usługi CCMExec lub nie działa:
get-adcomputer -filter extensionAttribute10 -ne "Agent SCCM: Uruchomiony" -SearchBase „OU = Komputery, OU = MSK, DC = winitpro, DC = en” -properties dNSHostName, extensionAttribute10, LastLogonDate | wybierz obiekt dNSHostName, rozszerzenieAtrybut LastLogonDate