Share via


Windows PowerShell

Ótimos truques com o pipeline: O Retorno

Don Jones

 

No mês passado, mostrei um truque pipeline excelentes que tira proveito da ligação de parâmetro de pipeline para transformar uma tarefa um pouco complexa em uma linha simples do Windows PowerShell.

Eis aqui uma recapitulação rápida: Criei um arquivo de valores separados por vírgulas (CSV) que contém informações sobre novos usuários, precisei criar em um domínio do Active Directory. Fiz-se de que os cabeçalhos de coluna do arquivo CSV correspondência os nomes de parâmetro do Novo ADUser cmdlet (que acompanha o Windows Server 2008 R2 e pode ser usado com domínios do Windows Server 2003 também). Portanto, os cabeçalhos de coluna havia itens como “ departamento, ” “ cidade ”, “ nome ” “ GivenName ”, “ sobrenome, ” e assim por diante. Porque Novo ADUserentrada do pipeline vínculos por nome de propriedade, selecionando os nomes de coluna deixe-me criar os usuários com apenas dois cmdlets:

Importação de CSV c:\new-users.csv | New-ADUser

The Importação de CSV cmdlet gera um objeto para cada linha do arquivo CSV e esses objetos possuem propriedades que correspondem aos nomes de coluna CSV. Porque meu arquivo CSV continha todos os therequiredparameters of Novo ADUser, eu não precisará especificar manualmente quaisquer parâmetros que eu poderia ter especificado todos os parâmetros não no arquivo que seria válido para cada novo usuário — uma organização, por exemplo:

Importação de CSV c:\new-users.csv | New-ADUser –organization "OurCompany"

Acho que este exemplo realça realmente o poder do Windows PowerShell: Nos dias VBScript, essa tarefa seria têm exigido um script de várias linhas (e você pode fazê-lo dessa maneira no Windows PowerShell, muito). Mas por tempo dispensado para entender como funciona o pipeline e com o auxílio de alguns dos cmdlets bem escrito, esse script “ ” torna-se alguns comandos simples.

Portanto, o que é o problema?

Alguns leitores astuto postado perguntas no meu site no www.ConcentratedTech.com, ressaltando que meu truque interessante funcionava apenas se nomes de coluna do arquivo CSV exatamente correspondem aos nomes de parâmetro em Novo ADUser. Se um administrador está criando o arquivo CSV, você pode provavelmente utilizam essa correspondência exata; se o arquivo vem de uma pessoa de recursos humanos, os nomes de coluna têm maior probabilidade de ser coisas como “ nome, ” “ sobrenome ” e assim por diante — não a correspondência exata que precisamos para Novo ADUser para vincular automaticamente essas propriedades a seus parâmetros.

Obviamente, você pode editar sempre apenas tudo o que o arquivo ou banco de dados pessoal enviou o Human Resources — mas não é esse tipo de drudgery exatamente por isso que inventou computadores? Windows PowerShell, obviamente, oferece uma correção rápida e fácil para “ renomeando ” propriedades: The Selecione objeto cmdlet.

Selecione objeto é um desses cmdlets que pode ser um pouco complicados aprender a usar, porque faz muito. Por exemplo, uma das suas tarefas principais é simplificar a objetos, eliminando as propriedades que você Don precisa no momento. Basta especificar as propriedades fazer quer, e o cmdlet resultará um objeto aparado-down. Isso pode ser útil para tornar exibe saída e arquivos de texto um pouco mais claros, por exemplo:

Get-WmiObject Win32_OperatingSystem | Select-Object BuildNumber, ServicePackMajorVersion

Outro uso do Selecione objeto é selecionar um subconjunto dos objetos no pipeline, usando o –First or –Last parâmetros:

Get-Process | classificar VM –desc | selecionar –first 10

Observe que alternei para o alias Selecione em vez do nome do cmdlet completo.

Esta é a solução

Outro muitas vezes negligenciado capacidade de Selecione objeto é sua capacidade para selecionar não somente as propriedades desejadas, mas para renomeá-los. Se você já leu a Ajuda completa para o cmdlet (Ajudar a selecionar –full— algo absolutamente recomendo faria com cada cmdlet), você vai descobriram este recurso e mesmo vistos exemplos de como usá-lo. Eis um exemplo:

Importação CSV c:\new-users.csv | selecionar {Name = "Sobrenome" Expression = {$ _."Sobrenome"}}

Se o arquivo CSV entrado tiver uma coluna de “ sobrenome ”, isso vai renomeá-lo para “ sobrenome ”, permitindo que a propriedade de saída corresponder ao nome do parâmetro de Novo ADUser. Eu fiz é criado um Hashtable, também chamado de um dicionário or matriz de associação. O sinal de arroba (@) é um operador de matriz no Windows PowerShell; a hashtable é uma matriz que consiste em pares de chave-valor. Nesse caso, a chave é o nome da propriedade que deseja criar, e o valor é o conteúdo desejado atribuídos a essa propriedade. Em parte da hashtable expressão, posso usar a variável $ _ para fazer referência ao objeto de pipeline atual — neste exemplo, eu recuperei sua propriedade “ sobrenome ” (eu tive que usar aspas no nome da propriedade porque o nome da propriedade contém um espaço).

Você pode enviar como muitos desses que desejar para Selecione objeto:

Importação CSV c:\new-users.csv | selecionar {Name = "Sobrenome" Expression = {$ _."Sobrenome Nome"}}, @ {Name ="GivenName"Expression = {$ _."Nome"}}

O problema é que Selecione objeto will apenas saída exatamente o que você informá-lo para que você não pode informá-lo para renomear uma ou duas colunas e fazer com que ele apenas de saída desses dois, além de tudo não foi necessário renomear. Geralmente, você precisará especificar cadapropriedade desejada saída para o próximo cmdlet. É claro que, se você Don precisa renomear todas as colunas do arquivo CSV, você pode listá-las como é apenas:

Importação CSV c:\new-users.csv | selecionar {Name = "Sobrenome" Expression = {$ _."Sobrenome Nome"}}, @ {Name ="GivenName"Expression = {$ _."Nome"}},Nome de departamento, empresa,

Nesse caso, “ departamento ”, “ organização ” e “ nome ” seriam passado ao longo sem seja renomeada, que está bem — eles coincidir com os parâmetros associados de Novo ADUser.

Isso pode parecer trabalhoso se você tiver muitas colunas para especificar, portanto, é um atalho aqui:

Importação de CSV c:\new-users.csv | selecionar @ {Nome = "Sobrenome" Expression = {$ _."Sobrenome Nome"}}, @ {Nome = "GivenName" Expression = {$ _."Nome"}},*

A “ * ” produzirá todos os das propriedades do objeto entrada, como sobrenome “ ” e “ GivenName ” propriedades que criei. Então let’s que tenho um arquivo CSV com esta aparência:

Nome, sobrenome, departamento, nome
Don, Jones, IT, DonJ
Greg, blindagens, Zeladoria, GregS
Jeff, Hicks, IT, JeffH

Em seguida, posso usar esses dois cmdlets:

Importação CSV c:\new-users.csv | selecionar {Name = "Sobrenome" Expression = {$ _."Sobrenome Nome"}}, @ {Name ="GivenName"Expression = {$ _."Nome"}},*

E meus objetos de saída de cada um terá seis propriedades: “ Nome, ” “ sobrenome, ” “ departamento ”, “, ” “ sobrenome ” e “ GivenName. ” Em outras palavras, todas as propriedades originais, mais minhas adições. Eu, em seguida, basta acrescentar sobre o Novo ADUser cmdlet:

Importação CSV c:\new-users.csv | selecionar {Name = "Sobrenome" Expression = {$ _."Sobrenome Nome"}}, @ {Name ="GivenName"Expression = {$ _."Nome"}},* | Novo ADUser

The Novo ADUser cmdlet Don poderá fazer nada com as propriedades de “ nome ” e “ sobrenome ”, desde aqueles Don correspondam a nenhum de seus parâmetros. Mas não se preocupe — o cmdlet simplesmente irá ignorar todas as propriedades não é possível vincular. No entanto, ele irá, vincular remanescentes quatro — “ sobrenome ” “ GivenName ”, “ departamento, ” e “ nome ”, neste caso — e criar novas contas de usuário para mim.

Alterando a mentalidade

Acho que um dos maiores desafios na usando o Windows PowerShell é Nunca forneça. Em outras palavras, se você Don pode usar um arquivo CSV fornecido apenas porque os nomes das colunas Don corresponde ao que você precisa, Don pressuponha que a resposta é alterar o arquivo CSV! Windows PowerShell pode fazer quase sempre que você precisa — com um pouco de investigação de sua parte.

Assim que desafios de auto-adesivos ter você passar com o Windows PowerShell? Gostaria de saber — e talvez basear um artigo futuro na resposta! Enviar perguntas em www.ConcentratedTech.com, onde eu poderá responder imediatamente on-line, coletar detalhes adicionais de você e possivelmente criar um artigo futuro para Microsoft TechNet Magazine.

Don Jones is um país da mais experientes treinadores Windows PowerShell e gravadores. Blogs he semanal Windows PowerShell dicas em ConcentratedTech.com; Você pode também entrar em contato com ele ou perguntas que ele existe.

Conteúdo relacionado