Excel místo PowerShellu: dotazy na AD a systémové zprávy „na koleně“. Jak získat seznam vybraných AD skupin, jejichž členy je velký seznam uživatelů

Není žádným tajemstvím, že od první verze PowerShellu se z něj Microsoft snaží udělat hlavní nástroj pro správu Windows. A v mnoha ohledech to jde! Dnes si na jednoduchých příkladech ukážeme možnosti PowerShellu, které lze použít k získání různých informací o uživatelích Active Directory a jejich atributech.

Poznámka. Dříve jste k získání informací o atributech uživatelských účtů AD museli používat různé nástroje: konzolu ADUC (včetně), nástroj atd. Volba nástroje byla obvykle založena na aktuální úloze a programovacích schopnostech administrátora.

PowerShell 2.0 představil speciální modul pro práci s Active Directory - (zavedený ve Windows Server 2008 R2), jehož rutiny umožňují provádět různé manipulace s objekty adresáře AD. Rutina se používá k získání informací o uživatelích domény Active Directory a jejich vlastnostech Get-ADUser. Rutinu Get-ADUser můžete použít k získání hodnoty libovolného atributu existujícího uživatelského účtu v AD. Kromě toho můžete zadat různá kritéria výběru a generovat seznamy uživatelů domény a jejich atributů.

V tomto příkladu vám ukážeme, jak použít rutinu PowerShell Get-ADUser k načtení informací o tom, kdy bylo heslo uživatele naposledy změněno a kdy vyprší jeho platnost.

Spusťte okno Powershll s právy správce a importujte modul Active Directory příkazem:

Import-Modul activedirectory

Rada. V systému Windows Server 2012 a vyšším můžete tuto položku přeskočit, protože modul PowerShell Active Directory je ve výchozím nastavení povolen.

V klientských operačních systémech (například Windows 10), aby příkaz Get-AdUser fungoval, musíte nainstalovat příslušnou verzi RSAT a povolit komponentu v ovládacím panelu. Modul Active Directory pro Windows PowerShell(Nástroje pro správu vzdáleného serveru -> Nástroje pro správu rolí -> Nástroje AD DS a AD LDS -> Nástroje AD DS).

Úplný seznam všech argumentů rutiny Get-ADUser lze získat takto:

Pomozte Get-ADUser

Chcete-li zobrazit seznam všech doménových účtů, spusťte příkaz:

Get-ADUser -filtr *

Formát vráceného seznamu není příliš vhodný na použití, zobrazuje se pouze nějakých základních 10 z více než 120 atributů a vlastností uživatelských účtů (DN, SamAccountName, Name, UPN atd.) navíc vidíme, že existuje žádná informace o čase poslední změny hesla.

Chcete-li zobrazit úplné informace o všech dostupných atributech uživatelského tuseru, spusťte příkaz:

Get-ADUser -identity tuser -properties *

Vidíme tedy úplný seznam atributů uživatele AD a jejich hodnot spojených s uživatelským účtem. Dále přejdeme k formátování výstupu rutiny Get-ADUser tak, aby se zobrazila pole, která potřebujeme. Zajímají nás atributy:

  • Platnost hesla vypršela
  • PasswordLastSet
  • Heslo Nikdy nevyprší

Spustíme příkaz:

Get-ADUser tuser – vlastnosti PasswordExpired, PasswordLastSet, PasswordNeverExpires

Nyní uživatelská data obsahují informaci o datu změny hesla a době, kdy vyprší jeho platnost. Uveďme informace v pohodlnější tabulkové formě:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Chcete-li zobrazit uživatelská data z konkrétní OU, použijte parametr SearchBase:

Get-ADUser -SearchBase ‘OU=Moskva,DC=winitpro,DC=loc’ -filtr * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

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

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

Nebo v CSV, který bude v budoucnu pohodlně exportován do Excelu (dodatečně pomocí třídit-objekt Seřaďme tabulku podle sloupce PasswordLastSet a také přidejte podmínku kde– 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:\temp\vyprší-uživatelské-heslo-2015.csv

Můžete tak vytvořit tabulku s libovolnými nezbytnými uživatelskými atributy Active Directory.

Chcete-li získat seznam uživatelských účtů AD na základě konkrétní charakteristiky, použijte parametr –Filter. Jako argumenty pro tento parametr můžete zadat hodnotu určitých atributů uživatele služby Active Directory, což způsobí, že rutina Get-ADUser bude aplikována na uživatele, kteří splňují kritéria filtru.

Výstup uživatelů AD, jejichž jméno začíná na Roman:

Get-ADUser -filter (název -jako "Roman*")

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

Seznam všech aktivních (neblokovaných) účtů v AD:

Get-ADUser -Filter (povoleno -eq "True") | Select-Object SamAccountName,Jméno,Příjmení,GivenName | Formátovací tabulka

Seznam účtů s prošlým heslem:

Get-ADUser -filter (Povoleno -eq $True) -vlastnosti heslo Platnost vypršela | where($_.PasswordExpired)

Seznam aktivních účtů s e-mailovými adresami:

Get-ADUser -Filtr ((mail -ne "null") -and (Povoleno -eq "true")) -Vlastnosti Příjmení,Jméno,mail | Select-Object Name,Surname,GivenName,mail | Formátovací tabulka

Úkol: pro seznam účtů, které jsou uloženy v textovém souboru (jeden účet na řádek), musíte získat telefonní číslo uživatele v AD a nahrát informace do textového souboru csv (lze snadno importovat do Esxel).

Import-Csv c:\ps\usernsme_list.csv | ForEach ( Get-ADUser -identity $_.user -Properties Name, telephoneNumber | Vyberte jméno, telephoneNumber | Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8 )

Následující příklad vám umožňuje stáhnout podnikový adresář jako soubor csv, který lze později importovat do aplikace Outlook nebo Mozilla Thunderbird:

Get-ADUser -Filtr ((mail -ne "null") -and (Povoleno -eq "true")) -Vlastnosti Příjmení,Jméno,mail | Select-Object Name,Surname,GivenName,mail | Export-Csv -NoTypeInformation -Kódování utf8 -delimiter "," $env:temp\mail_list.csv

Uživatelé, kteří si za posledních 90 dní nezměnili heslo:

$90_Days = (Get-Date).adddays(-90) Get-ADUser -filter ((passwordlastset -le $90_days))

$user = Get-ADUser winadmin -Miniatura vlastnostíPhoto $user.thumbnailPhoto | Set-Content winadmin.jpg -Bajt kódování

Seznam skupin, do kterých uživatelský účet patří

Get-AdUser winadmin -Vlastnosti memberof | Select memberof -expandproperty memberof

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 zvažovat v tomto článku

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

Níže je uveden skript PowerShellu 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 bez problémů otevřít v Excelu.

$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 ve 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ů Spustíme 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

V komentářích k předchozímu článku jsme si připomněli účetnictví v Excelu místo 1C. No, pojďme si ověřit, jak moc umíte Excel. Dnes vám ukážu, jak získat data z Active Directory a pracovat s nimi bez maker a PowerShellu – pouze se standardními mechanismy Office. Můžete například snadno získat analýzu využití operačního systému ve vaší organizaci, pokud ještě nemáte něco jako Microsoft SCOM. No, nebo se jen zahřejte a odpoutejte hlavu od scénářů.


Samozřejmě můžete získat data jako v příkladech níže doslova jedním řádkem v PowerShellu. Za prvé je ale PowerShell příliš nudný a za druhé umí Excel dynamicky aktualizovat data – výsledné dokumenty lze publikovat online a zapomenout na jejich aktualizaci.

Pro práci s daty využiji mechanismus Power Query. Pro Office 2010 a 2013 budete muset nainstalovat plugin Microsoft Office 2016 již má tento modul vestavěný. Standardní edice nám bohužel nestačí, budeme potřebovat Professional.


Samotný mechanismus je navržen pro příjem a zpracování dat z různých zdrojů – od starých ODBC a textových souborů až po Exchange, Oracle a Facebook. Více podrobností o mechanismu a vestavěném skriptovacím jazyce „M“ již bylo napsáno na Habré, ale podívám se na několik příkladů použití Power Query k získávání dat z Active Directory.

Zahřívání: Podívejme se, kdy se naši uživatelé přihlásili

Samotný požadavek na doménovou databázi se vytváří na záložce „Data ― Nový požadavek ― Z jiných zdrojů ― Z Active Directory“.



Zadejte zdroj dat.


Budete muset vybrat název domény a poskytnout potřebné informace o připojení. Dále vyberte typ objektů, v tomto příkladu - uživatel. Vpravo v okně náhledu již běží dotaz a zobrazuje náhled dat.



Připravujeme poptávku a obdivujeme náhled.


Požadavek byste měli připravit předem kliknutím na tlačítko „upravit“ a výběrem požadovaných sloupců. Tyto sloupce jsou v podstatě třídy. Každý z nich obsahuje sadu specifických atributů objektu Active Directory, s výjimkou hlavního sloupce displayName, což je samo o sobě atribut. Zaměřím se na hodiny uživatel, osoba, horní A zabezpečeníPrincipal. Nyní musíte vybrat potřebné atributy z každé třídy pomocí „rozšíření“ - ikony se dvěma šipkami v záhlaví sloupce:

  • Třída uživatel rozšířit výběrem lastLogonTimestamp A kontrola uživatelského účtu;
  • PROTI osoba pojďme si vybrat telefonní číslo;
  • PROTI horníkdyžVytvořeno;
  • a dovnitř zabezpečeníPrincipalSamAccountName.


Žádost rozšiřujeme.


Nyní nastavíme filtr: konkrétně, aby nedošlo k zablokování účtů, musí mít atribut userAccountControl hodnotu 512 nebo 66048. Filtr se může ve vašem prostředí lišit. Více o atributu si můžete přečíst v dokumentaci společnosti Microsoft.



Použití filtru.


Někdy Excel nesprávně zjistí formát dat, zejména hodnotu atributu lastLogonTimestamp. Pokud vás takové neštěstí náhle postihne, můžete na záložce „Převést“ nastavit správný formát.

Nyní by měl být sloupec userAccountControl smazán - na displeji není vůbec potřeba. A klikněte na „Stáhnout a zavřít“.


Výsledkem je talíř, který potřebuje jen trochu dodělat. Například přejmenujte sloupce na něco čitelnějšího. A nastavit automatickou aktualizaci dat.


Automatická aktualizace při otevření tabulky nebo podle časového limitu se konfiguruje v záložce „Data“ v „Vlastnosti“.



Nastavení aktualizace dat.


Po dokončení nastavení aktualizace můžete stůl bez obav předat personálnímu oddělení nebo bezpečnostní službě – dejte jim vědět, kdo a kdy se do systému přihlásil.


Kód požadavku v jazyce „M“ je pod spoilerem.

let Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Object Categories"], user1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(user1,( "organizationalPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "mstucipientes", "Astributing", "Custom" #"Expanded element securityPrincipal" = Table.ExpandRecordColumn(#"Odstraněné sloupce", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), #"Expanded element top" = Table.ExpandRecordColumn(#"Expanded element securityPrincipal ", "top", ("whenCreated"), ("whenCreated")), #"Expanded element person" = Table.ExpandRecordColumn(#"Expanded element top", "person", ("telephoneNumber"), ("telephoneNumber" ")), #"Expanded element user" = Table.ExpandRecordColumn(#"Expanded element person", "user", ("lastLogonTimestamp", "userAccountControl"), ("lastLogonTimestamp", "userAccountControl")), #"Rows s aplikovaným filtrem" = Table.SelectRows(#"Expanded user element", every ( = 512 nebo = 66048)), #"Changed type" = Table.TransformColumnTypes(#"Řádky s aplikovaným filtrem",(("lastLogonTimestamp", zadejte datetime))), #"Vzdálené sloupce1" = Table.RemoveColumns(#"Změněný typ",("userAccountControl")) v #"Vzdálené sloupce1"

Vytvoření adresáře aneb co dělat, když se firemní portál nespřátelí s AD

Další možností použití Excelu ve spojení s Active Directory je vytvoření adresáře na základě dat AD. Je jasné, že adresář bude aktuální pouze v případě, že bude doména v pořádku.


Vytvořme požadavek na objekt uživatel, rozšířit třídu uživatel PROTI pošta a třída osoba PROTI telefonní číslo. Smažeme všechny sloupce kromě rozlišovací jméno― struktura domény opakuje strukturu podniku, tedy jména Organizační jednotky odpovídají názvům oddělení. Podobně lze skupiny zabezpečení použít jako základ pro názvy oddělení.


Nyní z řady CN=Uživatelské jméno, OU=Účetní oddělení, OU=Divize, DC=doména, DC=ru musíte přímo extrahovat název oddělení. Nejjednodušší způsob, jak toho dosáhnout, je použít oddělovače na kartě Transformace.



Extrahování textu.


Jako oddělovače používám OU= A ,OU=. V zásadě stačí čárka, ale hraji na jistotu.



Zadejte oddělovače.


Nyní pomocí filtru můžete odříznout zbytečné OU, jako jsou blokovaní uživatelé a vestavěný, nakonfigurujte řazení a načtěte data do tabulky.



Pohled na souhrnnou tabulku.

Rychlá zpráva o složení pracovních stanic, bez zavádění látek nebo jiných přípravků

Nyní se pokusíme vytvořit užitečnou tabulku získáním dat na počítačích. Udělejme zprávu o operačních systémech používaných společností: za tímto účelem vytvoříme požadavek, ale tentokrát v navigátoru vybereme počítač.



Vytváříme požadavek na objekt počítače.


Nechme třídy sloupců počítač A horní a rozšířit je:

  • Třída počítač rozšířit výběrem cn, operační systém, OperatingSystemServicePack A OperatingSystemVersion;
  • ve třídě horní pojďme si vybrat kdyžVytvořeno.


Pokročilý požadavek.


V případě potřeby můžete vytvořit sestavu pouze na serverových operačních systémech. Filtrujte například podle atributu OperatingSystem nebo OperatingSystemVersion. Neudělám to, ale opravím zobrazení času vytvoření - zajímá mě pouze rok. Chcete-li to provést, na kartě „Konverze“ vyberte sloupec, který potřebujeme, a v nabídce „Datum“ vyberte „Rok“.



Extrahujeme rok od okamžiku, kdy počítač vstoupil do domény.


Teď už jen zbývá sloupec displayname smazat jako nepotřebný a načíst výsledek. Data jsou připravena. Nyní s nimi můžete pracovat jako s běžným stolem. Nejprve si vytvoříme kontingenční tabulku na záložce „Vložit“ – „Kontingenční tabulka“. Souhlasíme s výběrem zdroje dat a nakonfigurujeme jeho pole.



Nastavení pole kontingenční tabulky.


Nyní zbývá pouze upravit design podle svého vkusu a obdivovat výsledek:



Souhrnná tabulka pro počítače v AD.


V případě potřeby můžete přidat souhrnný graf také na kartě Vložit. V „Kategorii“ (nebo v „Řádcích“ podle chuti) přidejte operační systém, k datům ― cn. Na záložce „Design“ si můžete vybrat typ grafu, který se vám líbí.



Výsečový graf.


Nyní je jasně vidět, že i přes probíhající aktualizaci je celkový počet pracovních stanic s Windows XP a serverů s Windows 2003 poměrně velký. A je o co usilovat.


Kód požadavku je pod spoilerem.

let Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Object Categories"], computer1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(computer1,( "user", "organizationalPerson", "person")), #"Další odstraněné sloupce" = Table.SelectColumns(#"Vzdálené sloupce",("displayName", "computer", "top")), #"Rozbalit položku computer" = Table.ExpandRecordColumn(#"Další vzdálené sloupce", "počítač", ("cn", "operatingSystem", "operatingSystemServicePack", "operatingSystemVersion"), ("cn", "operatingSystem", "operatingSystemServicePack", " OperatingSystemVersion")), #"Extended top element" = Table.ExpandRecordColumn(#"Expanded computer element", "top", ("whenCreated"), ("whenCreated")), #"Extracted year" = Table.TransformColumns( #"Expanded element top",(("whenCreated", Date.Year))), #"Remoted columns1" = Table.RemoveColumns(#"Extracted year",("displayName")) v #"Vzdálené sloupce1"

Přidat štítky

0

Mám následující pracovní skript, který kontroluje, zda je velký seznam uživatelů v souboru CSV členem skupiny AD, a zapisuje výsledky do souboru results.csv.

Nejsem si jistý, jak převést skript, abych mohl změnit $group = "InfraLite" na $group = DC .\List_Of_AD_Groups.CSV .

Skript tedy nevrací pouze shody pro jednu skupinu AD, ale vrací shody pro 80 skupin AD obsažených v List_of_AD_groups.csv. Zápis ANO/NE pro každou skupinu AD do nového sloupce CSV (nebo pokud to není možné, vytvoření samostatného souboru CSV pro každou skupinu s výsledky udělá totéž.

Mohl bych to udělat ručně tak, že změním hodnotu z $group a název exportního souboru a znovu spustím skript 80krát, ale musel bych to udělat rychle s PS

například results.csv?:

NAME AD_GROUP1 AD_GROUP2 AD_GROUP80 atd. uživatel1 ano ne ano uživatel2 ne ne ano uživatel3 ne ano ne echo "UserName`InfraLite" >> results.csv $users = GC .\user_list.csv $group = "InfraLite" $members = Get-ADGroupMember -Identita $group -Rekurzivní | Vyberte -ExpandProperty SAMAccountName foreach ($user v $users) ( if ($members -contains $user) ( echo "$user $group`tYes" >> results.csv ) else ( echo "$user`tNo" >> výsledky .csv))

  • 2 odpovědi
  • řazení:

    Aktivita

0

Triviálním řešením vašeho problému by bylo zabalit váš stávající kód do jiné smyčky a vytvořit výstupní soubor pro každou skupinu:

$groups = Get-Content "C:\groups.txt" foreach ($group in $groups) ( $members = Get-ADGroupMember ... ... )

Elegantnějším přístupem by bylo vytvořit šablonu mapování skupiny, naklonovat ji pro každého uživatele a naplnit kopii členstvím ve skupinách uživatele. Něco takového by mělo fungovat:

$template = @() Get-Content "C:\groups.txt" | ForEach-Object ( $template[$_] = $false ) $groups = @() Get-ADGroup -Filter * | ForEach-Object ( $groups[$_.DistinguishedName] = $_.Name ) Get-ADUser -Filter * -Properties MemberOf | ForEach-Object ( $groupmap = $template.Clone() $_.MemberOf | ForEach-Object ( $groups[$_] ) | Where-Object ( $groupmap.ContainsKey($_) ) | ForEach-Object ( $groupmap [$_] = $true ) Nový-objekt -Typ PSObject -Vlastnost $groupmap ) | Export-Csv "C:\user_group_mapping.csv" -NoType

0

Chvíli jsem si s tím hrál a myslím, že jsem našel způsob, jak dostat přesně to, co jsi hledal.

Myslím, že Ansgar byl na správné cestě, ale nedokázal jsem ho přimět udělat to, co přišlo potom. Zmínil, že v době psaní článku neměl přístup do prostředí AD.

Na co jsem přišel:

$UserArray = Get-Content "C:\Temp\Users.txt" $GroupArray = Get-Content "C:\Temp\Groups.txt" $OutputFile = "C:\Temp\Something.csv" # Nastavení hashtable pro pozdější použití $UserHash = New-Object -TypeName System.Collections.Hashtable # Vnější smyčka pro přidání uživatelů a členství do UserHash $UserArray | ForEach-Object( $UserInfo = Get-ADUser $_ -Properties MemberOf # Odebere syntaxi LPAP pouze na SAMAccountName skupiny $Memberships = $UserInfo.MemberOf | ForEach-Object( ($_.Split("")) .replace("CN=","") ) #Přidání páru User=Členství do hash $UserHash.Add($_,$Memberships) ) #Vnější smyčka pro vytvoření objektu na uživatele $Results = $UserArray | ForEach-Object( # Nejprve vytvořte jednoduchý objekt $User = New-Object -TypeName PSCustomObject -Property @( Name = $_ ) # Dynamicky přidávejte členy do objektu na základě $GroupArray $GroupArray | ForEach-Object ( #Checking $UserHash, abyste viděli, zda se skupina zobrazuje v seznamu členství uživatele $UserIsMember = $UserHash.($User.Name) -obsahuje $_ #Přidání vlastnosti k objektu a hodnoty $User | Add-Member -MemberType NoteProperty -Name $ _ -Value $UserIsMember ) #Vrácení objektu do proměnné Return $User ) #Převeďte objekty do CSV a poté je vytiskněte $Results |

Doufejme, že vše dává smysl. Komentoval jsem, jak jsem mohl. Bylo by velmi snadné převést na ADSI, pokud byste neměli RSAT nainstalovaný na jakémkoli počítači, na kterém to používáte. Pokud to budete potřebovat, dejte mi vědět a já udělám rychlé změny.




Horní