Crea report OU di Active Directory con PowerShell

Creare report dell’organizzazione dell’unità Active Directory con PowerShell. Un’unità organizzativa (OU) è un contenitore di Active Directory (AD) in cui possono essere archiviati utenti, gruppi, computer e altre OU. Ogni dominio AD può avere la propria gerarchia di unità organizzative. Questo articolo coprirà la gestione delle OU e come utilizzare script PowerShell di Windows per spostare, creare, eliminare e generare report sulle OU in AD, nonché collegare e applicare una policy di gruppo a un’OU.

Creare report dell’organizzazione dell’unità Active Directory con Powershell

PrerequisitiSe vogliamo seguire gli esempi di script di questo articolo, dovremo installare i componenti richiesti:

Se vogliamo seguire gli script di esempio in questo articolo, dobbiamo installare i componenti prerequisiti:

Bene, come creare report di unità organizzative di Active Directory con PowerShell? Scopriamolo.

Comprendere i comandi delle Unità Organizzative

A Microsoft Active Directory domain container that can hold users, groups, and computers is an organizational unit (OU). It is the smallest unit to which a Windows system administrator can assign a Group Policy setting or account permission. An organizational unit may contain multiple OUs, but each attribute within the containing OU must be distinct.

Oggetti provenienti da altri domini non possono essere contenuti all’interno delle unità organizzative di Active Directory. Le sezioni che seguono esamineranno i comandi fondamentali per gestire le UO.

Crea UO in Active Directory con PowerShell

Possiamo creare una nuova unità organizzativa in AD utilizzando il comando New-ADOrganizationalUnit e specificando il nome di un nuovo oggetto OU. Windows PowerShell creerà per impostazione predefinita l’unità organizzativa nella radice del dominio. Ad esempio, il seguente comando creerà un’OU denominata IT sul Controller di Dominio (DC):

New-ADOrganizationalUnit “IT

Se abbiamo bisogno di un percorso LDAP OU diverso, utilizzare il parametro del cmdlet -Path per specificare il suo nome distinto (DN):

New-ADOrganizationalUnit “IT” –Path “OU=Users,DC=InfraSOS,DC=com”

Sposta un’OU in un Active Directory con PowerShell

Se abbiamo bisogno di spostare un OU in un’altra posizione, utilizzare il comando Move-ADObject. E’ essenziale notare che non dobbiamo proteggere il target OU da una cancellazione accidentale. Se così fosse, utilizzare il seguente comando per rimuovere la protezione:

Set-ADOrganizationalUnit -Identity "OU=IT,OU=Users,DC=InfraSOS,DC=Com" -ProtectedFromAccidentalDeletion $False

Ora possiamo spostare l’OU in un’altra posizione:

Move-ADObject -Identity "OU=Regions,OU=Managers,DC=InfraSOS,DC=Com" -TargetPath "OU=IT,DC=InfraSOS,DC=Com"

Ridenominare un OU in un Active Directory con PowerShell

Usa il comando Rename-ADObject per ridenominare una unità organizzativa. Il parametro Identity specifica l’oggetto AD da ridenominare e richiede sia il DN che il GUID. Ad esempio, questo comando cambia il nome dell’OU IT in Marketing:

Rename-ADObject -Identity "OU=Regions,OU=IT,DC=InfraSOS,DC=COM" -NewName Marketing

Possiamo anche utilizzare il Get-ADOrganizationalUnit cmdlet con il -Filter parametro, che non richiede l’intero percorso LDAP alla OU. Tuttavia, quel cmdlet cercherà l’intero AD e lo script applicherà l’azione del comando a tutte le Unità Organizzative con il termine di ricerca nei loro nomi:

Get-ADOrganizationalUnit -Filter "Name -eq 'Zones'" | Rename-ADObject -NewName Area

Discuteremo più comandi Get OU una volta che inizieremo a generare report.

Applicare un Group Policy a una OU in un Active Directory con PowerShell

Per assegnare una Criteri di Gruppo a una Unità Organizzativa, possiamo utilizzare il comando New-GPLink, che collega l’oggetto dei Criteri di Gruppo (GPO) specificato e l’Unità Organizzativa. Inoltre, possiamo identificare una delle seguenti proprietà per il collegamento:

  • Abilitato – Se il collegamento ha uno stato Abilitato, le impostazioni elaborate del GPO vengono applicate quando i Criteri di Gruppo per il sito, il dominio e l’OU.
  • Forzato – Se il collegamento ha uno stato Forzato, non possiamo bloccare l’OU in un contenitore di livello inferiore.
  • Ordine – L’Ordinestato specifica la precedenza delle impostazioni del GPO.

Ad esempio, il seguente comando collega il GPO Block all’Unità Organizzativa IT con il collegamento sia abilitato che forzato:

New-GPLink -Name "Block" -Target "OU=Districts,OU=IT, DC=InfraSOS, DC=com" -LinkEnabled Yes -Enforced Yes

Sposta Utenti e Computer in una Nuova UO in un AD con PowerShell

Dopo aver creato un’Unità Organizzativa e, opzionalmente, averla collegata a un GPO, la popoleremo con utenti e computer. IlMove-ADObjectcmdlet in PowerShell sposta qualsiasi oggetto o insieme di oggetti di Active Directory in una diversa UO. IlIdentityparametro indica quale oggetto dovrebbe essere spostato. Oggetto Active Directory o contenitore.

È fondamentale notare che dobbiamo inserire il percorso completo LDAP dell’oggetto o il SID; non possiamo utilizzare il suo SamAccountName. Il seguente esempio mostra come spostare un utente nell’OU IT:

Move-ADObject -Identity "CN=marion,CN=Users,DC=InfraSOS,DC=com" -TargetPath "OU=IT,OU=Users,DC=InfraSOS,DC=com"

Usa la sintassi esatta per spostare gli oggetti computer. Ad esempio, il seguente comando trasferirà il computer DESKTOP-01 nel contenitore Computer:

Move-ADObject -Identity "CN=DESKTOP-01,OU=Computers,DC=InfraSOS,DC=com" -TargetPath "CN=Workstations,DC=InfraSOS,DC=com"

Sposta in massa computer e utenti AD in un’altra OU

Se abbiamo un elenco predefinito di oggetti da spostare, possiamo salvarlo come file di testo e quindi importarlo in Active Directory. Prepara il tuo elenco aggiungendo un oggetto AD per riga. Il file di testo contenente l’elenco dovrebbe essere simile a questo:

Usa questo script PowerShell per spostare gli account utente AD elencati in un file di testo:

$destOU =  "OU=Users,OU=IT,DC=InfraSOS,DC=com"
$usersList = Get-Content -Path "C:\temp\users.txt"

$usersList  | ForEach-Object {
     $userName  = (Get-ADUser -Identity $_.Name).distinguishedName
     Move-ADObject  -Identity $userName  -TargetPath $destOU
 }

Per spostare gli account computer AD elencati in un file di testo, usa il seguente script PowerShell:

$computers = Get-Content -Path "C:\Temp\Computers.txt"

$destOU =  "OU=Computers,OU=IT,DC=InfraSOS,DC=com"
ForEach( $computer in $computers){
    Get-ADComputer $computer |
    Move-ADObject -TargetPath $destOU
}

Rimuovere un’OU da Active Directory con PowerShell

Il Remove-ADOrganizationalUnit cmdlet rimuove un’OU. Tuttavia, non dobbiamo proteggere l’OU da una rimozione accidentale. Utilizzando il Get-ADOrganizationalUnit e Set-ADOrganizationalUnit cmdlet, possiamo rimuovere l’opzione di eliminazione inaspettata per ogni OU con la parola Zones nel suo nome:

Get-ADOrganizationalUnit -filter "Name -eq 'Zones'" | Set-ADOrganizationalUnit  -ProtectedFromAccidentalDeletion $False

Utilizzare il seguente cmdlet per rimuovere ogni OU che contiene Zones nel suo nome da AD:

Get-ADOrganizationalUnit -filter "Name -eq 'Zones'" | Remove-ADOrganizationalUnit –Recursive

Il sistema ci chiederà di confermare la cancellazione:

Nota che il -Recursive parametro rimuove sia l’OU che tutti i suoi oggetti figlio. AD eliminerà gli oggetti figlio anche se è attiva la protezione dall’eliminazione per loro.

Gestione delle Unità Organizzative in AD

Ora che abbiamo discusso dei comandi e dei parametri di base relativi alle Unità Organizzative, discuteremo ulteriormente come possiamo generare report OU con PowerShell.

Ottenere un elenco di tutte le UO con PowerShell

Useremo il Get-ADOrganizationalUnit cmdlet. Innanzitutto, ordina per CanonicalName. Questo comando visualizza una struttura OU più facile da leggere.

Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
Format-Table CanonicalName, DistinguishedName

Di seguito è riportato un esempio output in PowerShell quando eseguiamo il comando:

L’output con tutte le UO in AD è un elenco eccellente. Ma come facciamo a sapere se la UO contiene utenti?

Ottenere un elenco di tutte le OU, compreso il conteggio utenti, con PowerShell

Ci piace utilizzare PowerShell per ottenere un elenco delle OU, compreso il conteggio utenti. Questo comando ci dirà se ci sono utenti nell’OU.

Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
ForEach-Object {
    [pscustomobject]@{
        Name          = Split-Path $_.CanonicalName -Leaf
        CanonicalName = $_.CanonicalName
        UserCount     = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
    }
}

Mostrerà l’output con la proprietà della colonna UserCount. Se il valore della proprietà UserCount è zero, l’OU non contiene utenti. Non apparirà se l’OU contiene un oggetto computer. Questo comando controllerà e mostrerà solo il conteggio utenti.

Esporta OU in AD in un file CSV con PowerShell

Vogliamo ora esportare l’elenco delle OU in AD. Quindi, lo script utilizzerà PowerShell per ottenere le Unità Organizzative e esportarle in un file di testo.

$results = Get-ADOrganizationalUnit -Properties CanonicalName -Filter * | Sort-Object CanonicalName |
ForEach-Object {
    [pscustomobject]@{
        Name          = Split-Path $_.CanonicalName -Leaf
        CanonicalName = $_.CanonicalName
        UserCount     = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
    }
}
$results | Out-File C:\export_OUs.txt -Encoding UTF8

Se vogliamo esportare in un file CSV, cambiamo l’ultima riga con il seguente comando:

$results | Export-Csv -Path C:\export_OUs.csv -NoTypeInformation -Encoding UTF8

Trova il file esportato nella specificata posizione dopo aver eseguito il comando sopra.

Grazie per aver letto “Creare rapporti OU attivi di Active Directory con PowerShell”. Concluderemo ora.

Conclusione di “Creare rapporti OU attivi di Active Directory con PowerShell”

Ora che abbiamo imparato come gestire le OU in Active Directory utilizzando script PowerShell, possiamo automatizzare varie operazioni correlate alla gestione delle OU e generare rapporti di conseguenza. Assicurarsi di abilitare la funzionalità Cestino di Active Directory prima di provare questi comandi, per poter annullare facilmente eventuali eliminazioni errate. È anche consigliabile tenere traccia attentamente di tutte le modifiche alle unità organizzative della propria organizzazione.

Dai un’occhiata ai nostri contenuti PowerShell nel nostro blog qui.

Source:
https://infrasos.com/create-active-directory-ou-reports-with-powershell/