Gestire i sistemi può sembrare come giocare a fare jongleur con troppe palle contemporaneamente. Un minuto stai risolvendo un problema di archiviazione; il minuto dopo stai cercando le specifiche del processore o controllando la capacità della memoria. Fare tutto ciò manualmente non è solo tedioso ma soggetto a errori. Se sei bloccato in questo ciclo, è tempo di fermare la follia. L’automazione è la tua risposta!
In questa guida, imparerai come costruire funzioni PowerShell in modo da poter ottimizzare i tuoi flussi di lavoro e concentrarti su ciò che conta davvero.
Goditi un set di script potenti nel tuo kit, risparmiando tempo e aiutandoti a operare come un professionista!
Costruzione di Funzioni per l’Estrazione di Informazioni
Mentre sviluppiamo il modulo, popoleremo la proprietà Info
con informazioni hardware utilizzando il cmdlet Get-CimInstance
. Questo approccio ci consente di standardizzare e riutilizzare efficacemente il codice.
Le seguenti funzioni raccolgono informazioni sulla memoria, lo storage e il processore da una sessione remota:
function Get-MemoryInfo { [CmdletBinding()] param( [Parameter(Mandatory)] [System.Management.Automation.Runspaces.PSSession]$Session ) $outObject = @{ 'ComputerName' = $Session.ComputerName 'HardwareCategory' = 'Memory' 'Info' = $null } $scriptBlock = { Get-CimInstance -ClassName Win32_PhysicalMemory } $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock $outObject['Info'] = $result [pscustomobject]$outObject } function Get-StorageInfo { [CmdletBinding()] param( [Parameter(Mandatory)] [System.Management.Automation.Runspaces.PSSession]$Session ) $outObject = @{ 'ComputerName' = $Session.ComputerName 'HardwareCategory' = 'Storage' 'Info' = $null } $scriptBlock = { Get-CimInstance -ClassName Win32_LogicalDisk } $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock $outObject['Info'] = $result [pscustomobject]$outObject } function Get-ProcessorInfo { [CmdletBinding()] param( [Parameter(Mandatory)] [System.Management.Automation.Runspaces.PSSession]$Session ) $outObject = @{ 'ComputerName' = $Session.ComputerName 'HardwareCategory' = 'Processor' 'Info' = $null } $scriptBlock = { Get-CimInstance -ClassName Win32_LogicalDisk } $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock $outObject['Info'] = $result [pscustomobject]$outObject }
Trasformazione dell’Output
I dati grezzi recuperati dalle query di sistema spesso includono più dettagli del necessario, rendendoli difficili da interpretare. Questa situazione può portare a inefficienze quando ci si concentra su attributi specifici e azionabili.
Per standardizzare i dati, puoi trasformare l’output da Get-CimInstance
in un oggetto personalizzato.
Ecco una versione aggiornata:
function Get-MemoryInfo { [CmdletBinding()] param( [Parameter(Mandatory)] [System.Management.Automation.Runspaces.PSSession]$Session ) $outObject = @{ 'ComputerName' = $Session.ComputerName 'HardwareCategory' = 'Memory' 'Info' = $null } $scriptBlock = { Get-CimInstance -ClassName Win32_PhysicalMemory } $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock $info = $result | ForEach-Object { [pscustomobject]@{ 'LocatorId' = $_.DeviceLocator 'Capacity' = $_.Capacity } } $outObject['Info'] = $info [pscustomobject]$outObject } function Get-StorageInfo { [CmdletBinding()] param( [Parameter(Mandatory)] [System.Management.Automation.Runspaces.PSSession]$Session ) $outObject = @{ 'ComputerName' = $Session.ComputerName 'HardwareCategory' = 'Storage' 'Info' = $null } $scriptBlock = { Get-CimInstance -ClassName Win32_LogicalDisk } $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock $info = $result | ForEach-Object { [pscustomobject]@{ 'VolumeName' = $_.VolumeName 'VolumeLetter' = $_.DeviceId 'VolumeCapacity' = $_.Size 'VolumeFreeSpace' = $_.FreeSpace } } $outObject['Info'] = $info [pscustomobject]$outObject }
Gestione dei Valori in Byte
Le informazioni sull’hardware includono spesso valori numerici come la capacità di memoria o di archiviazione in byte. Anche se tecnicamente corretti, questi valori potrebbero essere più pratici per un’interpretazione rapida. Convertirli in gigabyte fornisce una comprensione più intuitiva delle metriche hardware.
Per una migliore leggibilità, la funzione di supporto Converti-In-Gb
rende questo processo efficiente:
function ConvertTo-Gb { [CmdletBinding()] param( [Parameter(Mandatory)] [string]$Bytes ) $numberGb = $Bytes / 1GB [math]::Round($numberGb, 2) } function Get-MemoryInfo { [CmdletBinding()] param( [Parameter(Mandatory)] [System.Management.Automation.Runspaces.PSSession]$Session ) $outObject = @{ 'ComputerName' = $Session.ComputerName 'HardwareCategory' = 'Memory' 'Info' = $null } $scriptBlock = { Get-CimInstance -ClassName Win32_PhysicalMemory } $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock $info = $result | ForEach-Object { [pscustomobject]@{ 'LocatorId' = $_.DeviceLocator 'Capacity' = (ConvertTo-Gb -Bytes $_.Capacity) } } $outObject['Info'] = $info [pscustomobject]$outObject }
Questo approccio migliora la funzionalità e la leggibilità dei dati restituiti da queste funzioni. Gli aggiornamenti futuri o le modifiche diventano più gestibili centralizzando la logica ripetitiva in funzioni di supporto come Converti-In-Gb
.
Conclusione
Hai imparato come creare funzioni PowerShell seguendo i passaggi descritti in questa guida. Che si tratti di raccogliere informazioni sull’hardware da sistemi remoti, trasformare output grezzi in oggetti personalizzati strutturati o rendere i dati più leggibili.
Ora che hai padroneggiato queste tecniche, considera come puoi ampliare questa base. Ad esempio, potresti aggiungere ulteriori categorie di hardware al tuo modulo, come adattatori di rete o informazioni sulla GPU. Potresti anche integrare queste funzioni in flussi di lavoro di automazione più ampi, come il monitoraggio dello stato di sistema o la gestione dell’inventario.
Le possibilità sono infinite e sei sulla buona strada per costruire un set di strumenti robusto per gestire con sicurezza i tuoi sistemi.
Source:
https://adamtheautomator.com/powershell-functions-module/