Het beheren van systemen kan aanvoelen als het jongleren met te veel ballen tegelijk. Het ene moment los je een opslagprobleem op; het volgende moment ben je op zoek naar processor specificaties of controleer je de geheugencapaciteit. Dit handmatig doen is niet alleen tijdrovend maar ook vatbaar voor fouten. Als je vastzit in deze cyclus, is het tijd om de waanzin te stoppen. Automatisering is jouw antwoord!
In deze gids leer je hoe je PowerShell-functies kunt bouwen, zodat je je workflows kunt stroomlijnen en je kunt focussen op wat er echt toe doet.
Geniet van een set krachtige scripts in je gereedschapskist, waardoor je tijd bespaart en je kunt werken als een professional!
Het bouwen van Functies voor het Extraheren van Informatie
Terwijl we voortbouwen op de module, zullen we de Info
eigenschap vullen met hardware-informatie met behulp van de Get-CimInstance
cmdlet. Deze aanpak stelt ons in staat om code effectief te standaardiseren en hergebruiken.
De volgende functies verzamelen geheugen-, opslag- en processorinformatie van een externe sessie:
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 }
Transformeren van Uitvoer
De ruwe gegevens die zijn opgehaald uit systeemquery’s bevatten vaak meer details dan nodig, waardoor het moeilijk te interpreteren is. Deze situatie kan leiden tot inefficiënties bij het focussen op specifieke, uitvoerbare attributen.
Om de gegevens te standaardiseren, kun je de uitvoer van Get-CimInstance
transformeren in een aangepast object.
Hier is een bijgewerkte versie:
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 }
Omgaan met Byte Waarden
Hardware-informatie bevat vaak numerieke waarden zoals geheugen- of opslagcapaciteit in bytes. Hoewel technisch correct, kunnen deze waarden praktischer zijn voor snelle interpretatie. Het omzetten ervan naar gigabytes biedt een intuïtiever begrip van hardware-metrics.
Voor een betere leesbaarheid maakt de hulpfunctie ConvertTo-Gb
dit proces efficiënt:
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 }
Deze aanpak verbetert de functionaliteit en leesbaarheid van de gegevens die door deze functies worden geretourneerd. Toekomstige updates of wijzigingen worden beheersbaarder door repetitieve logica te centraliseren in hulpfuncties zoals ConvertTo-Gb
.
Conclusie
Je hebt geleerd hoe je PowerShell-functies kunt maken met de stappen die in deze handleiding zijn uiteengezet. Of het nu gaat om het verzamelen van hardware-informatie van externe systemen, het transformeren van ruwe uitvoer naar gestructureerde aangepaste objecten, of het maken van gegevens leesbaarder.
Nu je deze technieken onder de knie hebt, overweeg hoe je hierop verder kunt bouwen. Je zou bijvoorbeeld meer hardwarecategorieën aan je module kunnen toevoegen, zoals netwerkadapters of GPU-informatie. Je kunt deze functies ook integreren in grotere automatiseringsworkflows, zoals systeemgezondheidscontrole of voorraadbeheer.
De mogelijkheden zijn eindeloos, en je bent goed op weg om een robuuste set tools te bouwen voor het zelfverzekerd beheren van je systemen.
Source:
https://adamtheautomator.com/powershell-functions-module/