Crea Report di Computer di Active Directory con PowerShell

Crea rapporti sui computer di Active Directory con PowerShell. Per trovare qualsiasi informazione relativa agli oggetti computer di Active Directory (AD) e alle loro proprietà, utilizzeremo principalmente il cmdlet Get-ADComputer. Ad esempio, in un dominio di Active Directory, possiamo utilizzare il cmdlet Get-ADComputer PowerShell per ottenere informazioni sugli oggetti account computer (server e workstation). Questo cmdlet è uno dei più utili per la ricerca dei computer AD mediante vari criteri.

Questo articolo discute i molteplici utilizzi del cmdlet Get-ADComputer e come possiamo trasformarlo in un rapporto completo e prezioso.

Iniziamo con l’articolo blog Crea rapporti sui computer di Active Directory con PowerShell.

Crea report computer di Active Directory con Powershell

Prerequisiti

Se desideri seguire gli script di esempio in questo articolo, assicurati di avere quanto segue:

Bene, come creare report di computer Active Directory con PowerShell? Scopriamolo.

Comprendere il comando Get-ADComputer di Powershell

Prima di iniziare, dovremmo familiarizzare con ilGet-ADComputer comando. Non abbiamo bisogno di privilegi di amministratore di dominio per ottenere informazioni dalActive Directory. Utilizzare un account utente regolare membro delDomain Users oAuthenticated Users gruppo è sufficiente.

Bene, il Get-Help comando, come al solito, fornisce un elenco di tutti gli altri parametri per il Get-ADComputer cmdlet:

$command = Get-ADComputer
Get-Help $command

Output di esempio:

In alternativa, possiamo accedere alla documentazione ufficiale del comando Get-ADComputer qui.

Dopo aver scorso l’elenco lungo dei parametri nella nostra riga di comando e nella documentazione, possiamo iniziare a scrivere script. Ricorda, il parametro più cruciale che accompagna il Get-ADComputer comando è il parametro Identity .

Per ottenere informazioni su un computer specifico nel dominio, utilizza il parametro -Identity con il suo nome come argomento:

Get-ADComputer -Identity DC01

Ecco un esempio di output:

DistinguishedName : CN=DC01,OU=Servers,OU=DC,OU=IT,DC=infrasos,DC=com
DNSHostName       : DC01.infrasos.com
Enabled           : True
Name              : DC01
ObjectClass       : computer
ObjectGUID        : 87654321-1204-5578-0000-123462341264
SamAccountName    : DC01
SID               : S-1-5-21-123656780-1234667890-0986654321-1264

Come risultato, il cmdlet Get-ADComputer ha restituito solo le proprietà fondamentali dell’oggetto Computer da AD. Tuttavia, l’esecuzione del comando sopra fornirà solo le informazioni di alto livello sull’oggetto computer. Quindi, se vogliamo approfondire e visualizzare le proprietà disponibili dell’oggetto, possiamo utilizzare il parametro -Properties.

Per elencare tutte le proprietà dell’oggetto, aggiungi il parametro -Properties e aggiungi un valore di asterisco (*). Il valore asterisco è il valore jolly che indica TUTTO:

Get-ADComputer -Identity DC01 -Properties *

Esempio di output:

D’altro canto, possiamo navigare all’interno della console degli Utenti e dei Computer di Active Directory (o dsa.msc) e visualizzare le proprietà da lì. Infine, selezionare un oggetto computer e navigare sulla scheda Editor attributi per visualizzare l’elenco delle proprietà dell’oggetto computer.

Filtraggio dei risultati di Get-ADComputer

Un lato negativo è che potremmo visualizzare più informazioni su cose di cui non abbiamo necessariamente bisogno. Utilizzando il pipeline PowerShell, il cmdlet Get-ADComputer ci permette di visualizzare proprietà specifiche del computer nella riga di comando. Ad esempio, possiamo lasciare solo i valori delle proprietà Name e LastLogonDate nell’output collegando il comando Format-Table alla sintassi principale:

Get-ADComputer -Identity DC01 -Properties * | Format-Table Name, LastLogonDate -Autosize

Output di esempio:

Qui, Windows PowerShell calcola le larghezze delle colonne in base ai dati effettivamente visualizzati se specifichiamo il parametro AutoSize quando eseguiamo il comando Format-Table. Tutto sommato, questo parametro rende le colonne leggibili.

Tuttavia, il comando precedente cerca solo un singolo oggetto computer AD. Pertanto, se volessimo informazioni su tutti i computer nel dominio, possiamo sostituire il parametro Identity con Filter:

Get-ADComputer -Filter * -Properties * | Format-Table Name, Created -Autosize

Vedi l’output di esempio:

Abbiamo ottenuto una tabella formattata semplice contenente solo due campi: il nome del computer e la data di creazione dell’oggetto. Possiamo aggiungere altre colonne dell’oggetto Computer da AD a questa tabella aggiungendo proprietà nella sezione Format-Table del flusso di lavoro.

Fondamentalmente, per ottenere informazioni sugli oggetti computer in una determinata Unità Organizzativa (OU), possiamo utilizzare il parametro–SearchBase:

Get-ADComputer -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Filter * -Properties * | Format-Table Name, Created -Autosize

Inoltre, possiamo anche ordinare i risultati della query inserendo il Sort-Object cmdlet nel pipeline:

Get-ADComputer -Filter * -Properties * | Sort-Object Created | Format-Table Name, Created -Autosize

Nel comando precedente, il comando Sort-Object ordina i risultati del Get-ADComputer prima per Created e poi li passa a Format-Table per la visualizzazione.

Utilizzo di filtri di ricerca con Get-ADComputer

Usiamo l’argomento Get-ADComputer del cmdlet -Filter per cercare più computer AD in base a criteri specifici. Come notato, in questo caso possiamo usare caratteri jolly e operatori di confronto logico. Certamente, come filtri, possiamo utilizzare solo attributi primari dell’oggetto computer.

Allo stesso modo, utilizziamo il pipe Where-Object se abbiamo bisogno di utilizzare filtri di ricerca su attributi estesi di computer. Di seguito sono riportati esempi più pratici di come interrogare e cercare oggetti computer nel dominio utilizzando il cmdlet Get-ADComputer .

Ottenere il numero totale di tutti i computer attivi e non bloccati in Active Directory:

Cerchiamo computer utilizzando più filtri contemporaneamente. Utilizzare gli operatori di confronto logici di PowerShell per realizzare questo.

(Get-ADComputer -Filter {Enabled -eq "true"}).Count

Visualizza tutti gli host Windows Server nel dominio AD:

Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*' }

Ottieni un elenco di tutti i computer in un determinato OU il cui nome inizia con DC:

Get-ADComputer -Filter {Name -like "DC*"} -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Properties * | Format-Table Name

Quando si cerca nell’OU, possiamo utilizzare il parametro–SearchScope1 per limitare la nostra ricerca solo alla radice OU. L’opzione -SearchScope2 esegue una ricerca ricorsiva per i computer in tutti gli OU.

Gestione di più computer con Get-ADComputer

Dobbiamo utilizzare il ciclo Foreach-Object per eseguire un’azione specifica su tutti i computer nell’elenco risultante. In questo esempio, possiamo interrogare più computer AD in remoto utilizzando Windows Management Instrumentation o Common Information Classes:

Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Foreach-Object {
    Get-CimInstance Win32_Bios -ComputerName $_.Name -ErrorAction SilentlyContinue |
    Select-Object PSComputerName
}

Evidentemente, in questo esempio, se vogliamo un elenco di host Windows Server nel dominio, insieme ai loro modello e produttore, utilizziamo lo stesso metodo di iterazione e recuperiamo le proprietà del computer.

$Computers = Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*'}
Foreach ($Computer in $Computers){
    $Hostname = $Computer.Name
    $ComputerInfo = (Get-WmiObject -Computername $Hostname Win32_ComputerSystem)
    $Manufacturer = $Computer.Manufacturer
    $Model = $Computer.Model
    Write-Output "Name: $Hostname"
    Write-Output "Manufacturer: $Manufacturer"
    Write-Output "Model: $Model"
    Write-Output " "
}

Quindi, le informazioni recuperate dagli esempi precedenti sono disponibili facilmente attraverso i servizi del dominio poiché questi computer fanno parte di AD. Tuttavia, non tutti i computer pubblicano le loro proprietà al dominio. Come possiamo recuperarle?

Successivamente, facciamo uso del Invoke-CommandQuindi, questo cmdlet PowerShell esegue comandi locali sul computer remoto. Ad esempio, supponiamo di dover eseguire un comando specifico su tutti i computer in una determinata OU. In questo esempio, utilizziamo Invoke-Command per eseguire un comando di aggiornamento group policy su tutti i server:

Get-ADComputer -SearchBase "OU=DC,DC=infrasos,DC=com" -Filter * |
%{ Invoke-Command -Computer $_.Name -ScriptBlock { gpupdate /force } }

Genera report AD PowerShell con Get-ADComputer

In Windows PowerShell, esportiamo l’output dei nostri comandi in diversi formati report. Ecco alcuni esempi di seguito.

Prima di tutto, esportiamo il risultato del comando Get-ADComputer in un file di testo:

Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2019*' } -Properties * |
Select Name, OperatingSystem |
Format-Table -AutoSize C:\Temp\2019_servers.txt

In secondo luogo, otteniamo anche un elenco di tutti i computer ed esportiamolo in un file valori separati da virgola(CSV):

Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Export-CSV All-Computers.csv -NoTypeInformation

Terzo, possiamo anche esportare il nostro report e ottenere un formato di pagina web HTML con un elenco di tutti i computer e proprietà essenziali:

Get-ADComputer -Filter * -Properties * |
Select-Object Name,OperatingSystem |
ConvertTo-Html |
Out-File C:\ps\ad_all_computers.html

Dovrebbe apparire qualcosa del genere:

Grazie per aver letto Creare report di computer Active Directory con PowerShell. Concluderemo.

Creare report di computer Active Directory utilizzando Powershell Conclusione

In questo articolo, abbiamo discusso il comando Get-ADComputer in modo esaustivo. Abbiamo imparato che con questo comando, possiamo ottenere un elenco dettagliato di proprietà e informazioni per una determinata macchina. Inoltre, con un elenco esaustivo, abbiamo imparato come filtrare queste proprietà solo per recuperare solo le informazioni di cui abbiamo bisogno.

In sintesi, abbiamo imparato anche come trasformare una query cmdlet in un comando più utile che possiamo utilizzare per passare comandi in remoto. Infine, ora possiamo generare il nostro rapporto in vari formati con tutte queste informazioni acquisite.

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