Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Interesante
  • Përdorimi i Get-ADUser për të marrë informacione të ndryshme rreth përdoruesve të domenit AD. Skriptet për të shkarkuar të gjithë përdoruesit nga MS Active Directory (ITGC)

Përdorimi i Get-ADUser për të marrë informacione të ndryshme rreth përdoruesve të domenit AD. Skriptet për të shkarkuar të gjithë përdoruesit nga MS Active Directory (ITGC)

I dedikuar përdorimit të PowerShell për administrimin e AD. Si pikënisje, vendosa të marr 10 detyra të zakonshme të administrimit të AD dhe të shikoj se si mund të thjeshtohen duke përdorur PowerShell:

  1. Rivendos fjalëkalimin e përdoruesit
  2. Aktivizoni dhe çaktivizoni llogaritë
  3. Zhblloko llogarinë e përdoruesit
  4. Fshini llogarinë tuaj
  5. Gjeni grupe boshe
  6. Shtoni përdoruesit në grup
  7. Listoni anëtarët e grupit
  8. Gjeni llogaritë e vjetëruara të kompjuterit
  9. Çaktivizo llogarinë e kompjuterit
  10. Gjeni kompjuterë sipas llojit

Për më tepër, autori mban një blog (duke përdorur PowerShell, sigurisht), ju rekomandojmë të hidhni një sy - jdhitsolutions.com/blog. Dhe më e rëndësishmja që mund të merrni nga Twitteri i tij twitter.com/jeffhicks.
Pra, më poshtë është përkthimi i artikullit "10 detyrat kryesore të drejtorisë aktive të zgjidhura me PowerShell".

Menaxhimi i Active Directory (AD) me Windows PowerShell është më i lehtë nga sa mendoni, dhe unë dua t'jua vërtetoj këtë. Ju thjesht mund të merrni skriptet më poshtë dhe t'i përdorni ato për të zgjidhur një numër detyrash të menaxhimit të AD.

Kërkesat

Për të përdorur PowerShell për të menaxhuar AD, duhet të plotësohen disa kërkesa. Unë do të tregoj se si funksionojnë AD cmdlet në një kompjuter Windows 7 si shembull.
Për të përdorur cmdlet-et, duhet të keni një kontrollues domeni Windows Server 2008 R2, ose mund të shkarkoni dhe instaloni shërbimin e portës së menaxhimit të Active Directory në DC-të e vjetra. Lexoni me kujdes dokumentacionin përpara se ta instaloni; Kërkohet rinisja e CD-së.
Nga ana e klientit, shkarkoni dhe instaloni (RSAT) për Windows 7 ose Windows 8. Në Windows 7, do t'ju duhet të hapni Panelet e kontrollit kapitulli Programet dhe zgjidhni Aktivizoni ose çaktivizoni veçoritë e Windows... Gjej Mjetet e administrimit të serverit në distancë dhe zgjeroni seksionin Mjetet e Administrimit të Rolit... Zgjidhni artikujt e duhur për AD DS dhe AD LDS Tools, veçanërisht vini re se artikulli duhet të zgjidhet Moduli Active Directory për Windows PowerShell siç tregohet në figurën 1. (Në Windows 8, të gjitha mjetet zgjidhen si parazgjedhje). Tani jemi gati për të shkuar.

Figura 1 Aktivizimi i veglave AD DS dhe AD LDS

Unë jam identifikuar me një llogari me të drejta administratori të domenit. Shumica e cmdlet-ve që do t'ju tregoj do t'ju lejojnë të specifikoni kredencialet alternative. Gjithsesi, unë rekomandoj të lexoni ndihmën ( Merr ndihme) dhe shembuj që do t'i demonstroj më poshtë.
Filloni një sesion PowerShell dhe importoni modulin:

PS C: \> Import-Module ActiveDirectory

Importimi krijon një PSDrive të ri, por ne nuk do ta përdorim atë. Sidoqoftë, mund të shihni se cilat komanda janë në modulin e importuar.

PS C: \> get-command -module ActiveDirectory

E bukura e këtyre komandave është se nëse mund të përdor një komandë për një objekt AD, atëherë ai mund të përdoret për 10, 100 dhe madje 1000. Le të shohim se si funksionojnë disa nga këto cmdlet.

Detyra 1: Rivendosni fjalëkalimin e përdoruesit

Le të fillojmë me një detyrë tipike: rivendosjen e fjalëkalimit të një përdoruesi. Kjo mund të bëhet lehtësisht dhe thjesht përmes cmdlet Set-ADAccountPassword... Pjesa e ndërlikuar është se fjalëkalimi i ri duhet të cilësohet si një varg i sigurt: një pjesë e tekstit që është e koduar dhe e ruajtur në memorie gjatë sesionit të PowerShell. Së pari, le të krijojmë një variabël me një fjalëkalim të ri:
PS C: \> $ i ri = Read-Host "Fut fjalëkalimin e ri" -AsSecureString

Pastaj, le të fusim një fjalëkalim të ri:

Tani mund ta marrim llogarinë (duke përdorur samAccountEmriËshtë alternativa më e mirë) dhe vendosni një fjalëkalim të ri. Këtu është një shembull për përdoruesin Jack Frost:

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

Fatkeqësisht, ka një gabim me këtë cmdlet: -Passthru, -Po nese, dhe – Konfirmo nuk punon. Nëse preferoni një prerje të shkurtër, provoni sa vijon:

PS C: \> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String " [email i mbrojtur]"-forca)

Si rezultat, më duhet që Jack të ndryshojë fjalëkalimin herën tjetër që të identifikohem dhe të modifikoj llogarinë duke përdorur Set-ADUser.

PS C: \> Set-ADUser jfrost -ChangePasswordAtLogon $ E vërtetë

Rezultatet e ekzekutimit të cmdlet nuk shkruhen në tastierë. Nëse duhet të bëhet, përdorni – E vërtetë... Por unë mund të zbuloj nëse operacioni ishte i suksesshëm apo jo duke nxjerrë emrin e përdoruesit duke përdorur cmdlet Get-ADUser dhe duke specifikuar pronën Fjalëkalimi ka skaduar siç tregohet në figurën 2.


Oriz. 2. Rezultatet e Get-ADUser Cmdlet cmdlet me vetinë PasswordExpired

Përfundimi: Rivendosja e fjalëkalimit të një përdoruesi duke përdorur PowerShell nuk është aspak e vështirë. E pranoj se rivendosja e fjalëkalimit është gjithashtu e lehtë përmes një hapi. Përdoruesit dhe Kompjuterët e Directory Active konsol Microsoft Management Console (MMC). Por përdorimi i PowerShell është në rregull nëse ju duhet të delegoni një detyrë, nuk dëshironi të vendosni skedarin shtesë të lartpërmendur ose të rivendosni fjalëkalimin tuaj në një proces të madh të automatizuar IT.

Detyra 2: Aktivizoni dhe çaktivizoni llogaritë

Tani le të çaktivizojmë llogarinë. Le të vazhdojmë të punojmë me Jack Frost. Ky kod përdor parametrin -Po nese, të cilën mund ta shihni në cmdlet të tjera që bëjnë ndryshime për të testuar komandën time pa e ekzekutuar atë.

PS C: \> Disable-ADAccount jfrost -whatif Po sikur: Kryerja e operacionit "Set" në Target "CN = Jack Frost, OU = staf, OU = Testim, DC = GLOBOMANTICS, DC = lokale".

Tani le ta çaktivizojmë realisht:

PS C: \> Disable-ADAccount jfrost

Dhe kur të jetë koha për të aktivizuar llogarinë tuaj, cili cmdlet do të na ndihmojë?

PS C: \> Aktivizo-ADAccount jfrost

Këto cmdlet mund të përdoren në një shprehje tubacioni, duke ju lejuar të aktivizoni ose çaktivizoni sa më shumë llogari që dëshironi. Për shembull, ky kod çaktivizon të gjitha llogaritë në departamentin e shitjeve.

PS C: \> get-aduser -filter "departament -eq" sales "" | çaktivizo-akto llogari

Sigurisht, duke shkruar një filtër për Get-ADUser goxha e ndërlikuar, por këtu përdoret parametri -Po nese së bashku me cmdlet Çaktivizo-ADAccount vjen në shpëtim.

Detyra 3: Zhbllokoni llogarinë e përdoruesit

Konsideroni një situatë ku Jack ka mbyllur llogarinë e tij ndërsa përpiqet të fusë një fjalëkalim të ri. Në vend që të përpiqeni të gjeni llogarinë e tij përmes GUI, procedura e zhbllokimit mund të bëhet me një komandë të thjeshtë.

PS C: \> Zhblloko-ADAccount jfrost

cmdlet gjithashtu mbështet parametrat -Po nese dhe -Konfirmo.

Detyra 4: Fshi llogarinë

Nuk ka rëndësi se sa përdorues fshini, është e lehtë të bëhet me cmdlet Hiq-ADUser... Unë nuk dua të heq Jack Frost, por nëse do të doja, do të përdorja kodin si ky:

PS C: \> Remove-ADUser jfrost -whatif Po sikur: Kryerja e operacionit "Remove" në Target "CN = Jack Frost, OU = staf, OU = Testim, DC = GLOBOMANTICS, DC = lokal".

Ose mund të fut shumë përdorues dhe t'i fshij me një komandë të thjeshtë:

PS C: \> get-aduser -filter "enabled -eq" false "" -property WhenChanged -SearchBase "OU = Punonjës, DC = Globomantics, DC = Local" | ku ($ _. WhenChanged -le (Get-Date) .AddDays (-180)) | Hiq-ADuser -whatif

Kjo komandë do të gjejë dhe heqë çdo llogari të çaktivizuar të punonjësve OU që nuk kanë ndryshuar për 180 ditë ose më shumë.

Detyra 5: Gjetja e grupeve boshe

Menaxhimi i grupit është i pafund dhe i pafalshëm. Ka shumë mënyra për të gjetur grupe boshe. Disa shprehje mund të funksionojnë më mirë se të tjerat, në varësi të organizatës suaj. Kodi më poshtë do të gjejë të gjitha grupet në një domen, duke përfshirë ato të integruara.

PS C: \> get-adgroup -filter * | ku (-Jo ($ _ | merrni-anëtari i grupit të reklamave)) | Zgjidhni Emrin

Nëse keni grupe me qindra anëtarë, atëherë përdorimi i kësaj komande mund të marrë kohë; Get-ADGroup Member kontrollon çdo grup. Nëse mund të kufizoni ose personalizoni, do të jetë më mirë.
Këtu është një qasje tjetër:

PS C: \> get-adgroup -filter "embers -notlike" * "-AND GroupScope -eq" Universal "" -SearchBase "OU = Grupet, OU = Punonjësit, DC = Globomantics, DC = lokale" | Zgjidhni emrin, grupin *

Kjo komandë gjen të gjitha grupet Universale që nuk kanë anëtarësim në OU Groups dhe shfaq disa nga vetitë. Rezultati është paraqitur në Figurën 3.


Oriz. 3. Kërkimi dhe filtrimi i grupeve universale

Detyra 6: Shtimi i përdoruesve në grup

Le të shtojmë Jack Frost në grupin e IT të Çikagos:

PS C: \> add-adgroupnember "chicago IT" -Anëtarët jfrost

Po, është kaq e thjeshtë. Ju gjithashtu mund të shtoni me lehtësi qindra përdorues në grupe, megjithëse kjo është paksa e vështirë për mendimin tim:

PS C: \> Add-ADGroupMember "Punonjësit e Çikagos" -anëtar (get-aduser -filter "city -eq" Chicago "")

Kam përdorur shprehjen me tubacion kllapa për të gjetur të gjithë përdoruesit që kanë një pronë City në Çikago. Kodi i vendosur në kllapa ekzekutohet dhe objektet që rezultojnë i kalohen parametrit –Member. Çdo objekt i personalizuar i shtohet grupit të punonjësve të Çikagos. Nuk ka rëndësi nëse kemi të bëjmë me 5 apo 5000 përdorues, përditësimi i anëtarësimeve në grup zgjat vetëm disa sekonda. Kjo shprehje mund të shkruhet edhe duke përdorur PërÇdo-Objekt, e cila mund të jetë më e përshtatshme:

PS C: \> Get-ADUser -filtri "city -eq" Chicago "" | foreach (Add-ADGroupAnetar "Punonjësit e Çikagos" - Anëtar $ _)

Detyra 7: Shfaqja e një liste të anëtarëve të grupit

Ju mund të dëshironi të dini se kush është në një grup të caktuar. Për shembull, duhet të zbuloni periodikisht se kush është anëtar i grupit të Administratorëve të Domenit:

PS C: \> Get-ADGroup Member "Domain Admins"

Figura 4 tregon rezultatin.


Oriz. 4. Anëtarët e grupit të Domain Admins

cmdlet liston objektin AD për çdo anëtar të grupit. Por çfarë ndodh me grupet e mbivendosur? Grupi im Chicago All Users është një koleksion grupesh të mbivendosur. Për të marrë një listë të të gjitha llogarive, thjesht duhet të përdor parametrin – Rekurzive.

PS C: \> Get-ADGroupMember "Chicago All Users" -Rekursive | Zgjidhni Emri i dalluar

Nëse dëshironi të shkoni në anën tjetër - gjeni cilat grupe i përket përdoruesi - përdorni pronën e përdoruesit Antare i:

PS C: \> get-aduser jfrost -property Memberof | Zgjidhni -ExpandProperty MemberOf CN = NewTest, OU = Grupet, OU = Punonjësit, DC = GLOBOMANTICS, DC = lokale CN = Chicago Test, OU = Grupet, OU = Punonjësit, DC = GLOBOMANTICS, DC = CN lokale = Chicago IT, OU = Grupet, OU = Punonjësit, DC = GLOBOMANTICS, DC = CN lokale = Përdoruesit e Shitjeve të Çikagos, OU = Grupet, OU = Punonjësit, DC = GLOBOMANTICS, DC = lokale

Kam përdorur parametrin -ExpandProperty për të shfaqur emrat Antare i si vargje.

Detyra 8: Gjeni llogaritë e vjetëruara kompjuterike

Më bëhet shpesh kjo pyetje: "Si mund të gjej llogaritë e vjetëruara kompjuterike?" Dhe unë gjithmonë përgjigjem: "Çfarë është e vjetëruar për ju?" Kompanitë ndryshojnë në përkufizimet e tyre se kur një llogari kompjuteri (ose përdoruesi, nuk ka rëndësi) është vjetëruar dhe nuk përdoret më. Sa për mua, i kushtoj vëmendje atyre llogarive për të cilat fjalëkalimet nuk janë ndryshuar për një periudhë të caktuar kohore. Kjo periudhë për mua është 90 ditë - nëse kompjuteri nuk e ka ndryshuar fjalëkalimin së bashku me domenin gjatë kësaj periudhe, ka shumë të ngjarë që ai të jetë offline dhe i vjetëruar. Përdoret cmdlet Get-ADComputer:

PS C: \> get-adcomputer -filter "Passwordlastset -lt" 1/1/2012 "" -properties * | Zgjidhni emrin, grupin e fjalëkalimit

Filtri funksionon shkëlqyeshëm me një vlerë të vështirë, por ky kod do të përditësohet për të gjitha llogaritë kompjuterike që nuk kanë ndryshuar fjalëkalimet e tyre që nga 1 janari 2012. Rezultatet janë paraqitur në Figurën 5.


Oriz. 5. Gjeni llogaritë e vjetëruara kompjuterike

Një opsion tjetër: supozoni se jeni të paktën në nivelin funksional të një domeni të Windows 2003. Filtro sipas veçorisë LastLogontime Stamp... Kjo vlerë është numri i intervaleve 100 nanosekonda që nga 1 janari 1601 dhe ruhet në GMT, kështu që puna me këtë vlerë është pak e ndërlikuar:

PS C: \> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | zgjidhni emrin, lastlogontimestamp, @ (Emri = "LastLogon"; Shprehja = (:: FromFileTime ($ _. Lastlogontimestamp))), fjalëkalimilastset | Rendit LastLogonTimeStamp


Oriz. 6. Konvertoni vlerën LastLogonTimeStamp në formatin e zakonshëm

Për të krijuar një filtër, më duhet të konvertoj një datë, për shembull 1 janar 2012, në formatin e duhur. Konvertimi kryhet në FileTime:

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

Tani mund ta përdor këtë variabël në filtrin për Get-ADComputer:

PS C: \> Get-ADComputer -Filter "(lastlogontimestamp -lt $ cutoff) -ose (lastlogontimestamp -jo si" * ")" -properti * | Zgjidhni Emri, LastlogonTimestamp, PasswordLastSet

Kodi i mësipërm gjen të njëjtët kompjuterë të paraqitur në Figurën 5.

Detyra 9: Çaktivizoni llogarinë e kompjuterit

Ndoshta kur gjeni llogari joaktive ose të vjetruara, dëshironi t'i çaktivizoni ato. Kjo është mjaft e lehtë për t'u bërë. Ne do të përdorim të njëjtin cmdlet që kemi përdorur me llogaritë e përdoruesve. Mund ta rafinoni duke përdorur samAccountEmri llogari.

PS C: \> Disable-ADAccount -Identity "chi-srv01 $" -whatif Po sikur: Kryerja e operacionit "Set" në Target "CN = CHI-SRV01, CN = Kompjuterë, DC = GLOBOMANTICS, DC = lokale".

Ose duke përdorur një shprehje me tubacion:

PS C: \> get-adcomputer "chi-srv01" | Çaktivizo-ADAccount

Mund të përdor gjithashtu kodin tim për të gjetur llogari të vjetruara dhe për t'i çaktivizuar të gjitha:

PS C: \> get-adcomputer -filter "Passwordlastset -lt" 1/1/2012 "" -properties * | Çaktivizo-ADAccount

Detyra 10: Gjeni kompjuterët sipas llojit

Më bëhet gjithashtu shpesh pyetja se si t'i gjej llogaritë e kompjuterit sipas llojit, siç janë serverët ose stacionet e punës. Kjo kërkon një sasi të caktuar kreativiteti nga ana juaj. Nuk ka asgjë në AD që e dallon serverin nga klienti, përveç ndoshta OS. Nëse kompjuteri juaj përdor Windows Server 2008, ka disa hapa shtesë për të ndërmarrë.
Së pari, ju duhet të merrni një listë të OS, dhe më pas ne filtrojmë llogaritë sipas sistemit operativ të disponueshëm.

PS C: \> Get-ADComputer -Filter * -Properties OperatingSystem | Zgjidhni OperatingSystem -unike | Rendit sistemin operativ

Rezultatet janë paraqitur në Figurën 7.


Oriz. 7. Ekstraktoni listën e OS

Unë dua të gjej të gjithë kompjuterët që kanë një server OS:

PS C: \> Get-ADComputer -Filter "OperatingSystem-like" * Server * "" -properties OperatingSystem, OperatingSystem ServicePack | Zgjidhni Emrin, Op * | format-listë

Rezultatet janë paraqitur në Figurën 8.

Ashtu si me cmdlet të tjera AD Get, mund të personalizoni parametrat e kërkimit tuaj dhe të kufizoni pyetjen në OU specifike, nëse është e nevojshme. Të gjitha shprehjet që kam treguar mund të integrohen në shprehje të mëdha PowerShell. Për shembull, ju mund të renditni, gruponi, aplikoni filtra, eksportoni në CSV ose krijoni dhe dërgoni me email raporte HTML - të gjitha nga PowerShell! Në këtë rast, nuk keni pse të shkruani një kërcitje të vetme.
Këtu është një bonus për ju: raporti i moshës së fjalëkalimit të përdoruesit i ruajtur në një skedar HTML:

PS C: \> Get-ADUser -Filter "Enabled -eq" E vërtetë "-AND PasswordNeverExpires -eq" False "" -Properties PasswordLastSet, PasswordNeverExpires, PasswordExpires | Zgjidh DistinguishedName, Name, pass *, @ (Emri = "PasswordAge"; Shprehje = ((Get-Date) - $ _. PasswordLastSet) | renditje PasswordMosha -Descending | ConvertTo-Html -Title "(! LANG: Password Age Report" | Out-File c:\Work\pwage.htm !}

Ndërsa kjo shprehje mund të duket pak frikësuese, me pak njohuri për PowerShell është e lehtë për t'u përdorur. Dhe vetëm këshilla e fundit mbetet: si të përkufizohet një pronë me porosi të quajtur Mosha e fjalëkalimit... Vlera përfaqëson intervalin midis sot dhe veçorisë PasswordLastSet. Pastaj i rendit rezultatet për pronën time të re. Figura 9 tregon daljen për domenin tim të vogël të testimit.

Përditëso:
Postimi përmban përkthimin e artikullit në portal

0

Unë kam skriptin e mëposhtëm të punës që kontrollon nëse një listë e madhe përdoruesish në një skedar CSV është anëtar i një grupi AD dhe i shkruan rezultatet në results.csv.

Nuk jam i sigurt se si ta konvertoj skriptin që të mund të ndryshoj $ group = "InfraLite" në $ group = DC. \ List_Of_AD_Groups.CSV.

Kështu, skripti nuk kthen vetëm ndeshjet për një grup AD, por kështu kthen ndeshjet për 80 grupe të AD të përfshira në List_of_AD_groups.csv. Shkrimi PO / JO për çdo grup AD në një kolonë të re CSV (ose, nëse kjo nuk është e mundur, krijimi i një skedari të veçantë CSV për secilin grup me rezultate do të jetë gjithashtu.

Mund ta bëja manualisht duke ndryshuar vlerën nga grupi $ dhe emrin e skedarit të eksportit dhe duke e ripunuar skriptin 80 herë, por duhej të isha i shpejtë me PS për ta bërë këtë.

p.sh. results.csv?:

EMRI AD_GROUP1 AD_GROUP2 AD_GROUP80 etj. përdorues1 po jo po përdorues2 jo jo po përdorues3 jo po jo jehonë "UserName`InfraLite" >> results.csv $ users = GC. \ user_list.csv $ group = "InfraLite" $ anëtarë = Get-ADGroupAmber -Identity $ group -Rekursive | Zgjidh -ExpandProperty SAMAccountName foreach ($ përdorues në $ përdorues) (nëse ($ anëtarë -përmban $ përdorues) (jehonë "$ user $ group`tYes" >> results.csv) tjetër (jehonë "$ user`tNo" >> rezultate .csv))

  • 2 pergjigje
  • Renditja:

    Aktiviteti

0

Një zgjidhje e parëndësishme për problemin tuaj do të ishte të mbështillni kodin tuaj ekzistues në një lak tjetër dhe të krijoni një skedar dalës për secilin grup:

$ group = Get-Content "C: \ groups.txt" foreach ($ grup në $ grupe) ($ anëtarë = Get-ADGroupAmber ... ...)

Një qasje më e pastër do të ishte krijimi i një shablloni për hartimin e grupit, klonimi i tij për çdo përdorues dhe plotësimi i një kopjeje me anëtarësimet në grup të përdoruesit. Diçka si kjo duhet të funksionojë:

$ template = @ () Get-Content "C: \ groups.txt" | ForÇdo-Object ($ shabllon [$ _] = $ false) $ grupe = @ () Get-ADGroup -Filter * | PërÇdo-Object ($ grupet [$ _. Emri i dalluar] = $ _. Emri) Get-ADUser -Filter * -Properties MemberOf | ForCeach-Object ($ groupmap = $ template.Clone () $ _. MemberOf | ForEach-Object ($ grupe [$ _]) | Where-Object ($ groupmap.ContainsKey ($ _)) | ForÇdo-Object ($ grupmap [$ _] = $ e vërtetë) Objekt i ri -Lloji PSObjekt -Properti $ grupmap) | Eksporto-Csv "C: \ user_group_mapping.csv" -NoType

0

Unë kam luajtur me këtë për një kohë dhe mendoj se kam gjetur një mënyrë për t'ju bërë pikërisht atë që dëshironit.

Mendoj se Ansgar ishte në rrugën e duhur, por nuk munda ta bëj atë të bënte atë që bëri më pas. Ai përmendi se në kohën e shkrimit, ai nuk kishte qasje në mjedisin e AD.

Kjo është ajo që dola me:

$ UserArray = Get-Content "C: \ Temp \ Users.txt" $ GroupArray = Get-Content "C: \ Temp \ Groups.txt" $ OutputFile = "C: \ Temp \ Something.csv" # Vendosja e një hashtable për përdorim të mëvonshëm $ UserHash = New-Object -TypeName System.Collections.Hashtable # Cikli i jashtëm për të shtuar përdoruesit dhe anëtarësimin në UserHash $ UserArray | ForEach-Object ($ UserInfo = Get-ADUser $ _ -Properties MemberOf # Zhvesh sintaksën LPAP vetëm në emrin e llogarisë SAMA të grupit $ Anëtarësime = $ UserInfo.MemberOf | ForÇdo-Object (($ _. Split (",")) .replace ("CN =", "")) #Shtimi i përdoruesit = Çifti i anëtarësimit në hash $ UserHash.Add ($ _, $ Anëtarësime)) # Lak i jashtëm për të krijuar një objekt për përdorues $ Rezultatet = $ UserArray | ForEach-Object (# Fillimisht krijoni një objekt të thjeshtë $ User = New-Object -TypeName PSCustomObject -Property @ (Emri = $ _) # Shtoni në mënyrë dinamike anëtarë në objekt, bazuar në $ GroupArray $ GroupArray | ForÇdo-Object (#Checking $ UserHash për të parë nëse grupi shfaqet në listën e anëtarësimit të përdoruesit. _ -Vlera $ UserIsMember) #Kthimi i objektit në variablin Kthehu $ User) #Konverto objektet në një CSV, pastaj nxirr ato $ Rezultate | ConvertTo-CSV -NoTypeInformation | Out-File $ OutputFile

Le të shpresojmë që gjithçka të ketë kuptim. Komentova aq sa munda. Do të ishte shumë e lehtë të konvertohej në ADSI nëse nuk do të kishit të instaluar RSAT në çfarëdo makinerie ku e përdorni. Nëse keni nevojë, më njoftoni dhe unë do të bëj disa ndryshime të shpejta.

Mirëdita, të dashur lexues dhe abonentë, ne vazhdojmë të eksplorojmë mundësitë e Powershell dhe Active Directory me ju. Siç e mbani mend, ajo ka të gjitha llogaritë e përdoruesve dhe kompjuterëve në bazën e të dhënave NTDS.dit, gjithçka është e shkëlqyer dhe e centralizuar. Kur një kompani ka më shumë se një administrator të sistemit, një situatë mund të rezultojë që në të të grumbullohen mbeturina dhe kredenciale të panevojshme. Të gjithë jemi njerëz dhe mund të harrojmë disa gjëra, dhe në disa momente mund të shpërqendrohemi, gjë që do të çojë edhe në harrimin e informacioneve të rëndësishme. Dhe arrijmë në përfundimin se në Actvie Directory grumbullohen përdorues joaktivë (të shkarkuar ose të harruar), në çdo rast, një administrator i mirë i sistemit duhet t'i identifikojë, t'i çaktivizojë dhe më pas t'i fshijë sipas dëshirës, ​​gjë që do ta bëjmë ne.

Nëpërmjet snap-in ADUC

Herën e fundit ju dhashë një shembull të përdorimit të snap-in-it të përdoruesve dhe kompjuterëve të Active Directory, përmes të cilit ne kërkuam kompjuterë të humbur në rrjetin lokal që nuk ishin shfaqur për një muaj. Tani le të bëjmë të njëjtën gjë me llogaritë e përdoruesve. Unë kam AD në Windows Server 2012 R2, hap ADUC, për këtë shtyp WIN + R dhe fut dsa.msc.

Në formularin e kërkesës që hapet, specifikoni:

  • Kërko emrin> Kam humbur përdorues
  • Përshkrimi nëse është e nevojshme
  • Kërkoni rrënjë> këtu mund të lini të gjithë domenin, ose ta specifikoni në OU-në e dëshiruar

Më pas shtypim butonin kërkesë.

Në skedën e përdoruesve, ne shohim artikullin "Numri i ditëve që nga identifikimi i fundit", për shembull, kam vendosur 60 ditë.

Si rezultat, do të merrni listën e llogarive joaktive të punonjësve që ju nevojiten.

Nëpërmjet snap-in powershell

E njëjta gjë mund të bëhet përmes Powershell. Menjëherë do të jap një kod, detyra e të cilit është të kërkoj përdorues joaktivë, për këtë zgjodha një periudhë prej 45 ditësh, duke shkëputur të dhënat e përdoruesit dhe duke lëvizur në një OU të caktuar posaçërisht.

$ date_with_offset = (Data e marrjes) .AddDays (-45)
$ përdorues = Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $ data_me_offset) | Rendit Data e Fundit Logon
foreach ($ përdorues në $ përdorues) (set-aduser $ user -enabled $ false; move-adobject -identity $ user -targetpath "ou = Fired, ou = Msk L. users, ou = Location, dc = msk, dc = contoso, dc = com ")
Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $data_me_offset) | Rendit Data e Fundit Logon | FT Emri, LastLogonDate -AutoSize | Skedari jashtë c: \ Script \ users.txt

  • Në rreshtin e parë, ju deklaroni një ndryshore në të cilën vendosni termin e kërkimit
  • Krijo një variabël dhe mostër nga koha e fundit e hyrjes
  • Lëvizja e përdoruesve

  • Bërja e një raporti në një dosje

Gjëra më të dobishme për të punuar me përdoruesin. Përpara se të përdorni komandat e mëposhtme, duhet të ngarkoni modulin Active Directory nëpërmjet komandës

Get-Help Get-ADUser

Në këtë artikull, ne do t'i hedhim një vështrim aftësive të PowerShell për menaxhimin e grupeve të domenit të Active Directory. Ne do të shqyrtojmë se si të krijojmë një grup të ri në AD, të shtojmë përdorues në të (ose ta fshijmë), të listojmë përdoruesit e grupit dhe disa truke të tjera të dobishme të grupeve të domenit që janë jashtëzakonisht të dobishme në administrimin e përditshëm. Cmdlet-et e mëposhtme bazë janë të disponueshme në Modulin Active Directory PowerShell për të menaxhuar grupet AD:

Për të përdorur këto cmdlet në sesionin tuaj të PowerShell, duhet të ngarkohet një modul i veçantë ndërveprimi AD - Moduli Active Directory për Windows PowerShell... Ky modul u prezantua për herë të parë në Windows Server 208 R2. Në Windows Server 2012 dhe më vonë, ky modul aktivizohet si parazgjedhje. Në kompjuterët e klientit, ai mund të instalohet dhe aktivizohet si një nga komponentët RSAT. Ju mund të kontrolloni nëse moduli është i ngarkuar si kjo:

Get-Module -Lista e disponueshme

Siç mund ta shihni, moduli ActiveDirectory është i ngarkuar. Nëse jo, importojeni me komandën:

Direktoria aktive e Import-Modulit

Një listë e plotë e komandave të modulit mund të merret si më poshtë:

Get-Command -Moduli ActiveDirectory

Ka 147 cmdlet të disponueshme në modul, nga të cilat 11 mund të punojnë me grupe.

Get-Command -Moduli ActiveDirectory -Emri "* Grupi *"

Këtu është një listë e tyre:

  • Add-ADPrincipalGroupMembership
  • Get-ADAccountAuthorizationGroup
  • Get-ADGroup
  • Get-ADGroup Member
  • Merr Anëtarësimin e Grupeve AdPrincipal
  • New-ADGroup
  • Hiq-ADGroup
  • Remove-ADPrincipalGroupMembership
  • Set-ADGroup

Krijo një grup të ri në drejtorinë aktive të kontejnerit të specifikuar (OU) duke përdorur komandën New-ADGroup:

New-ADGroup "TestADGroup" -rruga "OU = Grupet, OU = Moskë, DC = corp, dc = winitpro, DC = ru" -GroupScope Global -PassThru –Verbose

Duke përdorur atributin Përshkrim ju mund të vendosni një përshkrim të grupit dhe duke përdorur Emri i shfaqur ndryshoni emrin e shfaqur.

Parametri GroupScope mund të vendosni një nga llojet e mëposhtme të grupeve:

  • 0 = DomainLocal
  • 1 = Global
  • 2 = Universale

Ju mund të krijoni një grup shpërndarjeje si ky:

New-ADGroup "TestADGroup-Distr" -rruga "OU = Grupet, OU = Moskë, DC = corp, dc = winitpro, DC = ru" -Group Category Distribution -GroupScope Global -PassThru –Verbose

Add-AdGroupMember - shtoni përdorues në grupin AD

Ju mund të shtoni përdorues në një grup Active Directory duke përdorur Add- Anëtar i grupit të reklamave... Le të shtojmë dy përdorues në grupin e ri:

Add-AdGroupMember -Identity TestADGroup -Anëtarët përdorues1, përdorues2

Nëse lista e përdoruesve për t'i shtuar një grupi është mjaft e madhe, mund ta ruani listën e llogarive në një skedar CSV, më pas importoni këtë skedar dhe shtoni çdo përdorues në grup.

Formati i skedarit CSV është si më poshtë (lista e përdoruesve, një për rresht, emri i kolonës është përdorues)

Import-CSV. \ Users.csv -Përdoruesit e Header | Për çdo objekt (Add-AdGroupMember -Identity 'TestADGroup' - anëtarët $ _. Përdoruesit)

Për të marrë të gjithë anëtarët e një grupi (grupi A) dhe për t'i shtuar ata në një grup tjetër (grupi B), përdorni këtë komandë:

Get-ADGroupAnëtar "GroupA" | Get-ADUser | PërÇdo-Objekt (Add-ADGroupMember -Identity "Group-B" - Members $ _)

Në rast se ju duhet të kopjoni anëtarët e të gjitha grupeve të mbivendosur në një grup të ri (në mënyrë rekursive), duhet të përdorni komandën e mëposhtme:

Get-ADGroupMember -Identiteti “GroupA” -Rekursive | Get-ADUser | Për çdo objekt (Add-ADGroupMember -Identity "GroupB" -Antaret $ _)

Remove-ADGroupMember - hiqni përdoruesit nga një grup

Për të hequr përdoruesit nga një grup AD, përdorni komandën Remove-ADGroupMember. Le të heqim dy përdorues nga grupi:

Hiq-ADGroupMember -Identity TestADGroup -Anëtarët përdorues1, përdorues2

Konfirmo heqjen e përdoruesve nga grupi:

Nëse keni nevojë të hiqni përdoruesit nga një grup sipas listës nga një skedar CSV, përdorni komandën e mëposhtme:

Import-CSV. \ Users.csv -Përdoruesit e Header | Për çdo objekt (Remove-ADGroupMember -Identity 'TestADGroup' - anëtarët $ _. Përdoruesit)

Get-ADGroup - merrni informacion në lidhje me një grup AD

cmdlet do t'ju ndihmojë të merrni informacione rreth grupit. Get-ADGroup:

Get-ADGroup "TestADGroup"

Kjo komandë shfaq informacion në lidhje me atributet kryesore të grupit (DN, lloji i grupit, emri, SID). Për të shfaqur vlerën e të gjitha atributeve të një grupi domeni AD, ekzekutoni komandën e mëposhtme:

Get-ADGroup "TestADGroup" -properties *

Siç mund ta shihni, tani shfaqen atribute të tilla si koha e krijimit dhe modifikimit të grupit, përshkrimi, etj.

Duke përdorur cmdlet Get-ADGroup, mund të gjeni të gjitha grupet që ju interesojnë sipas një modeli specifik. Për shembull, ju duhet të gjeni të gjitha grupet AD që përmbajnë frazën administratorët :

Get-ADGroup -LDAPFilter “(emri = * admins *)” | Format-Tabela

Get-ADGroupMember - Listoni përdoruesit e një grupi AD

Shfaq një listë të përdoruesve në një grup:

Get-ADGroup Member "TestADGroup"

Për të lënë vetëm emrat e përdoruesve në rezultate, ekzekutoni:

Get-ADGroupAnëtar "TestADGroup" | emri ft

Nëse ky grup përfshin grupe të tjera në domen, për të shfaqur një listë të plotë anëtarësh, duke përfshirë të gjitha grupet e ndërlidhura, përdorni parametrin Rekursive.

Get-ADGroupMember 'server-admins "-rekursive | emri ft

Për të eksportuar listën e llogarive që i përkasin një grupi të caktuar në një skedar CSV (për përdorim të mëtejshëm në Excel), ekzekutoni komandën e mëposhtme:

Get-ADGroupMember 'server-admins "-rekursive | ft samaccountname | Jashtë skedarit c: \ ps \ admins.csv

Ne do të përdorim cmdlet për të shtuar informacionin e llogarisë së përdoruesit të AD në një skedar teksti. Për shembull, përveç llogarisë, duhet të shfaqni pozicionin dhe numrin e telefonit të përdoruesit të grupit:

Get-ADGroupMember -Identiteti 'server-admins' -rekurzive | foreach (Get-ADUser $ _ -titulli i vetive, OfficePhone | Zgjidh titullin e objektit, OfficePhone)

(Get-ADGroupMember -Identiteti "administratorët e domenit").

Doli që ne kemi 7 llogari administratori në grupin "administratorët e domenit".

Për të gjetur një listë të grupeve boshe në një OU specifike, përdorni këtë komandë:

Get-ADGroup -Filter * -Properties Anëtarët -baza e kërkimit “OU = Moscow, DC = corp, dc = winitpro, DC = ru” | ku (-jo $ _. anëtarë) | zgjidhni Emrin

Artikujt kryesorë të lidhur