forum

www.SAMURAJ-cz.com 

18.05.2012 Nataša VÍTEJTE V MÉM SVĚTĚ

Články

PowerShell - Active Directory

Neděle, 14.11.2010 13:13 | Samuraj | Microsoft admin
Tak už i na mne dolehl PowerShell, ne že bych se mu bránil, ale hodně věcí udělám radši v GUI. Pro různé hromadné úpravy či výpisy určitých hodnot, se jedná o velice užitečného pomocníka. Myslím ale, že PowerShell není vytvořen zrovna User Friendly, takže pokud něco nepoužíváme pravidelně, není možné si to zapamatovat (neobsahuje takovou jednoduchou a chytrou nápovědu jako Cisco IOS). Proto jsem začal vytvářen tento seznam užitečných příkazů (a jejich variací), abych měl v případě potřeby, kam nahlédnout.

Na hodně věcí můžeme použít Active Directory Users and Computers (ADUC), a v něm třeba Queries, nebo nový Active Directory Administrative Center. PowerShell a modul ActiveDirectory toho však umí více, můžeme některé operace skriptovat, a také dostaneme výsledky, s kterými můžeme dále pracovat (třeba v Excelu). Pokud používám PowerShell přímo, tak nejraději z PowerShell ISE, které je součástí Windows 7.

Abychom mohli použít ActiveDirectory modul na stanici, tak musíme mít nainstalovaný Active Directory Domain Services (AD DS and AD LDS Tools, což je součást RSAT - Remote Server Administration Tools) a v něm povolenu vlastnost Active Directory Module for Windows PowerShell. Také musíme být alespoň na jednom doménovém řadiči nainstalovaná služba Windows Server 2008 R2 Active Directory Web Services.

Obecné vlastnosti

Použití AD příkazů

Pokud použijeme PowerShell ISE, tak po každém spuštění musíme nejprve importovat modul ActiveDirectory, abychom měli k dispozici příkazy pro Active Directory.

Import-Module ActiveDirectory

Procházení Active Directory

AD můžeme procházet stejně, jako souborový systém. Nejprve se přepneme do AD a pak používáme příkazy dir, cd apod.

PS C:\> cd ad:
PS AD:\> dir

Name                 ObjectClass          DistinguishedName
----                 -----------          -----------------
firma                domainDNS            DC=firma,DC=local
Configuration        configuration        CN=Configuration,...
Schema               dMD                  CN=Schema,CN=Conf...
ForestDnsZones       domainDNS            DC=ForestDnsZones...
DomainDnsZones       domainDNS            DC=DomainDnsZones...

PS AD:\> cd 'DC=firma,DC=local'
PS AD:\DC=firma,DC=local>

Informace o aktuální doméně

Get-ADDomain

Informace o doménových řadičích

$dc = Get-ADDomainController -Filter *
$dc | FT Name,Site,OperationMasterRoles,OperatingSystem,IsGlobalCatalog -AutoSize 

Uživatelé (user account) - vytváření a nastavování hodnot

Založení uživatele

Pokud máme Exchange server, tak se nám spíš hodí použít příkaz, který vytvoří zároveň účet i mailbox. Uživatele vytvoříme s defaultním heslem 123456 a určujeme kontejner, v kterém se účet vytvoří.

$pass = ConvertTo-SecureString -AsPlainText -Force -String '123456' 
New-ADUser bouska -Name 'Bouška Petr' -SamAccountName 'bouska' -Path 'ou=Firma,dc=firma,dc=local' -UserPrincipalName 'bouska@firma.local' -GivenName 'Petr' -Surname 'Bouška' -AcountPassword $pass -Enabled $true

Nastavení uživatelům, že musí při příštím přihlášení změnit heslo

Aby šlo nastavit ChangePasswordAtLogon, tak nesmí být nastaveno PasswordNeverExpires.

Get-ADUser -Filter * -SearchBase "OU=Firma,DC=firma,DC=local" | Set-ADUser -PasswordNeverExpires $false
Get-ADUser -Filter * -SearchBase "OU=Firma,DC=firma,DC=local" | Set-ADUser -ChangePasswordAtLogon $true 

Uživatelé (user account) - výpis účtů a hodnot

Zobrazení všech vlastností uživatele

Get-ADUser bouska -Properties * 

Seznam uživatelů a počet špatně zadaných hesel

Get-ADUser -Filter * -Properties badPwdCount | FT Name,badPwdCount,Enabled

Seznam uživatelů, kteří mají nastaveno ChangePasswordAtLogon

Když chceme zobrazit seznam uživatelů, kteří mají nastaven parametr ChangePasswordAtLogon (to můžeme nastavit pomocí PowerShellu nebo ADUC), tak zjistíme, že žádný takový LDAP atribut neexistuje, takže takové uživatele nemůžeme zobrazit. Ono se totiž děje to, když nastavíme ChangePasswordAtLogon, tak se nastaví parametr pwdLastSet na hodnotu 0 a PasswordExpired na true. Takže uživatele můžeme zobrazit podle jedné z těchto hodnot.

Get-ADUser -Filter {pwdLastSet -eq 0} -Properties pwdLastSet | FT Name

Pro zobrazení podle atributu PasswordExpired by měl fungovat následující příkaz, ale mě v praxi nefunguje filtrování pouze hodnot true. Takže jsem to obešel druhým příkazem, kdy na začátku seznamu jsou hodnoty true.

Get-ADUser -Filter {PasswordExpired -eq $true} -Properties PasswordExpired  | FT Name, PasswordExpired  
Get-ADUser -Filter * -Properties PasswordExpired | Sort-Object PasswordExpired -Descending | FT name,PasswordExpired -AutoSize

Seznam disablovaných uživatelských účtů

Dvě možnosti pomocí různého příkazu.

Get-ADUser -Filter {Enabled -eq $false} | FT name
Search-ADAccount -AccountDisabled -UsersOnly | Sort-Object Name | FT Name,DistinguishedName -AutoSize

Seznam zamčených uživatelských účtů

Search-ADAccount -LockedOut -UsersOnly | Sort-Object Name | FT Name,DistinguishedName -AutoSize

Seznam uživatelů, kteří se nepřihlásili za posledních 30 dní

Search-ADAccount -AccountInactive -TimeSpan "30" -UsersOnly | Sort-Object LastLogonDate | FT Name,LastLogonDate,Enabled,LockedOut,PasswordExpired,DistinguishedName -AutoSize

Skupiny (group)

Seznam skupin, do kterých je zařazen uživatel

Get-ADPrincipalGroupMembership -Identity bouska 

Zařazení uživatele do skupiny

Add-ADPrincipalGroupMembership -Identity bouska -MemberOf 'G Nějaká skupina' 

Seznam uživatelů ve skupině

Get-ADGroupMember -Identity 'skupina 1' | FT name  

Počítače (computer account) - výpis účtů a hodnot

Počítače s OS Windows 7

Get-ADComputer -Filter {OperatingSystem -like "Windows 7*"}  -Properties OperatingSystem, CanonicalName, whenCreated | Sort-Object Name | FT Name, OperatingSystem, CanonicalName, whenCreated -AutoSize

Počítače s disablovaným účtem

Search-ADAccount -ComputersOnly -AccountDisabled | Sort-Object Name | FT Name,DistinguishedName,LastLogonDate -AutoSize

Počítače, které se dlouho nepřihlásili

Buď můžeme požít kolik posledních dní se nepřihlásili, pomocí TimeSpan, nebo od kdy se nepřihlásili, pomocí DateTime. V obou případech mi ale připadá, že datum úplně nesedí, a zobrazují se záznamy o 14 dní starší.

Doplněno. Tato situace je trochu komplikovanější a podrobně jsem ji popsal v článku Powershell - poslední přihlášení počítače či uživatele.

Search-ADAccount -ComputersOnly -AccountInactive -TimeSpan "30" | Sort-Object LastLogonDate | FT Name,LastLogonDate,Enabled,LockedOut -AutoSize
Search-ADAccount -ComputersOnly -AccountInactive -DateTime "1.11.2010" | Sort-Object LastLogonDate | FT Name,LastLogonDate,Enabled,LockedOut -AutoSize

V některých případech můžeme potřebovat zobrazit i jiné hodnoty, tak se může hodit alternativa pomocí Get-ADComputer a filtru.

$logonDate = New-Object System.DateTime(2010,9,19)
Get-ADComputer -Filter { lastLogon -le $logonDate } | FT
Get-ADComputer -Filter { lastLogon -le $logonDate } -Properties LastLogonTimeStamp, OperatingSystem  | Select-Object Name, DistinguishedName , OperatingSystem, LastLogonTimeStamp | Sort-Object Name

Počítače, které si dlouho nezměnili heslo

Počítače, které si změnili heslo naposled před 45 dny. Počítače v doméně si musí pravidelně měnit heslo (defaultně každých 30 dní), pokud tak neučiní, znamená to, že jsou neaktivní.

$lastSetdate = [DateTime]::Now - [TimeSpan]::Parse("45")
Get-ADComputer -Filter {PasswordLastSet -le $lastSetdate} -Properties passwordLastSet -ResultSetSize $null | FT samaccountname,DistinguishedName,PasswordLastSet
zobrazeno: 4157krát | Komentáře [1]

Související články:

PowerShell

Články týkající se Microsoft skriptovacího jazyku PowerShell, který se používá ve všech nových verzích MS OS a aplikací.

Pokud se Vám článek líbil, tak mne potěšíte, když uložíte odkaz na některý server:

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže. Pokud chcete poradit s nějakým problémem či diskutovat na nějaké téma, tak použijte fórum.

Komentáře

  1. [1] Krakonos

    Fungovat bude ovsem jenom lidem se zapnutou sluzbou Active Directory Web Services, jinac maji smolika stejne jako ja :-(

    Pondělí, 15.11.2010 15:13 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O


Ochrana proti SPAMu, zdejte následující čtyři znaky image code

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách