Gerenciar sistemas pode parecer como equilibrar muitas bolas ao mesmo tempo. Em um minuto, você está resolvendo um problema de armazenamento; no próximo, está procurando especificações do processador ou verificando a capacidade de memória. Fazer isso manualmente não é apenas tedioso, mas propenso a erros. Se você está preso nesse ciclo, é hora de parar com a loucura. A automação é a sua resposta!
Neste guia, você aprenderá como construir funções do PowerShell para que possa otimizar seus fluxos de trabalho e focar no que realmente importa.
Aproveite um conjunto de scripts poderosos em seu kit de ferramentas, economizando tempo e ajudando você a operar como um profissional!
Construindo Funções para Extrair Informações
À medida que avançamos no módulo, vamos preencher a propriedade Info
com informações de hardware usando o cmdlet Get-CimInstance
. Essa abordagem nos permite padronizar e reutilizar o código de forma eficaz.
As seguintes funções coletam informações de memória, armazenamento e processador de uma sessão 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 }
Transformando a Saída
Os dados brutos obtidos de consultas de sistema frequentemente incluem mais detalhes do que o necessário, tornando-se difícil de interpretar. Essa situação pode levar a ineficiências ao focar em atributos específicos e acionáveis.
Para padronizar os dados, você pode transformar a saída de Get-CimInstance
em um objeto personalizado.
Aqui está uma versão atualizada:
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 }
Manuseando Valores de Bytes
As informações de hardware frequentemente incluem valores numéricos como capacidade de memória ou armazenamento em bytes. Embora tecnicamente precisos, esses valores poderiam ser mais práticos para uma interpretação rápida. Convertê-los para gigabytes fornece uma compreensão mais intuitiva das métricas de hardware.
Para uma melhor legibilidade, a função auxiliar ConvertTo-Gb
torna esse processo eficiente:
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 }
Esta abordagem melhora a funcionalidade e legibilidade dos dados retornados por essas funções. Atualizações futuras ou alterações se tornam mais gerenciáveis centralizando a lógica repetitiva em funções auxiliares como ConvertTo-Gb
.
Conclusão
Você aprendeu como criar funções do PowerShell usando os passos descritos neste guia. Seja para reunir informações de hardware de sistemas remotos, transformar saídas brutas em objetos personalizados estruturados ou tornar os dados mais legíveis.
Agora que você dominou essas técnicas, considere como pode expandir essa base. Por exemplo, você poderia adicionar mais categorias de hardware ao seu módulo, como adaptadores de rede ou informações de GPU. Você também pode integrar essas funções em fluxos de trabalho de automação maiores, como monitoramento de saúde do sistema ou gerenciamento de inventário.
As possibilidades são infinitas, e você está bem encaminhado para construir um conjunto de ferramentas robusto para gerenciar seus sistemas com confiança.
Source:
https://adamtheautomator.com/powershell-functions-module/