Get-ADComputer wyświetla informacje o komputerze w Active Directory poprzez PowerShell

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

Wskazówka. W programie PowerShell 3.0 (wprowadzonym w systemie Windows Server 2012) i nowszych moduł ten jest domyślnie podłączony podczas instalowania Narzędzi administracji zdalnej serwera -> Narzędzia administracji roli -> Narzędzia AD DS i AD LDS -> Moduł Active Directory dla Windows PowerShell. Aby użyć polecenia cmdlet Get-ADComputer w kliencie Windows 10.8.1 i Windows 7, musisz pobrać i zainstalować RSAT dla swojej wersji systemu operacyjnego oraz włączyć moduł AD-PowerShell z panelu sterowania lub za pomocą polecenia:
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 z AD za pomocą poleceń cmdlet modułu AD for Powershell, nie trzeba mieć uprawnień administratora domeny, wystarczy, że konto, na którym uruchamiane jest polecenie cmdlet, znajduje się w grupie użytkowników domeny (Użytkownicy uwierzytelnieni / Użytkownicy domeny).

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 *

Korzystając z Get-Member, możesz uzyskać listę wszystkich właściwości klasy Computer w AD:

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