Come Costruire un Server Windows Inventory Report Gratuito con PowerShell

0
190

PowerShell è utilizzato da molti amministratori di server. Naturalmente, uno dei più utilizzati compiti è la possibilità di creare script e funzioni di inventario server e capire che cosa il vostro ambiente.

Anche se ci sono molti modi per fare questo, con diversi livelli di complessità, che stiamo per costruire una cosa abbastanza semplice ma l’effetto Windows Server Report di Inventario all’interno di questo articolo.

Prerequisiti

Questo articolo sarà hands-on. Se si intende seguire, si prega di essere sicuri di avere i seguenti prerequisiti in primo luogo:

  • Lavoro in un Active Directory (AD) appartenenti a un dominio di Windows 10 per PC
  • Hanno il ActiveDirectory PowerShell modulo installato da RSAT toolkit.
  • Dispone dell’autorizzazione per eseguire una query AD account computer
  • Può eseguire da remoto WMI/CIM query su computer remoti
  • Sono PowerShell remoto i computer

Il Recupero Di Server

Fondamentale per lo script che stiamo costruendo sono gli stessi server. Si potrebbe individualmente scrivere in un file di testo che viene letto, o in un array all’interno dello script stesso, ma utilizzando PowerShell possiamo fare di meglio. Per rendere lo script più dinamico e non ci richiedono di modificare in qualsiasi momento di un nuovo server, è aggiunto, siamo in grado di utilizzare Active Directory (AD) per tirare l’elenco degli oggetti computer in una determinata unità organizzativa (OU).

Al di sotto stiamo utilizzando active directory module, disponibile in RSAT toolkit, per interrogare il Server di UO e recuperare tutti gli oggetti computer tramite Get-ADComputer.

Modulo Di Importazione ActiveDirectory

$OU = “OU=Servers,DC=dominio,DC=locale’

$Params = @{
“SearchBase” = $OU
“Filtro” = ‘*’
}

$Server = Get-ADComputer @Params

A questo punto, si potrebbe avere filtrati solo la proprietà name per popolare il server $variabile, ma spesso è molto utile per avere tutta l’oggetto restituito da utilizzare in seguito.

Determinare il i Dati da Raccogliere

Ora che abbiamo il nostro server, abbiamo bisogno di capire esattamente cosa dovremmo raccogliere da ogni server. Uno dei motivi per cui può essere importante per mantenere in pieno l’oggetto dell’ANNUNCIO è quello di combinare i dati con i dati direttamente dal server stesso, per ottenere un quadro più ampio di ambiente.

In pratica quello che si fa qualcosa di simile a questo aspetto? Vediamo di elencare alcune delle proprietà che sarebbe molto utile conoscere.

I Valori Del Server

  • Nome Host Del Server
  • Spazio Libero Su Disco
  • Memoria
  • Connessioni Di Rete

ANNUNCIO Valori

  • Ultimo Set Di Password
  • Ultimo Accesso
  • Nome Host DNS

Recupero Informazioni Del Server

Come possiamo fare raccolta di informazioni sulla nostra lista dei server? Dal momento che abbiamo un elenco di server, dobbiamo scorrere il Server $oggetto e query. Iniziando con una semplice Foreach-Object loop di seguito, siamo in grado di creare un oggetto personalizzato per tenere i nostri valori.

$Server | Foreach-Object {
[PSCustomObject]@{
“Nomehostserver” = $_.Nome
“Descrizione” = $_.Descrizione
“FreeDiskSpace” = $Null
“TotalMemory” = $Null
“NetworkConnections” = $Null
“PasswordLastSet” = $_.pwdLastSet
“LastLogon” = $_.lastLogon
“DNSHostName” = $_.DNSHostName
“CreationDate” = $_.WhenCreated
}
}

Come si può dire, salvando l’oggetto completo da Active Directory quando abbiamo recuperato il computer, ci permette di compilare una vasta gamma di informazioni. Purtroppo, questo non è tutte le informazioni di cui abbiamo bisogno.

Per ottenere le informazioni da ogni server, utilizza una interfaccia familiare a molti amministratori di server, che è la Strumentazione Gestione Windows (WMI) di interfaccia. Si può notare che il cmdlet utilizzati di seguito vengono dal CIM (Common Information Model) di interfaccia, di cui WMI è l’implementazione Microsoft di questo standard.

Ottenere lo Spazio Libero su Disco

Utilizzando WMI disponibili classe di Win32_LogicalDisk, siamo in grado di ottenere tutti i dischi disponibili e il loro spazio. Quando abbiamo eseguito il comando Get-CimInstance -ClassName Win32_LogicalDisk, si potrebbe notare che non è esattamente leggibile nel suo output predefinito.

Il secondo problema qui è che abbiamo più di una unità in fase di restituzione. Vorrei sapere su ciascuna di tali unità e quanto spazio libero è disponibile in GBs. Andiamo a modificare il codice per fare alcune trasformazioni e renderlo migliore.

$Dischi = Get-CimInstance -ClassName Win32_LogicalDisk

$DisksResult = $Dischi | Foreach-Object {
[PSCustomObject]@{
“Auto” = $_.DeviceID
“FreeSpace” = [Math]::Round(($_.FreeSpace / 1 GB),2)
}
}

$DisksResult

Dopo l’esecuzione di comandi, la nostra produzione è molto più pulito e può ora essere utilizzato nel nostro script.

Ma se volessimo, ad avviso della scarsa condizione di spazio su disco? Sarebbe bello ampliare questo solo leggermente per impostare un flag su ogni auto che soddisfa tale condizione. Confrontando lo spazio totale e lo spazio disponibile, si può vedere se è sotto il 10% o 10 GB. Il motivo per o condizione, è che i grandi dischi, 10% può ancora essere molto generoso in modo che l’impostazione di un limite assoluto aiuta.

$Dischi = Get-CimInstance -ClassName Win32_LogicalDisk

$DisksResult = $Dischi | Foreach-Object {
$FreeSpace = [Math]::Round(($_.FreeSpace / 1 GB),2)
$TotalSpace = [Math]::Round(($_.Dimensioni / 1 GB),2)

If ( ($FreeSpace / $TotalSpace -0.10 LT) -O $FreeSpace -LT 10 ) {
$LowDiskSpace = $True
} Else {
$LowDiskSpace = $False
}

[PSCustomObject]@{
“Auto” = $_.DeviceID
“FreeSpace” = $FreeSpace
“LowDiskSpace” = $LowDiskSpace
}
}

$DisksResult

Come si può dire ora, abbiamo una grande serie di informazioni per essere salvati con i nostri server.

Come%20to%20Build%20a%20Windows%20Server%20Inventory%20Report%20for/Untitled%202.png

Ottenere la quantità di Memoria Disponibile

È utile per conoscere la quantità di RAM allocata per ogni server, soprattutto in un ambiente di macchina virtuale. Se si scopre che alcuni sono dotati la possibilità di risparmiare risorse da destra-il dimensionamento del server. Per fortuna, questo è molto più facile da recuperare.

Utilizzando il Win32_PhysicalMemory classe WMI, possiamo somma di tutti i restituiti Capacità di proprietà per ottenere il totale di memoria.

(Get-CimInstance -ClassName Win32_PhysicalMemory | Misura-Oggetto -Proprietà Capacità Di -Somma).Somma / 1GB

Ricevi Tutte le Connessioni di Rete

Infine, abbiamo bisogno di recuperare tutte le connessioni di rete. Questo è utile per sapere se un determinato server dispone di più interfacce di essere preoccupati. Utilizzando un leggermente diverso meccanismo di questo tempo, stiamo usando il Get-NetAdapter cmdlet, ma dato che questo non si dispone di un parametro ComputerName, useremo PS Remoting per richiamare questo locale sul server di destinazione e di restituire i risultati del nostro script.

$NetworkConnections = -ComputerName Comando Richiamare $_.DnsHostName -ScriptBlock {
Get-NetAdapter -Fisica | Select-Object Nome, Stato, LinkSpeed
}

Il nostro risultato sarà simile a quello qui sotto e possiamo quindi salvare il nostro script.

Tenete a mente che per Richiamare il Comando per il lavoro, PS Remoting sarà necessario impostare il server di destinazione.

Mettere Tutto Insieme

Ora che abbiamo tutti i pezzi, proviamo a mettere insieme tutto questo. Lo script finale è di seguito e combina il codice per creare un output personalizzato oggetto con proprio quello che ci vuole per il rapporto.

Modulo Di Importazione ActiveDirectory

$OU = “OU=Servers,DC=dominio,DC=locale’

$Params = @{
“SearchBase” = $OU
“Filtro” = ‘*’
}

$Server = Get-ADComputer @Params

$Server | Foreach-Object {
$Dischi = Get-CimInstance -ComputerName $_.DnsHostName -ClassName Win32_LogicalDisk

$DisksResult = $Dischi | Foreach-Object {
[PSCustomObject]@{
“Auto” = $_.DeviceID
“FreeSpace” = [Math]::Round(($_.FreeSpace / 1 GB),2)
}
}

$NetworkConnections = -ComputerName Comando Richiamare $_.DnsHostName -ScriptBlock {
Get-NetAdapter -Fisica | Select-Object Nome, Stato, LinkSpeed
}

[PSCustomObject]@{
“Nomehostserver” = $_.Nome
“Descrizione” = $_.Descrizione
“FreeDiskSpace” = $DisksResult
“TotalMemory” = ((Get-CimInstance -ComputerName $_.DnsHostName -ClassName Win32_PhysicalMemory | Misura-Oggetto -Proprietà Capacità Di -Somma).Somma / 1GB)
“NetworkConnections” = $NetworkConnections
“PasswordLastSet” = $_.pwdLastSet
“LastLogon” = $_.lastLogon
“DNSHostName” = $_.DNSHostName
“CreationDate” = $_.WhenCreated
}
}

Conclusione

Quello che abbiamo dimostrato qui è solo la punta di un iceberg in termini di ciò che può essere costruito per un rapporto di inventario. Ci sono molte altre proprietà utili che è possibile aggiungere a questa relazione. L’assunzione di questo ulteriore, si potrebbe costruire una pagina HTML, la programmazione delle attività per l’esecuzione di questa settimana, o anche di avvolgere in altri strumenti come Ansible.

PowerShell rende banalmente facile per ottenere tutte le informazioni di cui hai bisogno per mettere insieme in un unico luogo. Una volta che si analizza l’ambiente e determinare che cosa avete bisogno di conoscere, di costruire il report in PowerShell per aiutare a prova di futuro, la vostra capacità di controllare l’ambiente.