Compreender o PowerShell ForEach Loop e ForEach-Object

Na linguagem de scripting do Microsoft PowerShell, são utilizados cmdlets para realizar três operações: recolher informação, definir informação, e apagar informação. Para além das cmdlets, o PowerShell também fornece a capacidade de processar informação mais de uma vez. Existem duas funções PowerShell integradas que a maioria dos administradores PowerShell utilizam. Elas são ForEach Loop e ForEach-Object. O Loop PowerShell ForEach permite-lhe iterar através de um conjunto de itens recolhidos numa variável PowerShell. Por exemplo, utilizando a cmdlet PowerShell do Get-ADUser pode recolher informação do utilizador a partir do Active Directory. Se precisasse de ver a propriedade da cidade de cada utilizador antes de tomar uma acção, poderia usar o ForEach Loop. O ForEach-Object pode ser utilizado para trabalhar directamente com objectos e, na sua maioria, utilizado num oleoduto, como explicaremos neste artigo. Vejamos alguns exemplos em que as funções ForEach Loop e ForEach-Object são utilizadas.

PowerShell ForEach Loop

br> O nosso primeiro exemplo de utilização do ForEach Loop é verificar a propriedade da cidade dos utilizadores do Active Directory e depois tomar uma acção. Vamos supor que quereria exportar os utilizadores cuja propriedade da cidade está definida para “Londres” e depois guardar o resultado num ficheiro CSV. Aqui está o script PowerShell:

Como pode ver no script acima, criámos uma variável chamada $CityReport que armazena o caminho para o ficheiro CSV onde o relatório será guardado. A seguir, estamos a recolher todos os utilizadores de uma unidade organizacional específica e a armazenar os utilizadores recolhidos com todas as propriedades na variável $AllUsersNow. A seguir, inicia-se o processamento do ForEach Loop. Na função ForEach Loop estamos a verificar a propriedade da cidade do utilizador e depois, utilizando uma condição IF, estamos a verificar se a propriedade da cidade detém ou não o valor “Londres” para o utilizador actual. Se o utilizador detém “Londres” como o valor na propriedade da cidade, os valores actuais do nome do utilizador e do nome da cidade são adicionados ao ficheiro C:\Temp\CityReport.CSV.

Outro exemplo de utilização do ForEach Loop é processar a informação armazenada num ficheiro CSV. Vamos assumir que tem um ficheiro CSV que contém o nome de utilizador, cidade, e valores do departamento. Deseja modificar as propriedades da cidade e do departamento do utilizador a partir do ficheiro CSV. Para o fazer, irá utilizar o script PowerShell abaixo:

Como pode ver no script acima, importamos o conteúdo do ficheiro CSV para a variável $CSVFile e depois, utilizando o Loop ForEach, estamos a armazenar os valores do departamento e da cidade do ficheiro CSV em variáveis $NewDepartment e $NewCity e, em seguida, utilizando o PowerShell do Set-ADUser cmdlet, estamos a actualizar os valores do departamento e da cidade para o utilizador.

Em resumo, utilize o PowerShell ForEach Loop quando necessitar de processar informação mais de uma vez se necessitar de tomar uma acção sobre um item específico com base no valor da propriedade do item, e/ou quando necessitar de modificar a informação do objecto a partir de um ficheiro.

Afora da função ForEach Loop, o PowerShell também oferece o ForEach-Object. O ForEach-Object, como o nome sugere, funciona directamente com os objectos e é utilizado na sua maioria num oleoduto. Por exemplo, como se pode ver no comando abaixo, a função Get-Process cmdlet recupera todos os processos no computador local e o ForEach-Object após o pipeline (|) processa os objectos (nomes dos processos), e depois apenas exibe o nome do processo na janela de saída.

Get-Process | ForEach-Object {$_.ProcessName}

Simplesmente, se precisasse de ver o nome do processo juntamente com o ID do processo, executará este comando:

Get-Process | ForEach-Object {$_.ProcessName, $_.ID}

Outro exemplo de utilização do ForEach-Object é obter o comprimento de todos os ficheiros de um directório. Vamos supor que queira verificar o comprimento de todos os ficheiros na pasta C:\Temp. Irá executar estes comandos:

$ThisDir = “C:\Temp”
Get-ChildItem $ThisDir | ForEach-Object -Process {if (!$_.PSIsContainer) {$_.Name; $_.Length / 1024; ” ” }}}

No exemplo ForEach-Object PowerShell abaixo, está a recolher eventos do Registo de Eventos da Aplicação e depois a guardar a mensagem de evento num ficheiro de texto.

Take it from here

Então agora tem uma ideia de como usar as funções ForEach e ForEach-Object incorporadas no PowerShell. O Loop PowerShell ForEach pode ser usado para iterar através de um conjunto de itens recolhidos numa variável PowerShell e armazenados num ficheiro CSV. A função ForEach-Object pode ser usada para trabalhar directamente com objectos. Os exemplos que fornecemos utilizando ambas as funções ForEach Loop e ForEach-Object neste artigo devem fazê-lo começar e fazê-lo pensar em formas de utilizar os comandos no seu trabalho.

/div>

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *