Compartilhar via


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.