Import uživatelů z Active Directory

Dnes se pokusíme stáhnout seznam všech uživatelů do samostatného souboru z Active Directory. Naším hlavním pomocníkem v této věci bude PowerShell. Jde o to, že Microsoft původně plánoval příkazovou konzolu PowerShell jako hlavní nástroj pro správu komponent Windows serveru. A dnes, když už máme verzi 2.0, je tomu tak.

Dokonce i v nedávné minulosti, aby mohli administrátoři nějak interagovat s AD, potřebovali mít k dispozici buď utilitu dsquery, nebo různé druhy skriptů či utilit. Dnes, počínaje Windows Server 2008 R2, můžeme pracovat s AD prostřednictvím PowerShellu. S příchodem PowerShellu 2.0 se pro interakci s Active Directory používá speciální modul Modul Active Directory pro Windows PowerShell, který obsahuje potřebný seznam rutin. Pro naše úkoly budeme používat příkaz Get-ADUser.

V závislosti na tom, pod jakým operačním systémem budeme konzoli PowerShell provozovat, budeme muset provést „přípravné kroky“.

1) Pokud pracujeme pod Windows Server až do verze 2012, pak musíme spustit příkaz:

  • Import-Modul activedirectory – příkaz pro import modulu do AD

Pro verze operačního systému od roku 2012 je tento modul již ve výchozím nastavení povolen.

2) Pokud pracujeme z libovolného klientského Windows, pak na něm musí být nainstalován balíček vzdálené správy RSAT s nainstalovanou komponentou Active Directory Module for Windows PowerShell.

Stojí za zmínku, že rutinu Get-ADUser se doporučuje spustit, když je množství nahrávaných dat až 1 000 uživatelů.

Export uživatelů AD pomocí PowerShellu do samostatného souboru

Nejprve si zavolejte nápovědu pro příkaz Get-ADUser. Díky tomu dostanete všechny potřebné příkazy pro další správu.

  • pomoci Get-ADUser – příkaz pro volání pomoci

Chcete-li získat seznam všech uživatelů se všemi vlastnostmi v okně PowerShellu, musíte spustit následující příkaz:

  • Get-ADUser -filtr * – export seznamu uživatelů AD

Toto nahrání není zcela informativní a nevejdou se do něj všechny potřebné informace. Zkusme proto zúžit vyhledávání a zobrazit vlastnosti konkrétního uživatele jménem user1:

  • Get-ADUser -identity user1 -properties * – export vlastností konkrétního uživatele

Nyní se pokusíme exportovat seznam všech uživatelů s jejich vlastnostmi do externího zařízení txt nebo csv soubor:

  • Get-ADUser -filtr * -properties * | Export-csv -cesta c:\users.csv -kódování Unicode – exportovat uživatele do samostatného souboru

Zvláštní pozornost bych chtěl věnovat klíči -kódování Unicode. Slouží k tomu, aby se ruská azbuka po exportu z AD správně zobrazila v nahraném souboru. Například přes Microsoft Excel uvidíme otazníky místo ruských písmen.

Při prohlížení souboru se data exportují v jednom řádku a nejsou tedy čitelná. Abychom to změnili, musíme provést následující:

Skripty pro uvolnění všech uživatelů z MS Active Directory (ITGC)

Ivan Piskunov

Jeden ze standardních auditorských postupů ITGC pro katalog Aktivní adresář je získat stažení všech uživatelů domény. Na základě získaných dat se pak tvoří testovací postupy, například prostudování seznamu správců nebo identifikace uživatelů s prošlým heslem. Nejúčinnějším způsobem, jak vytvořit takový upload, by bylo použít standardní rozhraní PowerShell , jejichž příklady budeme v tomto článku zvažovat

1. Expresní nahrání pomocí skriptu PowerShell

Níže je uveden skript PowerShell jako jeden z nejjednodušších a nejrychlejších způsobů, jak získat seznam všech uživatelů domény AD ve formátu CSV, který lze snadno otevřít v aplikaci Excel.

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=ru" $objSearcher.Filter = "(&(objectCategory=person) (!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # Počet účtů $users.Count $users | ForEach-Object ( $user = $_.Properties New-Object PsObject -Property @( Pozice = $user.description Department = $user.department Login = $user.userprincipalname Phone = $user.telephonenumber Místnost = $user.physicaldeliveryofficename Úplné jméno = $user.cn ) ) | Export-Csv -NoClobber -Kódování utf8 -Cesta C: seznam_uživatelů_domény.csv

Aby skript na vašem systému fungoval, je potřeba jej mírně korigovat, a to zadat potřebné parametry, tzn. jako v tomto příkladu jsou to parametry Uživatelé v oddělení oddělení v doméně Test.ru. A také uveďte cestu, kam je soubor uložen seznam_uživatelů_domény.csv

Po vyložení, pokud jej ihned otevřete seznam_uživatelů_domény.csv , bude vypadat nečitelně, ale pomocí standardních prostředků jej snadno převedeme do formátu, který potřebujeme. Otevřít v Excelu seznam_uživatelů_domény.csv , vyberte první sloupec, poté přejděte na kartu „Data“ a klikněte na „Text po sloupcích“. Vyberte „oddělovač“ a klikněte na „Další“. Připraveno!

!Je nutno poznamenatže tento skript nezobrazí více než 1000 uživatelů. Je to docela vhodné pro malou společnost, ale pro ty, kteří mají ve své doméně velké množství uživatelů, by se měli uchýlit k níže popsaným metodám.

2. Pokročilá rutina PowerShell pro získávání nahrávek uživatelů služby Active Directory

Nástroj Active Directory Module pro Windows PowerShell (zavedený v systému Windows Server 2008 R2 a vyšším) umožňuje vytvářet rutiny, které provádějí různé manipulace s objekty adresáře AD. Rutina se používá k získání informací o uživatelích a jejich vlastnostech Get-ADUser.

Začít spusťte okno Powershell s právy správce a importujte modul Active Directory pro další akci:
Import-Modul activedirectory

Na seznam všech doménových účtů a spusťte příkaz:

Get-ADUser -filtr *

Na zobrazit úplné informace o všech dostupných atributech uživatel tuser, spusťte příkaz

Get-ADUser -identity tuser -properties *


Zajímají nás například informace o datum změny hesla a čas, kdy vyprší jeho platnost . Výsledek příkazu lze exportovat do textového souboru:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:tempusers.txt

Nebo hned nahrát do CSV , které bude v budoucnu vhodné exportovat do Excelu (navíc pomocí sort-object seřadíme tabulku podle sloupce PasswordLastSet a přidáme i podmínku where - uživatelské jméno musí obsahovat řetězec „Dmitry“).

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | kde ($_.name – jako „*Dmitry*“) | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -cesta c:tempuser-password-expires-2015.csv

Pokračujeme v seznamování s užitečnými rutinami PowerShell pro práci s Active Directory. V minulém článku jsme hovořili o tom, který umožňuje získat jakékoli informace o uživatelských účtech AD. Dnes si povíme něco o cmdletu Dostat-ADComputer a jeho využití k získání různých dat o účtech počítačů (serverů a pracovních stanic) v doméně Active Directory.

Stanovme si praktický úkol: pomocí PowerShellu je potřeba získat seznam účtů počítačů, které nejsou registrovány v doméně déle než 120 dní (neaktivní počítače) a zakázat je.

Než budete moci používat rutinu Get-ADComputer, musíte modul povolit AktivníAdresářModulproOknaPowerShell.

Import-Modul activedirectory

Rada. V prostředí PowerShell 3.0 (zavedeném v systému Windows Server 2012) a vyšším je tento modul ve výchozím nastavení povolen při instalaci součásti Nástroje pro správu vzdáleného serveru -> Nástroje pro správu rolí -> Nástroje AD DS a AD LDS -> Modul Active Directory pro Windows PowerShell. Chcete-li používat rutinu Get-ADComputer v klientech Windows 10.8.1 a Windows 7, musíte si stáhnout a nainstalovat pro svou verzi operačního systému a povolit modul AD-Powershell z ovládacího panelu nebo pomocí příkazu:
Enable-WindowsVolitelnáFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

Aspekty syntaxe rutiny Get-ADComputer

Nápověda k parametrům rutiny Get-ADComputer se standardně volá pomocí Get-Help:

Pro získání informací z AD pomocí rutin modulu AD for Powershell není nutné mít práva správce domény, stačí, aby byl účet, pod kterým je rutina spuštěna, zařazen do skupiny uživatelů domény (Authenticated Users / Domain Users).

Chcete-li získat informace o konkrétním počítači v doméně, zadejte jeho název s parametrem - Identita:

Get-ADComputer -Identity SRV-DB01

Zajímá nás čas, kdy byl počítač naposledy zaregistrován v doméně AD, ale tato informace není ve výstupu příkazu. Zobrazme všechny dostupné vlastnosti počítače v Active Directory:

Get-ADComputer -Identity SRV-DB01 -Vlastnosti *

Jak vidíte, poslední přihlášení tohoto počítače do sítě je uvedeno v atributu LastLogonDate – 09.21.2015 0:20:17.

Odstraníme všechny nepotřebné informace a ponecháme pouze hodnoty polí název A Datum posledního přihlášení.

Get-ADComputer -identity SRV-DB01 -Vlastnosti * | FT Name, LastLogonDate -Autosize

Dále je potřeba opravit příkaz tak, aby zobrazoval informaci o čase poslední registrace v síti pro všechny počítače v doméně. Chcete-li to provést, nahraďte parametr Identita na Filtr:

Get-ADComputer -Filter * -Vlastnosti * | FT Name, LastLogonDate -Autosize

Chcete-li zobrazit informace o počítačích v konkrétním doménovém kontejneru (OU), použijte parametr SearchBase:
Get-ADComputer -SearchBase ‘OU=Moskva,DC=winitpro,DC=loc’ -Filtr * -Vlastnosti * | FT Name, LastLogonDate -Autosize

Seřaďme výsledky dotazu podle času posledního přihlášení do sítě (pole LastLogonDate) pomocí příkazu Seřadit:

Get-ADComputer -Filter * -Vlastnosti * | Seřadit PosledníPřihlášeníDate | FT Name, LastLogonDate -Autosize

Obdrželi jsme tedy seznam počítačů v doméně a čas, kdy se naposledy přihlásili do sítě Active Directory, nyní chceme zablokovat účty počítačů, které nebyly používány déle než 120 dní.

Pomocí Get-Date získáme hodnotu aktuálního data v proměnné a odečteme 120 dní od aktuálního data:

$date_with_offset= (Get-Date).AddDays(-120)

Výslednou proměnnou data lze použít jako filtr pro požadavek Get-ADComputer pomocí pole LastLogonDate

Get-ADComputer -Vlastnosti LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | Seřadit PosledníPřihlášeníDate | FT Name, LastLogonDate -Autosize

Obdrželi jsme tedy seznam neaktivních počítačů, které nebyly registrovány v síti déle než 120 dní. Pomocí příkazu Zakázat-ADÚčet Pojďme je vypnout.

Rada. Napoprvé je lepší otestovat výsledky příkazu pomocí přepínače Co když, který zajišťuje, že příkaz neprovede žádné změny a ukazuje, co se stane, když je proveden.

Get-ADComputer -Vlastnosti LastLogonDate -Filter (LastLogonData -lt $date_with_offset ) | Set-ADComputer -Povoleno $false -whatif

Nyní můžete zablokovat všechny přijaté počítačové účty:

Get-ADComputer -Vlastnosti LastLogonDate -Filter (LastLogonData -lt $datecutoff) | Set-ADComputer -Povoleno $false

Get-ADComputer: praktické příklady použití

Níže jsou uvedeny některé další užitečné příklady příkazů pomocí rutiny Get-ADComputer.

Získejte počet počítačů v Active Directory:

Get-ADComputer -Filter (SamAccountName -jako "*") | Měřit-objekt

Seznam počítačů, jejichž názvy začínají na BuhPC:

Get-ADComputer -Filtr "Name -like "BuhPC*"" -Vlastnosti IPv4Address | Název formátovací tabulky, název DNSHost, adresa IPv4 -A

Vyberte všechny pracovní stanice se systémem Windows XP:

Get-ADComputer -Filter (operační systém - jako "*XP*")

Vyberte pouze serverové systémy:

Get-ADComputer -Filter ( Operační Systém - Jako "*Windows Server*" ) -Vlastnosti Operační systém | Vyberte Název, Operační systém | Formátovací tabulka – AutoSize

Získejte seznam serverů v doméně s nainstalovanou verzí OS a aktualizací Service Pack:
Get-ADComputer -Filter (operační systém -jako "*Windows Server*" ) -Vlastnost * | Formát-Název tabulky,Operační systém,Operační systém ServicePack -Wrap -Auto

Chcete-li odstranit všechny účty počítačů v doméně, které nebyly součástí 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) ) | Odebrat-ADComputer

Vyberte odpojené počítače v konkrétní organizační jednotce:

Get-ADComputer -filter * -SearchBase "OU=Počítače, dc=winitpro,dc=loc" | Where-Object ($_.enabled -eq $False)

Výsledky příkazu lze exportovat do textového souboru:

Get-ADComputer -Filter ( Operační Systém - Jako "*Windows Server*" ) -Vlastnosti Operační systém | Vyberte Název, Operační systém | Formát-tabulka -Automatická velikost C:\Skript\systém_serveru.txt

Nebo soubor CSV:

Get-ADComputer -Filter * -Vlastnost * | Select-Object Name,OperatingSystem,OperatingSystemServicePack | Export-CSV All-Windows.csv -NoTypeInformation -Kódování UTF8

Chcete-li provést konkrétní akci se všemi počítači z výsledného seznamu, musíte použít smyčku Foreach. V tomto příkladu chceme vygenerovat seznam serverů v doméně (seznam by měl obsahovat název serveru, výrobce serveru a model).

$Computers = Get-ADComputer -Filter (operační systém -jako "*Windows Server*")
Foreach ($Computer v $Computers)
{
$Hostname = $Computer.Name
$ComputerInfo = (Get-WmiObject -Název počítače$Hostname Win32_ComputerSystem)
$Manufacturer = $Computer.Manufacturer
$Model = $Počítač.Model
Write-Host "Name: $Hostname"
Write-Host "Manufacturer: $Manufacturer"
Write-Host "Model: $Model"
Write-Host " "
$Content = "$Hostname;$Manufacturer;$Model"
Přidat obsah -Hodnota$Obsah -Cesta"C:\PS\ServersInfo.txt"
}

Případně můžete použít syntaxi kratší smyčky. Řekněme, že potřebujeme spustit určitý příkaz na všech počítačích v určité organizační jednotce (v tomto příkladu chceme spustit příkaz pro aktualizaci zásad skupiny na všech serverech):

get-adcomputer -SearchBase "OU=Servery,DC=winitpro,DC=loc" -Filtr * | %( Invoke-Command -Computer $_.Name -ScriptBlock (gpupdate /force) )

Věnováno používání PowerShellu ke správě AD. Jako výchozí bod se autor rozhodl vzít 10 běžných úloh správy AD a podívat se, jak je lze zjednodušit pomocí PowerShellu:

  1. Obnovit uživatelské heslo
  2. Aktivujte a deaktivujte účty
  3. Odemknout uživatelský účet
  4. Smažte svůj účet
  5. Najděte prázdné skupiny
  6. Přidejte uživatele do skupiny
  7. Seznam členů skupiny
  8. Najděte zastaralé počítačové účty
  9. Deaktivujte počítačový účet
  10. Najděte počítače podle typu

Autor navíc spravuje blog (samozřejmě pomocí PowerShellu), doporučujeme se podívat - jdhitsolutions.com/blog. A ty nejaktuálnější informace získáte z jeho Twitteru twitter.com/jeffhicks.
Níže je tedy překlad článku „Top 10 Active Directory Tasks Soled with PowerShell“.

Správa Active Directory (AD) pomocí Windows PowerShell je jednodušší, než si myslíte, a já vám to chci dokázat. Můžete jednoduše vzít níže uvedené skripty a použít je k řešení řady úkolů správy AD.

Požadavky

Chcete-li ke správě AD používat PowerShell, musíte splnit několik požadavků. Jako příklad ukážu, jak fungují rutiny AD na počítači se systémem Windows 7.
Chcete-li používat rutiny, musíte mít řadič domény Windows Server 2008 R2 nebo si můžete stáhnout a nainstalovat službu Active Directory Management Gateway Service na starší řadiče domény. Před instalací si prosím pečlivě přečtěte dokumentaci; Je vyžadován restart CD.
Na straně klienta si stáhněte a nainstalujte (RSAT) pro Windows 7 nebo Windows 8. V systému Windows 7 se budete muset otevřít Ovládací panely kapitola Programy a vybrat si Zapnout nebo vypnout funkce Windows. Nalézt Nástroje pro vzdálenou správu serveru a rozbalte sekci Nástroje pro správu rolí. Vyberte příslušné položky pro nástroje AD DS a AD LDS, zvláště si uvědomte, že položka musí být vybrána Modul Active Directory pro Windows PowerShell, jak je znázorněno na obrázku 1. (Ve Windows 8 jsou ve výchozím nastavení vybrány všechny nástroje). Nyní jsme připraveni pracovat.

Obr.1 Povolení nástrojů AD DS a AD LDS

Jsem přihlášen pomocí účtu s právy správce domény. Většina rutin, které ukážu, vám umožní zadat alternativní přihlašovací údaje. V každém případě doporučuji přečíst si nápovědu ( Získejte pomoc) a příklady, které uvedu níže.
Spusťte relaci PowerShellu a importujte modul:

PS C:\> Import-Modul ActiveDirectory

Import vytvoří novou jednotku PSDrive, kterou však nepoužijeme. Můžete však vidět, jaké příkazy jsou v importovaném modulu k dispozici.

PS C:\> get-command -modul ActiveDirectory

Krása těchto příkazů spočívá v tom, že pokud mohu použít příkaz na jeden objekt AD, pak jej lze použít na 10, 100 a dokonce 1000. Podívejme se, jak některé z těchto cmdletů fungují.

Úkol 1: Resetujte uživatelské heslo

Začněme typickým úkolem: resetování hesla uživatele. Můžete to udělat snadno a jednoduše pomocí cmdletu Set-AdccountPassword. Záludná část je v tom, že nové heslo musí být kvalifikováno jako zabezpečený řetězec: kus textu, který je zašifrován a uložen v paměti po dobu trvání relace PowerShellu. Nejprve vytvořte proměnnou s novým heslem:
PS C:\> $new=Read-Host "Zadejte nové heslo" -AsSecureString

Poté zadejte nové heslo:

Nyní můžeme extrahovat účet (pomocí samAccountname– nejlepší možnost) a nastavte nové heslo. Zde je příklad pro uživatele Jack Frost:

PS C:\> Set-ADAccountPassword jfrost -NewPassword $new

Bohužel je v této rutině chyba: -Projít, -Co když, A -Potvrdit nefunguje. Pokud dáváte přednost zkratce, zkuste toto:

PS C:\> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String "P@ssw0rd1z3" -force)

V důsledku toho potřebuji, aby si Jack při příštím přihlášení změnil heslo, takže upravím účet pomocí Set-ADUser.

PS C:\> Set-ADUser jfrost -ChangePasswordAtLogon $True

Výsledky spuštění rutiny se nezapisují do konzoly. Pokud je to nutné, použijte -Skutečný. Ale mohu zjistit, zda operace byla úspěšná nebo ne, načtením uživatelského jména pomocí rutiny Get-ADUser a specifikaci nemovitosti Platnost hesla vypršela, jak je znázorněno na obrázku 2.


Rýže. 2. Výsledky rutiny Get-ADUser s vlastností PasswordExpired

Sečteno a podtrženo: Resetování hesla uživatele pomocí PowerShellu není vůbec složité. Uznávám, že resetování hesla je také snadné pomocí snapu Uživatelé a počítače služby Active Directory konzole Microsoft Management Console (MMC). Použití PowerShellu je ale vhodné, pokud potřebujete delegovat úkol, nechcete nasazovat výše zmíněný modul snap-in nebo resetujete heslo v rámci velkého automatizovaného IT procesu.

Úkol 2: Aktivujte a deaktivujte účty

Nyní deaktivujeme účet. Pokračujme ve spolupráci s Jackem Frostem. Tento kód používá parametr -Co když, který můžete najít v jiných komadletech, které provádějí změny za účelem testování mého příkazu bez jeho spuštění.

PS C:\> Zakázat-ADAccount jfrost -whatif Co když: Provedení operace "Nastavit" na cíli "CN=Jack Frost, OU=zaměstnanci,OU=Testování,DC=GLOBOMANTICS,DC=místní".

Nyní jej deaktivujeme doopravdy:

PS C:\> Zakázat-ADAAccount jfrost

A když přijde čas na aktivaci účtu, která cmdlet nám pomůže?

PS C:\>Enable-ADAAccount jfrost

Tyto rutiny lze použít ve zřetězeném výrazu, což vám umožní aktivovat nebo deaktivovat tolik účtů, kolik chcete. Tento kód například deaktivuje všechny účty v obchodním oddělení

PS C:\> get-aduser -filtr "oddělení -eq "prodej"" | zakázat-adaccount

Samozřejmě napište filtr pro Get-ADUser poměrně složité, ale právě zde je použití parametru -Co když spolu s rutinou Zakázat-ADÚčet přichází na pomoc.

Úkol 3: Odemkněte uživatelský účet

Představte si situaci, kdy Jack zablokoval svůj účet při pokusu o zadání nového hesla. Namísto pokusu o nalezení jeho účtu přes GUI lze odblokování provést pomocí jednoduchého příkazu.

PS C:\> Unlock-ADAAccount jfrost

Rutina také podporuje parametry -Co když A -Potvrdit.

Úkol 4: Smazat účet

Nezáleží na tom, kolik uživatelů odeberete – pomocí rutiny je to snadné Remove-ADUser. Nechci odstranit Jacka Frosta, ale kdybych chtěl, použil bych kód takto:

PS C:\> Remove-ADUser jfrost -whatif Co když: Provedení operace "Remove" na cíli "CN=Jack Frost,OU=zaměstnanci,OU=Testování,DC=GLOBOMANTICS,DC=místní".

Nebo mohu zadat více uživatelů a odstranit je jedním jednoduchým příkazem:

PS C:\> get-aduser -filter "enabled -eq "false"" -vlastnost WhenChanged -SearchBase "OU=Zaměstnanci, DC=Globomantics,DC=Místní" | kde ($_.WhenChanged -le (Get-Date).AddDays(-180)) | Remove-ADuser -whatif

Tento příkaz najde a odstraní všechny deaktivované účty organizační jednotky zaměstnanců, které nebyly změněny po dobu 180 dnů nebo déle.

Úkol 5: Hledání prázdných skupin

Řízení skupin je nekonečný a nevděčný úkol. Existuje mnoho způsobů, jak najít prázdné skupiny. Některé výrazy mohou fungovat lépe než jiné v závislosti na vaší organizaci. Níže uvedený kód najde všechny skupiny v doméně, včetně vestavěných.

PS C:\> get-adgroup -filtr * | kde (-Ne ($_ | get-adgroupmember)) | Vyberte Název

Pokud máte skupiny se stovkami členů, může použití tohoto příkazu trvat dlouho; Get-ADGroupMember kontroluje každou skupinu. Pokud můžete omezit nebo přizpůsobit, bude to lepší.
Zde je další přístup:

PS C:\> get-adgroup -filtr "členové -nejako "*" -AND GroupScope -eq "Universal"" -SearchBase "OU=Skupiny,OU=Zaměstnanci,DC=Globomantics, DC=místní" | Vyberte jméno, skupinu*

Tento příkaz najde všechny univerzální skupiny, které nemají členství ve skupinách organizačních jednotek, a zobrazí některé vlastnosti. Výsledek je znázorněn na obrázku 3.


Rýže. 3. Vyhledávejte a filtrujte univerzální skupiny

Úkol 6: Přidání uživatelů do skupiny

Přidejme Jacka Frosta do chicagské IT skupiny:

PS C:\> add-adgroupmember "chicago IT" -Členové jfrost

Ano, je to tak jednoduché. Můžete také snadno přidat stovky uživatelů do skupin, i když mi to přijde trochu trapné:

PS C:\> Add-ADGroupMember "Chicago Employees" -člen (get-aduser -filter "city -eq "Chicago"")

Použil jsem zřetězený výraz v závorkách, abych našel všechny uživatele, kteří mají vlastnost City v Chicagu. Kód v závorkách se provede a výsledné objekty se předají parametru –Member. Každý objekt uživatele je přidán do skupiny Chicago Employees. Nezáleží na tom, zda máme co do činění s 5 nebo 5000 uživateli, aktualizace členství ve skupině trvá jen několik sekund. Tento výraz lze také zapsat pomocí Pro každý objekt co by mohlo být pohodlnější:

PS C:\> Get-ADUser -filter "city -eq "Chicago"" | foreach (Add-ADGroupMember "Chicago Employees" -člen $_)

Úkol 7: Seznam členů skupiny

Možná budete chtít vědět, kdo je v určité skupině. Měli byste například pravidelně zjišťovat, kdo je členem skupiny Domain Admins:

PS C:\> Get-ADGroupMember "Správci domény"

Obrázek 4 ukazuje výsledek.


Rýže. 4. Členové skupiny Domain Admins

Rutina zobrazí objekt AD pro každého člena skupiny. Co dělat s vnořenými skupinami? Moje skupina Chicago All Users je sbírka vnořených skupin. Pro získání seznamu všech účtů stačí použít parametr – Rekurzivní.

PS C:\> Get-ADGroupMember "Chicago All Users" -Rekurzivní | Vyberte DistinguishedName

Pokud chcete jít jinou cestou – zjistit, ve kterých skupinách se uživatel nachází – použijte vlastnost user Člen:

PS C:\> get-aduser jfrost -property Memberof | Vyberte -Rozbalit Člen vlastnosti CN=NovýTest,OU=Skupiny,OU=Zaměstnanci, DC=GLOBOMANTICS,DC=místní CN=Chicago Test,OU=Skupiny,OU=Zaměstnanci, DC=GLOBOMANTICS,DC=místní CN=Chicago IT,OU= Skupiny,OU=Zaměstnanci, DC=GLOBOMANTICS,DC=místní CN=Uživatelé prodeje v Chicagu,OU=Skupiny,OU=Zaměstnanci, DC=GLOBOMANTICS,DC=místní

Použil jsem parametr -Rozbalte vlastnost pro zobrazení jmen Člen jako čáry.

Úkol 8: Najděte zastaralé účty počítačů

Často dostávám tuto otázku: „Jak najdu zastaralé počítačové účty? A já vždy odpovídám: "Co je pro tebe zastaralé?" Společnosti mají různé definice toho, kdy je počítačový (nebo uživatelský, cokoliv) účet považován za zastaralý a nelze jej nadále používat. U mě si dávám pozor na ty účty, jejichž hesla nebyla po určitou dobu změněna. Tato lhůta je pro mě 90 dní - pokud počítač během této doby nezměnil heslo spolu s doménou, s největší pravděpodobností je offline a neaktuální. Použitá rutina Get-ADComputer:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| Vyberte jméno, poslední sadu hesla

Filtr funguje skvěle s tvrdou hodnotou, ale tento kód se aktualizuje pro všechny účty počítačů, které od 1. ledna 2012 nezměnily svá hesla. Výsledky jsou zobrazeny na obrázku 5.


Rýže. 5. Najděte zastaralé počítačové účty

Další možnost: předpokládejme, že jste alespoň na funkční úrovni domény Windows 2003 Filtrovat podle vlastnosti LastLogontimeStamp. Tato hodnota je počet 100 nanosekundových intervalů od 1. ledna 1601 a je uložena v GMT, takže práce s touto hodnotou je trochu složitější:

PS C:\> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | select name,lastlogontimestamp, @(Name="LastLogon";Expression=(::FromFileTime ($_.Lastlogontimestamp))),passwordlastset | Seřadit LastLogonTimeStamp


Rýže. 6. Převeďte hodnotu LastLogonTimeStamp na známý formát

Pro vytvoření filtru potřebuji převést datum např. 1. ledna 2012 do správného formátu. Konverze se provádí v FileTime:

PS C:\> $cutoff=(Get-Date "1/1/2012").ToFileTime() PS C:\> $cutoff 129698676000000000

Nyní mohu použít tuto proměnnou ve filtru k Get-ADComputer:

PS C:\> Get-ADComputer -Filtr "(lastlogontimestamp -lt $cutoff) -or (lastlogontimestamp -notlike "*")" -vlastnost * | Vyberte Name, LastlogonTimestamp,PasswordLastSet

Výše uvedený kód najde stejné počítače, které byly zobrazeny na obrázku 5.

Úkol 9: Deaktivujte účet počítače

Možná, že když najdete neaktivní nebo zastaralé účty, budete je chtít deaktivovat. To je docela snadné. Použijeme stejný cmdlet, který jsme použili pro práci s uživatelskými účty. Můžete to objasnit pomocí samAccountnameúčet.

PS C:\> Zakázat-ADAccount -Identita "chi-srv01$" -whatif Co když: Provedení operace "Nastavit" na cíli "CN=CHI-SRV01, CN=Počítače,DC=GLOBOMANTICS,DC=místní".

Nebo pomocí výrazu potrubí:

PS C:\> get-adcomputer "chi-srv01" | Zakázat-ADÚčet

Mohu také použít svůj kód k nalezení zastaralých účtů a deaktivaci všech:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| Zakázat-ADÚčet

Úkol 10: Najděte počítače podle typu

Často se také ptám, jak najít účty počítače podle typu, jako jsou servery nebo pracovní stanice. To vyžaduje určitou kreativitu z vaší strany. V AD není nic, co by odlišovalo server od klienta, snad kromě OS. Pokud váš počítač používá systém Windows Server 2008, budete muset provést několik dalších kroků.
Nejprve musíte získat seznam operačních systémů a poté filtrujeme účty podle dostupných operačních systémů.

PS C:\> Get-ADComputer -Filtr * -Vlastnosti Operační systém | Vyberte Operační systém – jedinečný | Seřadit operační systém

Výsledky jsou zobrazeny na obrázku 7.


Rýže. 7. Načtení seznamu OS

Chci najít všechny počítače se serverovým OS:

PS C:\> Get-ADComputer -Filtr "Operační systém -jako "*Server*"" -vlastnosti Operační systém,Operační systém ServicePack | Vyberte Name,Op* | format-list

Výsledky jsou zobrazeny na obrázku 8.

Stejně jako ostatní rutiny AD Get můžete přizpůsobit parametry vyhledávání a v případě potřeby omezit požadavek na konkrétní organizační jednotky. Všechny výrazy, které jsem ukázal, lze integrovat do větších výrazů PowerShellu. Můžete například třídit, seskupovat, používat filtry, exportovat do CSV nebo vytvářet sestavy HTML a odesílat je e-mailem – to vše z PowerShellu! V tomto případě nebudete muset psát jediný skript.
Zde je bonus: zpráva o stáří hesla uživatele uložená v souboru HTML:

PS C:\> Get-ADUser -Filtr "Enabled -eq "True" -AND PasswordNeverExpires -eq "False"" -Vlastnosti PasswordLastSet,PasswordNeverExpires,PasswordExpires | Vyberte DistinguishedName,Name,pass*,@(Name="PasswordAge"; Expression=((Get-Date)-$_.PasswordLastSet)) |Seřadit Věk hesla -Sestupně | ConvertTo-Html -Title "Přehled stáří hesla" | Out-File c:\Work\pwage.htm !}

Ačkoli tento výraz může vypadat trochu děsivě, je snadné jej používat s minimálními znalostmi prostředí PowerShell. A zbývá jen poslední rada: jak definovat vlastní vlastnost tzv PasswordAge. Hodnota představuje mezeru mezi dneškem a vlastností PasswordLastSet. Poté seřadím výsledky pro svou novou nemovitost. Obrázek 9 ukazuje výstup pro moji malou testovací doménu.

Aktualizováno:
Příspěvek obsahuje překlad článku na portálu




Horní