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 você possa otimizar seus fluxos de trabalho e focar no que realmente importa.
Aproveite um conjunto de scripts poderosos em sua caixa de ferramentas, economizando tempo e ajudando você a operar como um profissional!
Construindo Funções para Extrair Informações
Conforme 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 reúnem 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 ao sistema frequentemente incluem mais detalhes do que o necessário, tornando a interpretação difícil. Essa situação pode levar a ineficiências ao se concentrar em atributos específicos e acionáveis.
Para padronizar os dados, você pode transformar a saída do 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 podem 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 }
Essa abordagem melhora a funcionalidade e a legibilidade dos dados retornados por essas funções. Atualizações futuras ou alterações se tornam mais gerenciáveis ao centralizar 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 coletando informações de hardware de sistemas remotos, transformando saídas brutas em objetos customizados estruturados, ou tornando os dados mais legíveis.
Agora que 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/