Get-ADUserin käyttö erilaisten tietojen hankkimiseen AD-toimialueen käyttäjistä. Ei-aktiivisten käyttäjien etsiminen Active Directorysta

Hyvää iltapäivää, hyvät lukijat ja tilaajat, jatkamme Powershellin ja Active Directoryn ominaisuuksien tutkimista. Kuten muistat, kaikki hänen käyttäjä- ja tietokonetilinsä sijaitsevat NTDS.dit-tietokannassa, kaikki on hienoa ja keskitettyä. Kun yrityksessä on useampi kuin yksi järjestelmänvalvoja, voi syntyä tilanne, jossa roskaa ja tarpeettomia tunnistetietoja kertyy. Olemme kaikki ihmisiä ja voimme unohtaa joitain asioita, ja joskus voimme olla hajamielisiä, mikä johtaa myös tärkeän tiedon unohtamiseen. Ja tulemme siihen tulokseen, että passiivisia käyttäjiä (poistettuja tai unohdettuja) kerääntyy joka tapauksessa Actvie-hakemistoon. Hyvän järjestelmänvalvojan tulisi tunnistaa heidät, poistaa ne käytöstä ja sitten poistaa ne haluttaessa, minkä me teemme.

ADUC-laajennuksen kautta

Viime kerralla annoin jo esimerkin Active Directory Käyttäjät ja tietokoneet -laajennuksen käytöstä, jonka kautta etsimme paikallisverkosta puuttuvia tietokoneita, joita ei ollut näkynyt kuukauteen. Nyt teemme saman käyttäjätilien kanssa. Minulla on AD Windows Server 2012 R2:ssa, avaa ADUC, paina WIN+R ja kirjoita dsa.msc.

Kirjoita avautuvaan pyyntölomakkeeseen:

  • Pyydä nimi > nämä ovat minulle kadonneita käyttäjiä
  • Kuvaus tarvittaessa
  • Request root > tästä voit jättää koko verkkotunnuksen tai määrittää sen haluttuun organisaatioyksikköön

Napsauta sitten pyyntöpainiketta.

Käyttäjät-välilehdellä näemme kohteen "Päivien lukumäärä edellisestä kirjautumisesta" esimerkiksi asetin sen arvoksi 60 päivää.

Tämän seurauksena saat tarvitsemasi luettelon ei-aktiivisista työntekijätileistä.

Powershell-laajennuksen kautta

Sama voidaan tehdä Powershellin kautta. Annan sinulle välittömästi koodin, jonka tehtävänä on etsiä ei-aktiivisia käyttäjiä. Valitsin tätä varten 45 päivän ajanjakson, poistaen käyttäjätiedot ja siirryn erityiseen organisaatioyksikköön.

$date_with_offset= (Get-Date).Lisää päivät(-45)
$käyttäjät = Get-ADUser -Ominaisuudet LastLogonDate -Filter (LastLogonDate -lt $päiväys_ja_offset ) | Lajittele LastLogonDate
foreach ($user in $users) (set-aduser $user -enabled $false; move-adobject -identity $user -targetpath "ou=Poistettu,ou=Moscow L. users,ou=Location,dc=msk,dc= contoso,dc=com")
Get-ADUser -Ominaisuudet LastLogonDate -Filter (LastLogonDate -lt $päivämäärä_ja_offset ) | Lajittele LastLogonDate | FT:n nimi, LastLogonDate -AutoSize | Ulkoinen tiedosto c:\Script\users.txt

  • Ensimmäisellä rivillä ilmoitat muuttujan, johon asetat hakutermin
  • Luo muuttuja ja tee valinta viimeisen kirjautumisajan perusteella
  • Käyttäjien siirto

  • Raportin tekeminen tiedostoon

Lisää hyödyllisiä asioita käyttäjän kanssa työskentelyssä. Ennen kuin käytät alla olevia komentoja, sinun on ladattava Active Directory -moduuli komennon kautta

Hanki apua Hanki-ADUser

Omistettu PowerShellin käyttämiseen AD-hallinnassa. Lähtökohtana kirjoittaja päätti ottaa 10 yleistä AD-hallintatehtävää ja tarkastella, kuinka niitä voidaan yksinkertaistaa PowerShellin avulla:

  1. Palauta käyttäjän salasana
  2. Aktivoi ja poista tilit käytöstä
  3. Avaa käyttäjätilin lukitus
  4. Poista tilisi
  5. Etsi tyhjiä ryhmiä
  6. Lisää käyttäjiä ryhmään
  7. Listaa ryhmän jäsenet
  8. Etsi vanhentuneet tietokonetilit
  9. Poista tietokoneen tili käytöstä
  10. Etsi tietokoneita tyypin mukaan

Lisäksi kirjoittaja ylläpitää blogia (käyttäen tietysti PowerShellia), suosittelemme katsomaan - jdhitsolutions.com/blog. Ja saat viimeisimmät tiedot hänen Twitteristään twitter.com/jeffhicks.
Joten alla on käännös artikkelista "PowerShellin avulla ratkaistu 10 suosituinta Active Directory -tehtävää".

Active Directoryn (AD) hallinta Windows PowerShellillä on helpompaa kuin luulet, ja haluan todistaa sen sinulle. Voit yksinkertaisesti ottaa alla olevat skriptit ja käyttää niitä useiden AD-hallintatehtävien ratkaisemiseen.

Vaatimukset

Jotta voit käyttää PowerShellia AD-hallinnassa, sinun on täytettävä useita vaatimuksia. Aion esitellä AD-cmdlet-komentojen toimintaa käyttämällä esimerkkinä Windows 7 -tietokonetta.
Jotta voit käyttää cmdlettejä, sinulla on oltava Windows Server 2008 R2 -toimialueen ohjain tai voit ladata ja asentaa Active Directory Management Gateway Service -palvelun vanhoihin DC:ihin. Lue dokumentaatio huolellisesti ennen asennusta; CD-levyn uudelleenkäynnistys vaaditaan.
Lataa ja asenna (RSAT) asiakaspuolella joko Windows 7:lle tai Windows 8:lle. Windows 7:ssä sinun on avattava sisään Ohjauspaneelit luku Ohjelmat ja valitse Laita Windows toiminnot päälle tai pois. löytö Palvelimen etähallintatyökalut ja laajenna osiota Roolin hallintatyökalut. Valitse sopivat kohteet AD DS:lle ja AD LDS Tools -työkaluille. Huomaa erityisesti, että kohde on valittava Active Directory -moduuli Windows PowerShellille, kuten kuvassa 1. (Windows 8:ssa kaikki työkalut on valittu oletuksena). Nyt olemme valmiita työhön.

Kuva 1 AD DS:n ja AD LDS -työkalujen käyttöönotto

Olen kirjautunut sisään tilillä, jolla on verkkotunnuksen järjestelmänvalvojan oikeudet. Suurin osa näyttämistäni cmdlet-komennoista antaa sinun määrittää vaihtoehtoiset tunnistetiedot. Joka tapauksessa suosittelen lukemaan ohjeen ( Hae apua) ja esimerkkejä, jotka esitän alla.
Aloita PowerShell-istunto ja tuo moduuli:

PS C:\> Import-Module ActiveDirectory

Tuonti luo uuden PSDriven, mutta emme käytä sitä. Voit kuitenkin nähdä, mitkä komennot ovat käytettävissä tuodussa moduulissa.

PS C:\> get-command -moduuli ActiveDirectory

Näiden komentojen kauneus on, että jos voin käyttää komentoa yhdelle AD-objektille, sitä voidaan käyttää 10:ssä, 100:ssa ja jopa 1000:ssa. Katsotaanpa, miten jotkut näistä cmdlet-komennoista toimivat.

Tehtävä 1: Palauta käyttäjän salasana

Aloitetaan tavallisella tehtävällä: käyttäjän salasanan nollaus. Voit tehdä tämän helposti ja yksinkertaisesti cmdletillä Set-ADAccountPassword. Hankalinta on, että uuden salasanan on oltava suojattu merkkijono: tekstinpätkä, joka on salattu ja tallennettu muistiin PowerShell-istunnon ajaksi. Luodaan ensin muuttuja uudella salasanalla:
PS C:\> $new=Lue-Host "Anna uusi salasana" -AsSecureString

Kirjoita sitten uusi salasana:

Nyt voimme purkaa tilin (käyttäen samAccountname– paras vaihtoehto) ja aseta uusi salasana. Tässä on esimerkki käyttäjälle Jack Frostille:

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

Valitettavasti tässä cmdletissä on virhe: -Passthru, -Mitä jos, Ja -Vahvistaa ei toimi. Jos haluat käyttää pikakuvaketta, kokeile tätä:

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

Tästä syystä minun täytyy Jackin vaihtaa salasanansa, kun hän seuraavan kerran kirjautuu sisään, joten muokkaan tiliä käyttämällä Set-ADUser.

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

cmdlet-ajon tuloksia ei kirjoiteta konsoliin. Jos tämä on tehtävä, käytä -Totta. Mutta voin selvittää, onnistuiko toiminto vai ei, noutamalla käyttäjänimen cmdletillä Hanki ADUser ja kiinteistön määrittäminen Salasana vanhentunut, kuten kuvassa 2 näkyy.


Riisi. 2. Get-ADUser Cmdlet -komentosarjan tulokset PasswordExpired-ominaisuuden kanssa

Bottom line: Käyttäjän salasanan palauttaminen PowerShellillä ei ole ollenkaan vaikeaa. Myönnän, että salasanan nollaus on myös helppoa hetkessä Active Directory -käyttäjät ja -tietokoneet konsolit Microsoft Management Console (MMC). PowerShellin käyttö on kuitenkin tarkoituksenmukaista, jos sinun on delegoitava tehtävä, et halua ottaa käyttöön yllä mainittua laajennusta tai nollaat salasanaa osana suurta automatisoitua IT-prosessia.

Tehtävä 2: Aktivoi ja poista tilit käytöstä

Nyt poistetaan tili käytöstä. Jatketaan yhteistyötä Jack Frostin kanssa. Tämä koodi käyttää parametria -Mitä jos, joka löytyy muista comadleteista, jotka tekevät muutoksia testatakseen komentoa suorittamatta sitä.

PS C:\> Disable-ADAccount jfrost -whatif Entä jos: Suoritetaan toimintoa "Set" kohteelle "CN=Jack Frost, OU=henkilökunta, OU=Testaus, DC=GLOBOMANTICS, DC=paikallinen".

Otetaan se nyt pois käytöstä todella:

PS C:\> Disable-ADAAccount jfrost

Ja kun on aika aktivoida tili, mikä cmdlet auttaa meitä?

PS C:\> Enable-ADAccount jfrost

Näitä cmdlet-komentoja voidaan käyttää liukuhihnalausekkeessa, jolloin voit aktivoida tai poistaa käytöstä niin monta tiliä kuin haluat. Tämä koodi esimerkiksi poistaa käytöstä kaikki myyntiosaston tilit

PS C:\> get-aduser -filter "osasto -eq "myynti"" | poista tili käytöstä

Tietenkin kirjoita suodatin Hanki ADUser melko monimutkainen, mutta tässä on parametrin käyttö -Mitä jos cmdletin kanssa Poista käytöstä-ADA-tili tulee apuun.

Tehtävä 3: Avaa käyttäjätilin lukitus

Harkitse tilannetta, jossa Jack lukitsi tilinsä yrittäessään syöttää uutta salasanaa. Sen sijaan, että yrittäisi löytää hänen tilinsä graafisen käyttöliittymän kautta, lukituksen avaaminen voidaan tehdä yksinkertaisella komennolla.

PS C:\> Unlock-ADAAccount jfrost

cmdlet tukee myös parametreja -Mitä jos Ja -Vahvistaa.

Tehtävä 4: Poista tili

Ei ole väliä kuinka monta käyttäjää poistat - se on helppo tehdä cmdletillä Poista-ADUser. En halua poistaa Jack Frostia, mutta jos haluaisin, käyttäisin tällaista koodia:

PS C:\> Remove-ADUser jfrost -whatif Mitä jos: Suoritetaan toiminto "Poista" kohteelle "CN=Jack Frost,OU=henkilökunta,OU=Testaus,DC=GLOBOMANTICS,DC=paikallinen".

Tai voin syöttää useita käyttäjiä ja poistaa ne yhdellä yksinkertaisella komennolla:

PS C:\> get-aduser -filter "enabled -eq "false"" -ominaisuus WhenChanged -SearchBase "OU=Työntekijät, DC=Globomantics,DC=Paikallinen" | jossa ($_.WhenChanged -le (Hanki-Päivä).AddDays(-180)) | Poista-ADuser -mitä

Tämä komento etsii ja poistaa käytöstä poistetut Employees OU -tilit, joita ei ole muokattu 180 päivään tai kauemmin.

Tehtävä 5: Etsi tyhjiä ryhmiä

Ryhmien johtaminen on loputon ja kiittämätön tehtävä. On monia tapoja löytää tyhjiä ryhmiä. Jotkut lausekkeet voivat toimia paremmin kuin toiset organisaatiostasi riippuen. Alla oleva koodi löytää kaikki verkkotunnuksen ryhmät, myös sisäänrakennetut.

PS C:\> get-adgroup -filter * | jossa (-Ei ($_ | get-adgroupmember)) | Valitse Nimi

Jos sinulla on ryhmiä, joissa on satoja jäseniä, tämän komennon käyttäminen voi kestää kauan; Hanki-ADGroupMember tarkistaa jokaisen ryhmän. Jos voit rajoittaa tai mukauttaa, se on parempi.
Tässä on toinen lähestymistapa:

PS C:\> get-adgroup -filter "jäsenet -notlike "*" -AND GroupScope -eq "Universal"" -SearchBase "OU=Ryhmät,OU=Työntekijät,DC=Globomantics, DC=paikallinen" | Valitse nimi, ryhmä*

Tämä komento löytää kaikki Universal-ryhmät, joilla ei ole OU-ryhmien jäsenyyttä, ja näyttää joitakin ominaisuuksia. Tulos näkyy kuvassa 3.


Riisi. 3. Etsi ja suodata universaaleja ryhmiä

Tehtävä 6: Käyttäjien lisääminen ryhmään

Lisätään Jack Frost Chicagon IT-ryhmään:

PS C:\> add-adgroupmember "chicago IT" -Jäsenet jfrost

Kyllä, se on niin yksinkertaista. Voit myös helposti lisätä satoja käyttäjiä ryhmiin, vaikka tämä on mielestäni hieman hankala:

PS C:\> Add-ADGroupMember "Chicago Employees" -jäsen (get-aduser -filter "city -eq "Chicago")

Käytin suluissa olevaa liukuhihnalauseketta löytääkseni kaikki käyttäjät, joilla on City-omaisuus Chicagossa. Suluissa oleva koodi suoritetaan ja tuloksena olevat objektit välitetään –Member-parametrille. Jokainen käyttäjäobjekti lisätään Chicagon työntekijät -ryhmään. Ei ole väliä, onko kyseessä 5 vai 5000 käyttäjää, ryhmäjäsenyyksien päivittäminen vie vain muutaman sekunnin. Tämä lauseke voidaan kirjoittaa myös käyttämällä Jokaiselle esineelle mikä voisi olla kätevämpää:

PS C:\> Get-ADUser -suodatin "city -eq "Chicago"" | foreach (Add-ADGroupMember "Chicago Employees" -Jäsen $_)

Tehtävä 7: Listaa ryhmän jäsenet

Haluat ehkä tietää, ketkä kuuluvat tiettyyn ryhmään. Esimerkiksi sinun tulee säännöllisesti selvittää, kuka on Domain Admins -ryhmän jäsen:

PS C:\> Get-ADGroupMember "Domain Admins"

Kuva 4 näyttää tuloksen.


Riisi. 4. Domain Admins -ryhmän jäsenet

cmdlet näyttää AD-objektin jokaiselle ryhmän jäsenelle. Mitä tehdä sisäkkäisille ryhmille? Ryhmäni Chicago Kaikki käyttäjät on kokoelma sisäkkäisiä ryhmiä. Saadakseni luettelon kaikista tileistä, minun on vain käytettävä parametria -Rekursiivinen.

PS C:\> Get-ADGroupMember "Chicago All Users" -Rekursiivinen | Valitse DistinguishedName

Jos haluat mennä toiseen suuntaan - selvittää, missä ryhmissä käyttäjä on - käytä käyttäjän ominaisuutta Jonkin jäsen:

PS C:\> get-aduser jfrost -ominaisuus Memberof | Valitse -ExpandProperty memberOf CN=NewTest,OU=Ryhmät,OU=Työntekijät, DC=GLOBOMANTICS,DC=paikallinen CN=Chicago Test,OU=Ryhmät,OU=Työntekijät, DC=GLOBOMANTICS,DC=paikallinen CN=Chicago IT,OU= Ryhmät,OU=työntekijät, DC=GLOBOMANTICS,DC=paikallinen CN=Chicagon myyntikäyttäjät,OU=ryhmät,OU=työntekijät, DC=GLOBOMANTICS,DC=paikallinen

Käytin parametria -Laajenna omaisuutta nimien näyttämiseen Jonkin jäsen kuin linjat.

Tehtävä 8: Etsi vanhentuneet tietokonetilit

Minulta kysytään usein tätä kysymystä: "Kuinka löydän vanhentuneet tietokonetilit?" Ja minä vastaan ​​aina: "Mikä on sinulle vanhentunutta?" Yrityksillä on erilaisia ​​määritelmiä siitä, milloin tietokonetili (tai käyttäjätili, sillä ei ole väliä) katsotaan vanhentuneeksi eikä sitä voi enää käyttää. Itse kiinnitän huomiota niihin tileihin, joiden salasanoja ei ole vaihdettu tiettyyn aikaan. Tämä ajanjakso on minulle 90 päivää - jos tietokone ei ole vaihtanut salasanaa verkkotunnuksen kanssa tänä aikana, se on todennäköisesti offline-tilassa ja vanhentunut. Käytetty cmdlet Hanki-ADComputer:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -ominaisuudet *| Valitse nimi, viimeinen salasana

Suodatin toimii erinomaisesti kovalla arvolla, mutta tämä koodi päivittyy kaikille tietokonetileille, jotka eivät ole vaihtaneet salasanojaan 1. tammikuuta 2012 jälkeen. Tulokset näkyvät kuvassa 5.


Riisi. 5. Etsi vanhentuneet tietokonetilit

Toinen vaihtoehto: oletetaan, että olet vähintään Windows 2003 -toimialueen toiminnallisella tasolla. Suodata ominaisuuden mukaan LastLogontimeStamp. Tämä arvo on 100 nanosekunnin jaksojen määrä 1. tammikuuta 1601 lähtien, ja se on tallennettu GMT:hen, joten tämän arvon käyttäminen on hieman hankalaa:

PS C:\> get-adcomputer -filter "LastlogonTimestamp -gt 0" -ominaisuudet * | valitse nimi,lastlogontimestamp, @(Name="LastLogon";Expression=(::FromFileTime ($_.Lastlogontimestamp))),passwordlastset | Lajittele LastLogonTimeStamp


Riisi. 6. Muunna LastLogonTimeStamp-arvo tuttuun muotoon

Suodattimen luomiseksi minun on muutettava päivämäärä, esimerkiksi 1. tammikuuta 2012, oikeaan muotoon. Muunnos suoritetaan FileTimessa:

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

Nyt voin käyttää tätä muuttujaa suodattimessa Hanki-ADComputer:

PS C:\> Get-ADComputer -Filter "(lastlogontimestamp -lt $cutoff) -tai (lastlogontimestamp -notlike "*")" -ominaisuus * | Valitse Nimi,LastlogonTimestamp,PasswordLastSet

Yllä oleva koodi löytää samat tietokoneet, jotka näytettiin kuvassa 5.

Tehtävä 9: Poista tietokoneen tili käytöstä

Ehkä kun löydät passiivisia tai vanhentuneita tilejä, haluat ehkä poistaa ne käytöstä. Tämä on melko helppo tehdä. Käytämme samaa cmdlet-sovellusta, jota käytimme työskennellessämme käyttäjätilien kanssa. Voit selventää sitä käyttämällä samAccountname tili.

PS C:\> Disable-ADAccount -Identiteetti "chi-srv01$" -mitä jos: Suoritetaan toimintoa "Set" kohteelle "CN=CHI-SRV01, CN=Computers,DC=GLOBOMANTICS,DC=paikallinen".

Tai käyttämällä liukuhihnalauseketta:

PS C:\> get-adcomputer "chi-srv01" | Poista käytöstä-ADA-tili

Koodillani voin myös etsiä vanhentuneita tilejä ja poistaa ne kaikki käytöstä:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -ominaisuudet *| Poista käytöstä-ADA-tili

Tehtävä 10: Etsi tietokoneita tyypin mukaan

Minulta kysytään myös usein, kuinka löytää tietokonetilejä tyypin mukaan, kuten palvelimien tai työasemien mukaan. Tämä vaatii sinulta luovuutta. AD:ssa ei ole mitään, mikä erottaisi palvelimen asiakkaasta, paitsi ehkä käyttöjärjestelmä. Jos tietokoneessasi on Windows Server 2008, sinun on suoritettava muutama lisävaihe.
Ensin sinun on hankittava luettelo käyttöjärjestelmistä, ja sitten suodatamme tilit käytettävissä olevien käyttöjärjestelmien mukaan.

PS C:\> Get-ADComputer -Suodatin * -Ominaisuudet Käyttöjärjestelmä | Valitse OperatingSystem -unique | Lajittele käyttöjärjestelmä

Tulokset näkyvät kuvassa 7.


Riisi. 7. Haetaan käyttöjärjestelmäluettelo

Haluan löytää kaikki tietokoneet, joissa on palvelinkäyttöjärjestelmä:

PS C:\> Get-ADComputer -Suodatin "OperatingSystem -like "*Server*"" -ominaisuudet Käyttöjärjestelmä,OperatingSystem ServicePack | Valitse Nimi,Op* | muoto-lista

Tulokset näkyvät kuvassa 8.

Muiden AD Get -cmdlet-komentojen tapaan voit mukauttaa hakuparametreja ja rajoittaa pyynnön tiettyihin organisaatioyksiköihin tarvittaessa. Kaikki esittämäni lausekkeet voidaan integroida suurempiin PowerShell-lausekkeisiin. Voit esimerkiksi lajitella, ryhmitellä, käyttää suodattimia, viedä CSV-muotoon tai luoda ja lähettää sähköpostitse HTML-raportteja – kaikki PowerShellistä! Tässä tapauksessa sinun ei tarvitse kirjoittaa yhtä käsikirjoitusta.
Tässä on bonus: käyttäjän salasanan ikäraportti, joka on tallennettu HTML-tiedostoon:

PS C:\> Get-ADUser -Suodatin "Käytössä -eq "True" -AND PasswordNeverExpires -eq "False"" -Ominaisuudet PasswordLastSet,PasswordNeverExpires,PasswordExpired | Valitse Erottunimi,Nimi,pass*,@(Nimi="Salasanan ikä"; Lauseke=((Hanki-Pvm)-$_.PasswordLastSet)) |lajittele SalasanaAge -laskeva | ConvertTo-Html -Title "Salasanan ikäraportti" | Out-File c:\Work\pwage.htm !}

Vaikka tämä ilmaus saattaa näyttää hieman pelottavalta, sitä on helppo käyttää vähäisellä PowerShellin tuntemuksella. Ja vain yksi viimeinen neuvo on jäljellä: kuinka määritellä mukautettu ominaisuus nimeltä SalasanaIkä. Arvo edustaa eroa tänään ja PasswordLastSet-ominaisuuden välillä. Sitten lajittelen uuden kiinteistöni tulokset. Kuvassa 9 näkyy pienen testialueeni tulos.

Päivitys:
Viesti sisältää käännöksen portaalissa olevasta artikkelista

Edellisen artikkelin kommenteissa muistimme kirjanpidon Excelissä 1C:n sijaan. No, katsotaan kuinka paljon tunnet Excelin. Tänään näytän sinulle kuinka saada tietoja Active Directorysta ja työskennellä sen kanssa ilman makroja ja PowerShellia - vain tavallisilla Office-mekanismeilla. Voit esimerkiksi helposti saada analytiikkaa käyttöjärjestelmän käytöstä organisaatiossasi, jos sinulla ei vielä ole Microsoft SCOM:n kaltaista. No, tai vain lämmittele ja ota ajatuksesi pois käsikirjoituksista.


Tietenkin voit saada tiedot kuten alla olevissa esimerkeissä kirjaimellisesti yhdellä rivillä PowerShellissä. Mutta ensinnäkin PowerShell on liian tylsä, ja toiseksi Excel voi päivittää tietoja dynaamisesti - tuloksena olevat asiakirjat voidaan julkaista verkossa ja unohtaa niiden päivittäminen.

Tietojen käsittelyyn käytän Power Query -mekanismia. Office 2010 ja 2013 varten sinun on asennettava laajennus Microsoft Office 2016:ssa on jo sisäänrakennettu tämä moduuli. Valitettavasti standardiversio ei riitä meille, tarvitsemme Professionalin.


Itse mekanismi on suunniteltu vastaanottamaan ja käsittelemään tietoja useista eri lähteistä - vanhoista ODBC- ja tekstitiedostoista Exchangeen, Oracleen ja Facebookiin. Lisätietoa mekanismista ja sisäänrakennetusta komentosarjakielestä "M" on jo kirjoitettu Habrelle, mutta katson pari esimerkkiä Power Queryn käyttämisestä tietojen hankkimiseen Active Directorysta.

Alkulämmittely: Katsotaan, milloin käyttäjämme kirjautuivat sisään

Pyyntö verkkotunnuksen tietokantaan luodaan välilehdellä "Tiedot ― Uusi pyyntö ― muista lähteistä ― Active Directorysta".



Määritä tietolähde.


Sinun on valittava verkkotunnus ja annettava tarvittavat yhteystiedot. Valitse seuraavaksi objektien tyyppi, tässä esimerkissä - käyttäjä. Esikatseluikkunan oikealla puolella kysely on jo käynnissä ja näyttää esikatselun tiedoista.



Valmistelemme pyynnön ja ihailemme esikatselua.


Sinun tulee valmistella pyyntö etukäteen napsauttamalla "muokkaa"-painiketta ja valitsemalla tarvittavat sarakkeet. Pohjimmiltaan nämä sarakkeet ovat luokkia, joista jokainen sisältää joukon Active Directory -objektin määritteitä pääsaraketta lukuun ottamatta näyttönimi, joka itsessään on attribuutti. Keskityn luokkiin käyttäjä, henkilö, alkuun Ja turvallisuuspäällikkö. Nyt sinun on valittava tarvittavat attribuutit jokaisesta luokasta käyttämällä "laajennusta" - kuvaketta, jossa on kaksi nuolta sarakkeen otsikossa:

  • Luokka käyttäjä laajentaa valitsemalla lastLogonTimestamp Ja userAccountControl;
  • V henkilö valitaan puhelinnumero;
  • V alkuunkunLuotu;
  • ja sisään turvallisuuspäällikköSamAccountName.


Laajennamme pyyntöä.


Asetetaan nyt suodatin: jotta et saa estettyjä tilejä, userAccountControl-attribuutin arvon on oltava 512 tai 66048. Suodatin voi olla erilainen ympäristössäsi. Voit lukea lisää attribuutista Microsoftin dokumentaatiosta.



Suodattimen käyttö.


Joskus Excel havaitsee virheellisesti tietomuodon, erityisesti lastLogonTimestamp-attribuutin arvon. Jos tällainen onnettomuus sattuu yhtäkkiä, voit asettaa oikean muodon "Muunna" -välilehdellä.

Nyt userAccountControl-sarake pitäisi poistaa – sitä ei tarvita näytössä ollenkaan. Ja napsauta "Lataa ja sulje".


Tuloksena on lautanen, joka tarvitsee vain vähän viimeistelyä. Nimeä esimerkiksi sarakkeet uudelleen joksikin luettavammaksi. Ja määritä automaattinen tietojen päivitys.


Automaattinen päivitys taulukkoa avattaessa tai aikakatkaisun jälkeen on määritetty "Ominaisuudet"-kohdan "Data"-välilehdellä.



Asetetaan tietojen päivitystä.


Kun päivityksen asetukset on tehty, voit turvallisesti luovuttaa taulukon henkilöstöosastolle tai turvapalvelulle – ilmoittaa heille kuka kirjautui järjestelmään ja milloin.


Pyyntökoodi "M"-kielellä on spoilerin alla.

anna Lähde = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Objekoluokat"], user1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(user1,() "organisationalPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "msExchCustomRecipient", ")distinguRecipient", "") #"Expanded element securityPrincipal" = Table.ExpandRecordColumn(#"Poistetut sarakkeet", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), #"Expanded element top" = Table.ExpandRecordColumn(#"Expanded element securityPrincipal ", "top", ("whenCreated"), ("whenCreated")), #"Expanded element person" = Table.ExpandRecordColumn(#"Laajennettu elementti top", "person", ("telephoneNumber"), ("telephoneNumber" ")), #"Expanded element user" = Table.ExpandRecordColumn(#"Expanded element person", "user", ("lastLogonTimestamp", "userAccountControl"), ("lastLogonTimestamp", "userAccountControl")), #"Rivit with filter used" = Table.SelectRows(#"Laajennettu käyttäjäelementti", kukin ( = 512 tai = 66048)), #"Changed type" = Table.TransformColumnTypes(#"Rivit, joissa suodatin on käytössä",(("lastLogonTimestamp", kirjoita datetime))), #"Remoted columns1" = Table.RemoveColumns(#"Changed type",("userAccountControl")) in #"Remoted columns1"

Osoitekirjan luominen tai mitä tehdä, kun yritysportaali ei ole ystävällinen AD:n kanssa

Toinen vaihtoehto Excelin käyttämiseen Active Directoryn kanssa on luoda osoitekirja AD-tietojen perusteella. On selvää, että osoitekirja on ajan tasalla vain, jos verkkotunnus on kunnossa.


Luodaan pyyntö objektille käyttäjä, laajentaa luokkaa käyttäjä V postia, ja luokka henkilö V puhelinnumero. Poistetaan kaikki sarakkeet paitsi erottuvaNimi― domain-rakenne toistaa yrityksen rakenteen, eli nimet Organisaatioyksiköt vastaavat osastojen nimiä. Vastaavasti tietoturvaryhmiä voidaan käyttää osastonnimien perustana.


Nyt linjalta CN=käyttäjänimi, OU=kirjanpitoosasto, OU=osastot, DC=verkkotunnus, DC=ru sinun on purettava osaston nimi suoraan. Helpoin tapa tehdä tämä on käyttää Muunna-välilehden erottimia.



Tekstin purkaminen.


Käytän erottimina OU= Ja ,OU=. Periaatteessa pilkku riittää, mutta pelaan varman päälle.



Syötä erottimet.


Nyt suodattimen avulla voit katkaista tarpeettomat OU, kuten estetyt käyttäjät ja sisäänrakennettu, määritä lajittelu ja lataa tiedot taulukkoon.



Näkymä yhteenvetotaulukosta.

Nopea raportti työasemien koostumuksesta ilman aineita tai muita valmisteluja

Yritetään nyt luoda hyödyllinen taulukko hankkimalla tietoja tietokoneista. Tehdään raportti yrityksen käyttämistä käyttöjärjestelmistä: tätä varten luomme pyynnön, mutta tällä kertaa valitsemme navigaattorissa tietokone.



Teemme pyynnön tietokoneobjektista.


Jätetään sarakeluokat tietokone Ja alkuun ja laajentaa niitä:

  • Luokka tietokone laajentaa valitsemalla cn, käyttöjärjestelmä, operationSystemServicePack Ja käyttöjärjestelmän versio;
  • luokassa alkuun valitaan kunLuotu.


Edistynyt pyyntö.


Halutessasi voit tehdä raportin vain palvelinkäyttöjärjestelmistä. Suodata esimerkiksi operationSystem- tai operationSystemVersion-attribuutin mukaan. En tee tätä, mutta korjaan luomisajan näyttöä - minua kiinnostaa vain vuosi. Voit tehdä tämän valitsemalla "Konversio"-välilehdellä tarvitsemamme sarakkeen ja valitsemalla "Päivämäärä"-valikosta "Vuosi".



Poimimme vuoden siitä, kun tietokone tuli verkkotunnukseen.


Nyt ei jää muuta kuin poistaa näyttönimisarake tarpeettomana ja ladata tulos. Data on valmis. Nyt voit työskennellä niiden kanssa kuin tavallisen pöydän kanssa. Luodaan ensin pivot-taulukko "Lisää" - "Pivot-taulukko" -välilehdelle. Sovitaan tietolähteen valinta ja määritetään sen kentät.



Pivot-taulukon kenttäasetukset.


Nyt ei jää muuta kuin mukauttaa mallia makusi mukaan ja ihailla tulosta:



Yhteenvetotaulukko AD:n tietokoneille.


Voit halutessasi lisätä yhteenvetokaavion, myös Lisää-välilehdelle. Lisää luokkaan (tai riviin maun mukaan). käyttöjärjestelmä, dataan ― cn. Suunnittelu-välilehdellä voit valita haluamasi kaavion.



Ympyrädiagrammi.


Nyt on selvästi nähtävissä, että käynnissä olevasta päivityksestä huolimatta Windows XP -työasemien ja Windows 2003 -palvelimien kokonaismäärä on melko suuri. Ja on jotain, mihin pyrkiä.


Pyyntökoodi on spoilerin alla.

anna Lähde = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Object Categories"], tietokone1 = domain.ru(), #"Remote Columns" = Taulukko.PoistaSarakkeet(tietokone1,( "user", "organisationalPerson", "person")), #"Muut poistetut sarakkeet" = Table.SelectColumns(#"Remoted columns",("displayName", "computer", "top")), #"Laajenna kohde computer" = Table.ExpandRecordColumn(#"Muut etäsarakkeet", "tietokone", ("cn", "operatingSystem", "operatingSystemServicePack", "operatingSystemVersion"), ("cn", "operatingSystem", "operatingSystemServicePack", " operationSystemVersion")), #"Extended top" = Table.ExpandRecordColumn(#"Laajennettu tietokone", "top", ("whenCreated"), ("whenCreated")), #"Extracted year" = Table.TransformColumns( #" Expanded element top",(("whenCreated", Date.Year))), #"Remoted columns1" = Table.RemoveColumns(#"Extracted year",("displayName")) in #"Remoted columns1"

Lisää tageja

Tänään yritämme ladata luettelon kaikista käyttäjistä erilliseen tiedostoon Active Directorysta. Pääavustajamme tässä asiassa on PowerShell. Asia on, että Microsoft suunnitteli alun perin PowerShell-komentokonsolin päätyökaluksi Windows-palvelinkomponenttien hallintaan. Ja tänään, kun meillä on jo versio 2.0, suurin piirtein näin on.

Jopa viime aikoina, jotta järjestelmänvalvojat voisivat olla jotenkin vuorovaikutuksessa AD:n kanssa, heillä on oltava käytettävissään joko dsquery-apuohjelma tai erilaisia ​​komentosarjoja tai apuohjelmia. Tänään, Windows Server 2008 R2:sta alkaen, voimme työskennellä AD:n kanssa PowerShellin kautta. PowerShell 2.0:n myötä erityistä moduulia käytetään vuorovaikutukseen Active Directoryn kanssa Active Directory -moduuli Windows PowerShellille, joka sisältää tarvittavan luettelon cmdletistä. Tehtävissämme käytämme komentoa Hanki ADUser.

Joten riippuen siitä, missä käyttöjärjestelmässä käytämme PowerShell-konsolia, meidän on suoritettava "valmisteluvaiheet".

1) Jos työskentelemme Windows Serverin alla versioon 2012 asti, meidän on suoritettava komento:

  • Tuo-moduulin aktiivinen hakemisto – komento moduulin tuomiseksi AD:hen

Tämä moduuli on jo oletusarvoisesti käytössä käyttöjärjestelmäversioissa 2012 ja sitä uudemmissa versioissa.

2) Jos työskentelemme mistä tahansa asiakas-Windowsista, siihen on asennettava RSAT-etähallintapaketti, johon on asennettu Active Directory Module for Windows PowerShell -komponentti.

On syytä huomata, että Get-ADUser-cmdlet on suositeltavaa suorittaa, kun lähetettävän tiedon määrä on enintään 1000 käyttäjää.

AD-käyttäjien vieminen PowerShellin avulla erilliseen tiedostoon

Kutsutaan ensin Get-ADUser-komennon apua. Tämän seurauksena saat kaikki tarvittavat komennot jatkohallintaa varten.

  • apua Get-ADUser - käsky kutsua apua

Saadaksesi luettelon kaikista käyttäjistä, joilla on kaikki ominaisuudet PowerShell-ikkunassa, sinun on suoritettava seuraava komento:

  • Get-ADUser -suodatin * – vie luettelo AD-käyttäjistä

Tämä lataus ei ole täysin informatiivinen, eikä se mahduta kaikkia tarvittavia tietoja ikkunaan. Yritetään siksi rajata hakua ja näyttää tietyn käyttäjän käyttäjä1 ominaisuudet:

  • Get-ADUser -identiteetti user1 -ominaisuudet * – viedä tietyn käyttäjän ominaisuuksia

Yritetään nyt viedä kaikkien käyttäjien luettelo ominaisuuksineen ulkoiseen txt tai csv tiedosto:

  • Get-ADUser -suodatin * -ominaisuudet * | Vie-csv -polku c:\users.csv -koodaus Unicode – vie käyttäjät erilliseen tiedostoon

Haluan kiinnittää erityistä huomiota avaimeen -koodaus Unicode. Sen avulla varmistetaan, että venäläiset kyrilliset aakkoset voidaan näyttää oikein ladatussa tiedostossa AD:sta viennin jälkeen. Esimerkiksi Microsoft Excelin kautta näemme kysymysmerkkejä venäläisten kirjainten sijasta.

Kun katsot tiedostoa, tiedot viedään yhdelle riville, joten niitä ei voi lukea. Tämän muuttamiseksi meidän on tehtävä seuraava: