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.