Muitas pessoas gostam de usar o PowerShell porque ele permite fazer coisas que não podem ser feitas com a GUI do Windows. Mesmo assim, não há como negar que alguns cmdlets do PowerShell podem ser um pouco tediosos ou complicados. Mas e se houvesse uma maneira de editar esses cmdlets e fazê-los “se comportar” da maneira que você deseja? Acredite ou não, existe uma maneira fácil de fazer isso. Você pode alterar o comportamento do cmdlet modificando os valores dos parâmetros padrão do PowerShell. Este artigo mostrará como usar os parâmetros padrão do PowerShell para alterar o comportamento do comando cmdlet.
Aviso
Antes de começar, há algumas coisas que você precisa ter em mente. Embora seja conveniente alterar os parâmetros padrão do PowerShell e o comportamento do cmdelt, isso pode causar problemas. Se você executar um script e esse script assumir que o cmdlet modificado se comportará de uma determinada maneira, você poderá obter resultados imprevisíveis. Portanto, você deve alterar cuidadosamente os parâmetros padrão do PowerShell.
Revisão rápida
Existem dois conceitos do PowerShell com os quais você precisa estar familiarizado para trabalhar com parâmetros padrão. O primeiro conceito é variável. No PowerShell, os nomes das variáveis sempre começam com um cifrão e você pode escrever o conteúdo de uma variável digitando o nome da variável.
O segundo conceito com o qual você deve estar familiarizado é a tabela hash. Uma tabela hash é essencialmente uma lista composta de pares chave/valor. Por exemplo, suponha que você queira criar uma tabela hash contendo os nomes dos estados dos EUA e suas abreviações. Abaixo está o código:
$StateList = @{}
$StateList.add('Flórida','FL')
$StateList.add('Carolina do Sul','SC')
$StateList.add('Geórgia','GA')
$StateList
A primeira linha de código cria uma tabela hash vazia chamada $StateList . As próximas três linhas adicionam entradas à tabela. Cada entrada é composta por uma chave (nome do estado) e um valor (abreviatura do estado). A última linha lista o conteúdo da tabela. Você pode ver o código em ação na imagem abaixo.
Este é apenas um exemplo muito simples e existem muitas outras maneiras de usar tabelas hash.
Trabalhar com parâmetros padrão do PowerShell
O PowerShell possui uma variável interna usada para armazenar parâmetros padrão usados com seus cmdlets. Esta variável é chamada $PSDefaultParameterValues . Como você deve ter notado pela introdução inicial e pelo nome da variável, esta não é uma variável comum, mas uma tabela hash. No entanto, se você inserir o nome da variável no PowerShell, verá rapidamente que a tabela está vazia, conforme mostrado abaixo.

Então, o que podemos fazer com esta variável $PSDefaultParameterValues . Conforme mencionado acima, você pode controlar o comportamento dos cmdlets do PowerShell. A única questão é que você não pode superar os recursos inerentes do comando cmdlet. Então, vejamos um exemplo.
Este exemplo pode não ser algo que você queira usar na vida real, mas mostrará como é fácil alterar radicalmente o comportamento do cmdlet. Se você inserir o cmdlet Get-TimeZone no PowerShell, verá o nome do fuso horário que seu PC está configurado para usar no momento. Você pode ver este exemplo na imagem abaixo.
![Como usar os parâmetros padrão do PowerShell para alterar o comportamento do comando Como usar os parâmetros padrão do PowerShell para alterar o comportamento do comando]()
Agora alteramos este cmdlet para que ele não exiba o fuso horário que o sistema está configurado para usar, mas sim os fusos horários disponíveis. Para fazer isso, precisamos da sintaxe do cmdlet usando o cmdlet Get-Help seguido pelo cmdlet Get-TimeZone . Você pode ver a sintaxe do cmdlet abaixo.
![Como usar os parâmetros padrão do PowerShell para alterar o comportamento do comando Como usar os parâmetros padrão do PowerShell para alterar o comportamento do comando]()
Esta sintaxe inclui um parâmetro chamado ListAvailable . Digite o comando abaixo:
$PSDefaultParameterValues.Add(“Get-TimeZone:ListAvailable”,$True)
A primeira parte deste comando simplesmente informa ao PowerShell que você deseja adicionar um valor à tabela hash, assim como fizemos com o exemplo de abreviatura do estado dos EUA na seção anterior. Esta tabela hash contém um par chave/valor. Neste caso a chave é o nome do cmdlet (Get-TimeZone) seguido de uma vírgula e o nome do parâmetro que você deseja definir. Neste caso, o nome do parâmetro é ListAvailable. A segunda parte deste cmdlet é o valor que você deseja atribuir ao parâmetro. Aqui está $True . O parâmetro ListAvailable normalmente não precisa de um valor, portanto, especificar $True é como você diz ao PowerShell para usar esse parâmetro sem atribuir um valor a ele.
Se você olhar a imagem abaixo, verá o que acontece quando você executa o cmdlet Get-TimeZone.
![Como usar os parâmetros padrão do PowerShell para alterar o comportamento do comando Como usar os parâmetros padrão do PowerShell para alterar o comportamento do comando]()
Coisas a ter em mente
A coisa mais importante a entender é que adicionar um novo valor a um parâmetro padrão do PowerShell é alterar o comportamento padrão do cmdlet, e não remover os recursos do cmdlet. Mesmo quando você altera o cmdlet Get-TimeZone para mostrar os fusos horários disponíveis em vez de mostrar o fuso horário atual. Você ainda pode exibir as informações de fuso horário atual se visualizar mais.
Outra coisa que você precisa saber é que os parâmetros padrão personalizados podem ser removidos. Para remover um único item, use o comando $PSDefaultParameterValues.Remove , seguido do nome do item que deseja remover. Por exemplo:
$PSDefaultParameterValues.Remove(“Get-TimeZone:ListAvailable”)
Em vez disso, você pode excluir todo o conteúdo da tabela hash usando este comando:
$PSDefaultParameterValues.Clear();
Você pode ver exemplos de ambas as técnicas abaixo:
![Como usar os parâmetros padrão do PowerShell para alterar o comportamento do comando Como usar os parâmetros padrão do PowerShell para alterar o comportamento do comando]()
Você pode excluir toda a tabela hash ou excluir uma única entrada.
Alterar o comportamento padrão de um comando cmdlet é algo que você não faz com frequência, mas quando precisar, você já sabe como alterá-lo.
Desejo-lhe sucesso!
Ver mais: