Rutina PowerShell Get-adcomputer lze použít k získání různých informací o počítačových účtech (serverech a pracovních stanicích) v doméně služby Active Directory. Toto je jeden z nejužitečnějších rutin pro výběr a prohledávání počítačů podle různých kritérií v doméně AD (pro získání informací o uživatelských účtech AD se používá další rutina - Get-ADUser).
Obsah:
- Základní syntaxe a použití Get-ADComputer Cmdlet
- Příklady cmdletů Get-ADComputer
Předpokládejme, že vaším úkolem je najít ve službě Active Directory všechny neaktivní počítače, které nebyly zaregistrovány v doméně déle než 120 dnů, a zablokovat účty těchto počítačů.
Než začnete používat rutinu Get-ADComputer, musíte připojit modul Active Directory pro Windows PowerShell.
Adresář importního modulu
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Role-AD-Powershell
Základní syntaxe a použití Get-ADComputer Cmdlet
Nápověda týkající se parametrů rutiny Get-ADComputer je vyvolána standardně pomocí nápovědy:
Get-Help Get-ADComputer
Chcete-li získat informace o účtu domény konkrétního počítače nebo serveru, zadejte jeho název jako argument parametru -Identita:
Get-ADComputer -Identity SRV-DB01
Rozlišující název: CN = DB01, OU = Servery, OU = MSK, DC = winitpro, DC = cs DNSHostName: DB01.winitpro.ru Povoleno: True Name: DB01 ObjectClass: computer ObjectGUID: 1234567c-13f8-4a2c-8b00-b30a32324103 SamAccountName: DB01 $ SID: S-1-5-21-3243682314-1360322815-2238451561-4318 UserPrincipalName:
Rutina vrátila z AD pouze základní vlastnosti objektu Computer. Zajímá nás čas poslední registrace počítače v doméně AD, ale tato informace není ve výstupu příkazu. Seznam všech dostupných vlastností tohoto počítače ze služby Active Directory:
Get-ADComputer -Identity SRV-DB01 -Properties *
Get-ADComputer -Filter * -Properties * | Získejte člena
Jak vidíte, čas posledního přihlášení počítače k síti je uveden v atributu počítače LastLogonDate - 21.9.2015 12:20:17.
Rutina Get-ADComputer umožňuje zobrazit všechny vlastnosti počítače ve výsledcích příkazu. Odebereme všechny nepotřebné informace a na výstupu ponecháme pouze hodnoty polí Jméno a LastLogonDate.
Get-ADComputer -identity SRV-DB01 -Vlastnosti * | Název FT, LastLogonDate -Autosize
Získali jsme tedy údaje o poslední době registrace v doméně pro jeden počítač. Nyní musíme změnit příkaz tak, aby vrátil informace o době poslední registrace v síti pro všechny počítače v doméně. Za tímto účelem vyměňte parametr -Identita dál -Filtr:
Get-ADComputer -Filter * -Properties * | Název FT, LastLogonDate -Autosize
Dostali jsme tabulku, která obsahuje pouze 2 pole: jméno a datum počítače LastLogonData. Do této tabulky můžete přidat další pole objektu Computer z AD. Chcete-li zobrazit informace o počítačích v kontejneru konkrétní domény (OU), použijte parametr SearchBase:Get-ADComputer -SearchBase 'OU = Moskva, DC = winitpro, DC = loc' -Filter * -Properties * | Název FT, LastLogonDate -Autosize
Výsledky dotazu seřadí podle času posledního přihlášení do sítě (pole LastLogonDate) pomocí příkazu Seřadit:
Get-ADComputer -Filter * -Properties * | Seřadit LastLogonDate | Název FT, LastLogonDate -Autosize
Dostali jsme tedy seznam doménových počítačů a čas jejich posledního vstupu do sítě Active Directory. Nyní chceme blokovat počítačové účty, které nebyly používány déle než 120 dní.
Pomocí funkce Get-Date získáme aktuální proměnné a odečteme 120 dní od aktuálního data:
$ date_with_offset = (Get-Date) .AddDays (-120)
Získaná proměnná s datem může být použita jako filtr pro požadavek Get-ADComputer podle pole LastLogonDate
Get-ADComputer -Properties LastLogonDate -Filter LastLogonDate -lt $ date_with_offset | Seřadit LastLogonDate | Název FT, LastLogonDate -Autosize
Dostali jsme tedy seznam neaktivních počítačů, které nebyly zaregistrovány v síti déle než 120 dnů. Použití rutiny Set-adcomputer nebo Zakázat-ADAccount, můžete tyto účty deaktivovat.
Tip. Poprvé je lepší vyzkoušet výsledky příkazu pomocí přepínače -Whatif, díky kterému tým neprovádí žádné změny, ukazuje, co se stane, když bude proveden.
Get-ADComputer -Properties LastLogonDate -Filter LastLogonData -lt $ date_with_offset | Set-ADComputer - Povoleno $ false - whatif
Nyní můžete zablokovat všechny přijaté účty počítače:
Get-ADComputer -Properties LastLogonDate -Filter LastLogonData -lt $ datecutoff | Set-ADComputer - Povoleno $ false
Tip. Seznam blokovaných, odpojených a neaktivních uživatelů počítačů a domén lze také získat pomocí samostatné rutiny Search-ADAccount..
Příklady cmdletů Get-ADComputer
Níže uvádíme několik užitečnějších příkladů příkazů používajících rutinu Get-ADComputer, které můžete použít k výběru a vyhledávání doménových počítačů podle určitých kritérií.
Získejte celkový počet aktivních (odemčených) počítačů ve službě Active Directory:
(Get-ADComputer -Filter enabled -eq "true")
Přečtěte si počet serverů Windows Server v doméně:
(Get-ADComputer -Filter enabled -eq "true" - a OperatingSystem -Like '* Windows Server *').
Získejte seznam počítačů v konkrétním OU, jehož jména začínají na BuhPC:
Get-ADComputer -Filter Name-like "BuhPC *" -SearchBase 'OU = Moscow, DC = winitpro, DC = loc' -Properties IPv4Address | Název tabulky formátu, DNSHostName, IPv4Address | ft-wrap-auto
Při vyhledávání podle OU můžete použít další parametr -SearchScope 1, což znamená, že musíte hledat pouze v kořenovém oddílu. Parametr -SearchScope 2 znamená rekurzivní vyhledávání počítačů ve všech vnořených organizačních jednotkách.
Vyberte všechny pracovní stanice se systémem Windows 10:
Get-ADComputer -Filter OperatingSystem-like '* Windows 10 *'
Získejte seznam serverů v doméně s nainstalovanou verzí OS, adresou IP a aktualizací Service Pack:Get-ADComputer -Filter 'operatingsystem-like "* Windows server *" -a enabled -eq "true"' -Properties Name, Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address | Sort-Object -Property Operatingsystem | Select-Object -Property Name, Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address | ft-wrap-auto
Výstupem byla taková krásná tabulka se seznamem Windows Server v AD.
Atribut -LDAPFilter vám umožňuje použít různé dotazy LDAP jako parametr cmdlet Get-ADComputer, například:
Get-ADComputer -LDAPFilter "(name = * db *)" | ft
Vyberte uzamčené počítače v konkrétní OU:
Get-ADComputer -filter * -SearchBase 'OU = Počítače, dc = winitpro, dc = loc' | Where-Object $ _. Enabled -eq $ False
Chcete-li odstranit všechny účty počítače v doméně, které nebyly přihlášeny do domény déle než 6 měsíců, můžete použít příkaz:
get-adcomputer -properties lastLogonDate -filter * | kde $ _. lastLogonDate -lt (get-date) .addmonths (-6) | Remove-ADComputer
Výsledek příkazu Get-ADComputer lze stáhnout do textového souboru:
Get-ADComputer -Filter OperatingSystem -Like '* Windows Server 2008 *' -Properties OperatingSystem | Vyberte DNSHostName, OperatingSystem | Tabulka formátu -AutoSize C: \ Script \ server_system.txt
Můžete také získat výběr počítačů a exportovat je do souboru CSV:
Get-ADComputer -Filter * -Property * | Název Select-Object, OperatingSystem, OperatingSystemServicePack | Exportovat CSV All-Windows.csv -NoTypeInformation -Encoding UTF8
Nebo získejte soubor sestavy HTML se seznamem počítačů a nezbytnými atributy počítače:
Get-ADComputer -Filter OperatingSystem -Like '* Windows Server 2012 *' -Properties * | Select-Object Name, OperatingSystem | ConvertTo-Html | Out-File C: \ ps \ ad_computer.html
Chcete-li provést konkrétní akci se všemi počítači ze seznamu, musíte použít smyčku Foreach. V tomto příkladu chceme získat seznam serverů v doméně s modelem a výrobcem:
$ Computers = Get-ADComputer -Filter OperatingSystem -Like '* Windows Server *'
Foreach ($ Computer in $ Computers)
$ Hostname = $ Computer.Name
$ ComputerInfo = (Get-WmiObject -Název_počítače $ Hostname Win32_ComputerSystem)
$ Výrobce = $ Počítač. Výrobce
$ Model = $ Computer.Model
Write-Host "Name: $ Hostname"
Write-Host "Výrobce: $ Výrobce"
Write-Host "Model: $ Model"
Write-Host ""
$ Content = "$ Hostname; $ Výrobce; $ Model"
Přidat obsah -Hodnota $ Obsah -Cesta "C: \ PS \ ServersInfo.txt"
Nebo můžete použít kratší syntaxi smyčky. Předpokládejme, že potřebujeme provést konkrétní příkaz na všech počítačích v určité OU (v tomto příkladu chceme spustit příkaz pro aktualizaci nastavení skupinových zásad na všech serverech):
get-adcomputer -SearchBase "OU = Servery, DC = winitpro, DC = loc" -Filter * | % Invoke-Command -Computer $ _. Name -ScriptBlock gpupdate / force
Pomocí programu Get-AdComputer a přihlašovacího skriptu PowerShell můžete ovládat různá nastavení počítače. Například monitoruji stav agenta SCCM v počítačích uživatelů. Po spuštění každého počítače se spustí přihlašovací skript, který pomocí Set-ADComputer uloží stav služby ccmexec do atributu volného počítače - extensionAttribute10.
Poté pomocí následujícího příkazu najdu počítače, na kterých služba CCMExec chybí nebo není spuštěna:
get-adcomputer -filter extensionAttribute10 -ne "Agent SCCM: Running" -SearchBase “OU = Computers, OU = MSK, DC = winitpro, DC = en” -properties dNSHostName, extensionAttribute10, LastLogonDate | select-object dNSHostName, extensionAttribute LastLogonDate