Share via


Sobrecarga em PowerShell

Durante um workshop de PowerShell um aluno fez a seguinte pergunta: "Legal, você mostrou que o PowerShell é orientado à objetos, mas eu não vi nenhuma sobrecarga de métodos. Existe isso em PowerShell?"

Essa foi uma excelente pergunta, para mais detalhes sobre objetos no PoweShell consulte o artigo PowerShell | Objects.

A resposta é que existe uma maneira de fazer isso. Vamos imaginar que eu deseje criar uma função que sobreescreva o cmdlet Get-Process. O retorno padrão desse comando seria algo parecido com o a seguir:

 

 

Para sobrecarregar esse cmdlet, basta criar a seguinte função:

function Get-Process()

{

    Write-Host "Esse é um exemplo de sobrecarga de função em powershell" -ForegroundColor Green

    Microsoft.PowerShell.Management\Get-Process | ft id, name,
                                                     @{n="Virtual Memory (MB)";e={[Math]::Round($_.VM/1mb, 2)}},
                                                     @{n="Private Bytes (MB)";e={[Math]::Round($_.PrivateMemorySize/1mb, 2)}},
                                                     @{n="Working Set (MB)";e={[Math]::Round($_.WorkingSet/1mb, 2)}}

}

Observe que a função possui o mesmo nome do cmdlet Get-Process com a diferença que para executar o Get-Process original o namespace do mesmo foi utilizado para evitar uma recursividade.

O código da função retorna uma mensagem e formata o retorno do cmdlet Get-Process onde apenas 4 propriedades são retornadas com o valor em Megabytes. O resultado da execução da função sobrecarregada nesse caso é:

 

 

Espero que tenham gostado. Até a próxima.