ForEach-Object
Executa uma operação em cada conjunto de objetos de entrada.
Sintaxe
ForEach-Object [-Process] <ScriptBlock[]> [-Begin <scriptblock>] [-End <scriptblock>] [-InputObject <psobject>] [<CommonParameters>]
Descrição
O cmdlet ForEach-Object executa uma operação em cada conjunto de objetos de entrada. Os objetos de entrada podem ser enviados ao cmdlet ou especificados utilizando o parâmetro InputObject.
A operação a ser executada é descrita em um bloco de script fornecido ao cmdlet como o valor do parâmetro Process. O bloco de script pode conter qualquer script do Windows PowerShell.
No bloco de script, o objeto de entrada atual é representado pela variável $_.
Além de usar o bloco de script que descreve as operações a serem realizadas em cada objeto de entrada, você pode fornecer dois blocos de script adicionais. Um, especificado como o valor do parâmetro Begin, é executado antes do primeiro objeto de entrada ser processado. O outro, especificado como o valor do parâmetro End, é executado depois que o último objeto de entrada é processado.
Os resultados da avaliação de todos os blocos de script, incluindo aqueles especificados com os parâmetros Begin e End, são passados pelo pipeline.
Parâmetros
-Begin <scriptblock>
Especifica um bloco de script a ser executado antes do processamento de quaisquer objetos de entrada.
Necessário? |
false |
Posição? |
named |
Valor padrão |
|
Aceitar entrada do pipeline? |
false |
Aceitar caracteres curinga? |
false |
-End <scriptblock>
Especifica um bloco de script a ser executado após o processamento de todos os objetos de entrada.
Necessário? |
false |
Posição? |
named |
Valor padrão |
|
Aceitar entrada do pipeline? |
false |
Aceitar caracteres curinga? |
false |
-InputObject <psobject>
Aceita um objeto que o bloco de script especificou no processo em que o parâmetro agirá. Insira uma variável que contenha os objetos, ou digite um comando ou uma expressão que obtenha os objetos.
Necessário? |
false |
Posição? |
named |
Valor padrão |
|
Aceitar entrada do pipeline? |
true (ByValue) |
Aceitar caracteres curinga? |
false |
-Process <ScriptBlock[]>
Especifica o bloco de script aplicado a cada objeto de entrada.
Necessário? |
true |
Posição? |
1 |
Valor padrão |
|
Aceitar entrada do pipeline? |
false |
Aceitar caracteres curinga? |
false |
<CommonParameters>
Esse cmdlet oferece suporte aos parâmetros comuns: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Para obter mais informações, consulte about_Commonparameters.
Entradas e saídas
O tipo de entrada é o tipo dos objetos que você pode canalizar para o cmdlet. O tipo de retorno é o tipo dos objetos que o cmdlet retorna.
Entradas |
System.Management.Automation.PSObject Você pode canalizar qualquer objeto para ForEach-Object. |
Saídas |
System.Management.Automation.PSObject Os objetos que ForEach-Object retorna são determinados pela entrada. |
Exemplo 1
C:\PS>30000,56798,12432 | foreach-object -process {$_/1024}
Descrição
-----------
Esse comando aceita uma matriz de inteiros, divide cada uma delas por 1024 e exibe os resultados.
Exemplo 2
C:\PS>get-childitem C:\ | foreach-object -process { $_.length / 1024 }
Descrição
-----------
Esse comando recupera os arquivos e diretórios na raiz da unidade C: e retorna e exibe o tamanho de cada um deles. Os zeros representam diretórios em que nenhum tamanho de arquivo estava disponível.
Exemplo 3
C:\PS>$events = get-eventlog -logname system -newest 1000
C:\PS> $events | foreach-object -begin {get-date} -process {out-file -filepath events.txt -append -inputobject $_.message} -end {get-date}
Descrição
-----------
Esse comando recupera os 1.000 eventos mais recentes do log de sistema e os armazena na variável $events. Em seguida, ele canaliza os eventos para o cmdlet ForEach-Object. O parâmetro Begin exibe a data e a hora atuais. Em seguida, o parâmetro Process utiliza o cmdlet Out-File para criar um arquivo de texto denominado events.txt e armazena a propriedade message de cada um dos eventos nesse arquivo. Por último, o parâmetro End é utilizado para exibir a data e a hora após a conclusão de todo o processamento.
Exemplo 4
C:\PS>get-itemproperty -path hkcu:\Network\* | foreach-object {set-itemproperty -path $_.pspath -name RemotePath -value $_.RemotePath.ToUpper();}
Descrição
-----------
Esse comando altera o valor da entrada do Registro RemotePath em todas as subchaves na chave HKCU:\Network para texto em letras maiúsculas. Você pode usar esse formato para alterar a forma ou o conteúdo de um valor de entrada do Registro.
Cada subchave na chave Network representa uma unidade de rede mapeada que será reconectada no logon. A entrada RemotePath contém o caminho UNC da unidade conectada. Por exemplo, se você mapear a unidade E: para \\Server\Share, haverá uma subchave E de HKCU:\Network e o valor da entrada do Registro RemotePath na subchave E será \\Server\Share.
O comando usa o cmdlet Get-ItemProperty para obter todas as subchaves da chave Network e o cmdlet Set-ItemProperty para alterar o valor da entrada do Registro RemotePath em cada chave. No comando Set-ItemProperty, o caminho é o valor da propriedade PSPath da chave do Registro. (Essa é uma propriedade do objeto Microsoft .NET Framework que representa a chave do Registro; não é uma entrada do Registro.) O comando usa o método ToUpper () do valor RemotePath, que é uma cadeia de caracteres (REG_SZ).
Como Set-ItemProperty está alterando a propriedade de cada chave, o cmdlet ForEach-Object é necessário para acessar a propriedade.