Puncte:0

Cum să găsiți toți membrii grupului de securitate Windows în PowerShell, să atribuiți nume de variabile și să ieșiți în CSV?

drapel za

Nu sunt un tip sysAdmin/PowerShell în sine, dar întâmpin probleme în a face această interogare Powershell să funcționeze.

Este necesar să retrageți toți utilizatorii dintr-un anumit grup de securitate Windows și să-i formatez într-un mod specific (prezentat mai jos), totuși am unele probleme la identificarea de ce filtrul meu pentru grupurile de securitate nu funcționează și mă întreb dacă este ceva în neregulă cu modul în care am ai instalat filtrul.

#Fragment
$searcher.filter = "(&(memberof=CN=Grupul meu de securitate Windows,OU=SecurityGroups,OU=Messaging,OU=Enterprise,DC=****,DC=****)(objectCategory=*)) "
$rezultate = $searcher.findall()

Am un punct de întrerupere configurat în PowerShell ISE, totuși $results nu conține nicio valoare în timpul depanării.

Am modelat acest lucru dintr-un script existent de la un coleg, unde se pare că interogează un DL și văd valorile $results când depanez acest lucru:

#--------------------------------------------- --------
Exemplu de filtru #DL (funcționează)
#--------------------------------------------- --------
$Searcher.Filter = "(&(memberOf=CN=DL_TestApp_Admin,OU=Liste de distribuție,OU=Messagerie,OU=Enterprise,DC=dcInfo,DC=dcInfo,DC=****)(objectCategory=*))"
$rezultate = $searcher.findall()

Iată întregul script PS (modificat de mine) care filtrează grupurile de securitate Windows

$curdate = (Get-Date).ToString("MMddyyyy")

$baseDN = „LDAP://”
$Searcher = New-Object DirectoryServices.DirectorySearcher
$searcher.searchroot = nou-obiect system.directoryservices.directoryentry($basedn)
#--------------------------------------------- --------
#Filtrul de grup de securitate Windows (nu funcționează)
#--------------------------------------------- --------
$searcher.filter = "(&(memberof=CN=Grupul meu de securitate Windows,OU=SecurityGroups,OU=Messaging,OU=Enterprise,DC=****,DC=****)(objectCategory=*)) "
$rezultate = $searcher.findall()

    #--------------------------------------------- --------
    #Construiți setul de date într-un format specific
    #--------------------------------------------- --------
    $usercsv = $rezultate | #-Obiect {
         New-Object -TypeName PSObject -Property @{
            „ID utilizator” = $_.properties['samAccountName'][0]
            „Rol utilizator” = „Blah”
            „Rol ridicat” = „Y”
            „Utilizator intern” = „Y”
            „Data ultimei conectări” = $null
            „Informații specifice aplicației 1” = $null
            „Informații specifice aplicației 2” = $null
            „Data creării contului” = $null
            „Data modificării ultimei parole” = $null
            „Adresa de e-mail a utilizatorului” = $_.properties['mail'][0]
            „Prenumele utilizatorului” = $null
            „Nume utilizator” = $null
            „Informații specifice aplicației 3” = $null
            „Grup de revizuire” = $null
        }
    }

#export în csv
$usercsv | Select-Object -Property "User ID","Rol utilizator","Rol crescut","Utilizator intern","Data ultimei autentificare","Informații specifice aplicației 1","Informații specifice aplicației 2","Data creării contului ","Dată modificării ultimei parole","Adresa de e-mail a utilizatorului","Prenumele utilizatorului","Numele utilizatorului","Informații specifice aplicației 3","Grupul de revizuire" | Export-Csv -NoTypeInformation -Cale „UsersListing_$curdate.csv”

Write-Host „Scris”, $results.Count, „înregistrare(e)”

#eliminarea ultimului CR LF
#TODO: Mutați aceasta într-o funcție comună într-un script separat pentru toți     
scripturi de apelat
$stream = [IO.File]::OpenWrite("UsersListing_$curdate.csv")
$stream.SetLength($stream.Length - 2)
$stream.Close()
$stream.Dispose()

Inițial, am scris acest lucru pentru a rula într-o conductă de lansare DevOps Poweshell, după cum urmează, pentru a produce un fișier csv:

$Members = Get-ADGroup -Filter {Name -eq "WSG"} -Properties Member | 
Select-Object -ExpandProperty Member

$GlobalCatalog = "$((Get-ADDomainController -Discover).Name):xxxx"

$output = Foreach ($Utilizator în $Members)
{
  Get-ADUser -Identity $User -Server $GlobalCatalog -Properties CN,    
  Adresă de e-mail, DataExpirației Contului, Creat, Pagina de pornire, Data ultimei autentificări, 
  PasswordLastSet, când este creată | Selectare-obiect CN, 
  SamAccountName,EmailAddress, AccountExpirationDate, Created, Enabled,     
  Pagina de pornire, LastLogonDate, Nume, PasswordLastSet, UserPrincipalName, 
  când este creat 
}

#ieșire fișier csv
$ieșire | Export-Csv $Env:TEMP\Users.csv -NoTypeInformation

În acest caz, nu a contat formatul de ieșire și nu sunt sigur dacă pot modifica această interogare pentru a scoate rezultatele în acest format:

            „ID utilizator” = $_.properties['samAccountName'][0]
            „Rol utilizator” = „Blah”
            „Rol ridicat” = „Y”
            „Utilizator intern” = „Y”
            „Data ultimei conectări” = $null
            „Informații specifice aplicației 1” = $null
            „Informații specifice aplicației 2” = $null
            „Data creării contului” = $null
            „Data modificării ultimei parole” = $null
            „Adresa de e-mail a utilizatorului” = $_.properties['mail'][0]
            „Prenumele utilizatorului” = $null
            „Nume utilizator” = $null
            „Informații specifice aplicației 3” = $null
            „Grup de revizuire” = $null

Și rezultatele din această interogare sunt în acest format special:

CN: 
SamAccountName: 
Adresa de e-mail          : 
AccountExpirationDate: 
Creată               : 
Activat               : 
Pagina principala              : 
LastLogonDate: 
Nume                  : 
PasswordLastSet: 
UserPrincipalName: 
când este creat: 

Multumesc anticipat pentru orice ajutor.

Puncte:2
drapel ng

Nu este nevoie să vă deranjați cu o căutare LDAP reală, deoarece Modulul Active Directory PowerShell a fost introdus în Windows Server 2008 R2.

Get-ADGroupMember este ceea ce cauți. Dacă aveți nevoie de mai multe detalii despre membrii grupului, puteți utiliza Get-ADUser asupra lor pentru a obține orice informație de care aveți nevoie.

Modulul AD PowerShell este instalat automat pe toate controlerele de domeniu, dar îl puteți instala pe orice sistem Windows Server activând caracteristica Windows corespunzătoare:

Instalare-WindowsFeature RSAT-AD-PowerShell

De asemenea, îl puteți instala pe sistemele client Windows ca parte a Instrumente de administrare la distanță a serverului.

Tikhon avatar
drapel za
Există un exemplu de implementare pe care să-l pot urma?
Semicolon avatar
drapel jo
@jazzBox Te-ai uitat măcar la pagina de manual care a fost legată?
Puncte:1
drapel za

Iată ultima Poweshell care a fost dezvoltată pentru a obține rezultatele pe care le urmărim:

$curdate = (Get-Date).ToString("MMddyyyy")
#--------------------------------------------- -------------------------------
# Obțineți membri pentru grupurile de securitate Windows
#--------------------------------------------- -------------------------------
$Members = Get-ADGroup -Filter {Name -eq "My AD Group"} -Properties Member | Select-Object -ExpandProperty Member

$GlobalCatalog = "$((Get-ADDomainController -Discover).Name):1234"
$rezultate = @()

Foreach ($User în $Members)
{    
    $userInfo = Get-ADUser -Identity $User -Server $GlobalCatalog -Properties SamAccountName, EmailAddress, LastLogonDate
    $detalii = [comandat] @{
        
        „Active Directory ID” = $userInfo.SamAccountName
        „Rolul utilizator” = „Grupul meu AD”
        „Rol ridicat” = „N”
        „Utilizator intern” = „Y”
        „Data ultimei conectări” = $userInfo.LastLogonDate
        „Informații specifice aplicației 1” = $null
        „Informații specifice aplicației 2” = $null
        „Data creării contului” = $null
        „Data ultimei modificări PWD” = $null
        „Adresa de e-mail a utilizatorului” = $userInfo.EmailAddress
        „Prenumele utilizatorului” = $null
        „Nume utilizator” = $null
        „Informații specifice aplicației 3” = $null
        „Grup de revizuire” = $null

    }
    $rezultate = New-Object PSObject -Property $detalii
}
#--------------------------------------------- --------
#output rezultatele în csv
#--------------------------------------------- --------
$rezultate | Export-Csv -NoTypeInformation -Cale „UsersListing_$curdate.csv”

Numele variabilelor (ID-ul Active Directory, Rolul utilizatorului etc.) reprezintă antetele coloanelor din fișierul CSV.

Sper să ajute pe cineva.

Puncte:0
drapel cn

Trebuie să specificați un DN de bază. Acesta este de obicei DN-ul rădăcină a domeniului.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.