Share via


O Windows PowerShell: Splatting

Empacotamento parâmetros antes de enviá-las junto a um comando pode economizar tempo, mas somente se você estiver usando a versão mais recente do Windows PowerShell.

Don Jones

Onde poderiam de outra mas no setor de TI você usar uma palavra como "splatting" em um contexto sério e profissional? Reparo de pára-brisa, talvez, mas não muitos outros locais.

Em termos de Windows PowerShell, o splatting é uma maneira de parâmetros de empacotamento para enviar para um comando. Este é um novo recurso do Windows PowerShell 2. 0. Se você estiver ainda mexam em torno de versão 1 (digamos, porque você está usando o Exchange Server 2007, que requer a ele), e isso não funcionará.

O método antigo

Normalmente, executar comandos, fornecendo os parâmetros a eles para a direita na linha de comando. Por exemplo:

Get-WmiObject –computername SERVER-R2 –class Win32_LogicalDisk –filter "DriveType=3" –credential "Administrator"

Você ainda possa fazer isso na versão 2. 0 do shell, é claro. Se você não gosta de toda essa digitação, você pode truncar os nomes de parâmetro. Apenas certifique-se de fornecer suficiente de cada nome de parâmetro para que o shell poderão determinar qual parâmetro você pretendia. Também é legal:

Get-WmiObject –comp SERVER-R2 –cla Win32_LogicalDisk –filt "DriveType=3" –cred "Administrator"

Há parâmetros posicionais ainda, é claro. Leia a Ajuda para Get-WmiObject, e você verá que você pode usar o parâmetro –class na primeira posição. Isso significa que você nem precisa fornecer o nome do parâmetro, desde que seu valor vai para o ponto certo:

Get-WmiObject Win32_LogicalDisk –comp SERVER-R2 –filt "DriveType=3" –cred "Administrator"

Combinar isso com a capacidade de usar o alias em vez de nomes de cmdlet, e você pode acabar com uma linha de comando verdadeiramente ilegível:

Gwmi Win32_LogicalDisk –comp SERVER-R2 –filt "DriveType=3" –cred "Administrator"

Classes, saber os meus alunos desejarem quando elas estão usando o shell de digitar. Afinal, salvando você mesmo digitar economiza seu tempo. Que é o que o shell é tudo sobre. No entanto, eu também diga que eles devem copiar e colar um comando em um script. Faz sentido usar o nome do cmdlet completo e os nomes de parâmetro completo. Isso torna mais fácil de ler o script eventual.

Alguns editores de script comercial, como o PrimalScript da SAPIEN e a PowerGUI da Quest (com um plug-in), ainda pode expandir nomes de cmdlet ou parâmetro das versões abreviadas completo. Isso ajuda você a truncar nomes com menos esforço.

A nova forma.

Splatting é uma maneira inteiramente nova de passando parâmetros para um comando. Comece criando uma tabela de hash, que também é chamada de um dicionário ou uma matriz associativa. Uma tabela de hash é uma coleção de chave = pares de valor. Uma tabela de hash básica contém duas chaves, cada um com um único valor. Parece que isso no Windows PowerShell:

@{'key1'='value1';'key2'='value2'}

O símbolo "@" inicia a tabela de hash, que é colocada entre chaves — aqueles que esta aparência: {}. Cada par key = value é separado dos outros por um ponto e vírgula. Em splatting, as chaves são nomes de parâmetro. Os valores são os valores que você deseja enviar para esses parâmetros. Em um script, você pode usar até mesmo as quebras de linha dentro da definição de tabela de hash para facilitar a leitura do bloco:

$parms = @{'class'='Win32_BIOS';
        'computername'='SERVER-R2';
           'filter'='drivetype=3';
   'credential'='Administrator'
          }

Passar esses parâmetros junto ao comando, você deve usar "@" novamente. Desta vez, no entanto, ele está agindo como um operador de splat. Pode ser confuso que uma única folha de pontuação (o símbolo "@") pode ter dois usos diferentes, mas ele funciona:

Get-WmiObject @parms

Você perceberá um pequeno truque. O sinal "@" é seguido do nome de variável, que não inclui o sinal de cifrão. Que vale provavelmente uma breve explicação. Ele pode ser um "problema" principal no shell do retira até muitas pessoas.

No Windows PowerShell, um nome de variável é uma seqüência de letras, números e sublinhados. É possível ter espaços e outros sinais de pontuação em um nome de variável, mas ela parece feio. Um sinal de cifrão na frente do nome da variável informa o shell, você não que lidar com a própria variável. Você deseja lidar com seu conteúdo. Então, $var = 5 está colocando o número "5" entre a variável chamada var.

O sinal de "@", quando usado como um operador de splat, faz algo similar. Ela diz, "levar a qualquer caractere vir em seguida e assumir que eles são um nome de variável. Suponha que a variável contém uma tabela de hash e que as chaves são nomes de parâmetro. Expandir os check-out e alimente os valores da tabela de hash para esses parâmetros. Que pode parecer uma explicação longos, mas que é o que está acontecendo.

Algumas pessoas Imagine que, particularmente dentro de um script, isso:

$parms = @{'class'='Win32_BIOS';
        'computername'='SERVER-R2';
           'filter'='drivetype=3';
           'credential'='Administrator'
          }
Get-WmiObject @parms

Parece mais atraente do que isso:

Get-WmiObject –computername SERVER-R2 –class Win32_LogicalDisk –filter "DriveType=3" –credential "Administrator"

Definitivamente, é uma questão de preferência pessoal. É fácil ver o argumento para o método splatting. Os parâmetros de nomes e valores, organizadamente estão localizados em um único ponto. Você pode formatá-las para que eles até e procure organizadas e organizadas de linha ("elegantes e ordenado" são um tema importante das minhas classes).

Portanto, na próxima vez que você estiver colocando um comando em um script, considere a splatting. Se nada disso, parece realmente interessante.

Don Jones

Don Jones é um MVP WindowsPowerShell, autor e instrutor. Você pode contatá-lo por meio de seu site, ConcentratedTech.com, que também contém informações sobre suas classes e aparências de conferência.

Barra lateral: Windows PowerShell em vídeo

Artigo deste mês tem um vídeo complementar disponível em Revista Extras - tecnologia concentrado. Você também encontrará adicionais livres vídeos do Windows PowerShell em YouTube - canal do ConcentratedDon.

Tempo está se esgotando para registrar Don Jones prático ao vivo, exclusivo, três dias do Windows PowerShell workshop co-localizado TechMentor Spring 2011. Visite TechMentorEvents.com Para obter detalhes.

Conteúdo relacionado