about_Remote_Output

Descrição breve

Descreve como interpretar e formatar a saída de comandos remotos.

Descrição longa

A saída de um comando que foi executado em um computador remoto pode parecer a saída do mesmo comando executado em um computador local, mas há algumas diferenças significativas.

Este tópico explica como interpretar, formatar e exibir a saída de comandos executados em computadores remotos.

Exibindo o nome do computador

Quando você usa o Invoke-Command cmdlet para executar um comando em um computador remoto, o comando retorna um objeto que inclui o nome do computador que gerou os dados. A propriedade PSComputerName contém o nome do computador remoto.

Para muitos comandos, PSComputerName é exibido por padrão. Por exemplo, o comando a seguir executa um Get-Culture comando em dois computadores remotos, Server01 e Server02. A saída, que aparece abaixo, inclui os nomes dos computadores remotos nos quais o comando foi executado.

Invoke-Command -ScriptBlock {Get-Culture} -ComputerName Server01, Server02
LCID  Name    DisplayName                PSComputerName
----  ----    -----------                --------------
1033  en-US   English (United States)    Server01
1033  es-AR   Spanish (Argentina)        Server02

Você pode usar o parâmetro HideComputerName de Invoke-Command para ocultar a propriedade PSComputerName . Esse parâmetro foi projetado para comandos que coletam dados de apenas um computador remoto.

O comando a seguir executa um Get-Culture comando no computador remoto Server01. Ele usa o parâmetro HideComputerName para ocultar a propriedade PSComputerName e as propriedades relacionadas.

$invokeCommandSplat = @{
    ScriptBlock = {Get-Culture}
    ComputerName = 'Server01'
    HideComputerName = $true
}
Invoke-Command @invokeCommandSplat
LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)

Você também pode exibir a propriedade PSComputerName se ela não for exibida por padrão.

Por exemplo, os comandos a seguir usam o Format-Table cmdlet para adicionar a propriedade PSComputerName à saída de um comando remoto Get-Date .

$invokeCommandSplat = @{
    ScriptBlock = {Get-Date}
    ComputerName = 'Server01', 'Server02'
}
Invoke-Command @invokeCommandSplat |
    Format-Table DateTime, PSComputerName -AutoSize
DateTime                            PSComputerName
--------                            --------------
Monday, July 21, 2008 7:16:58 PM    Server01
Monday, July 21, 2008 7:16:58 PM    Server02

Objetos desserializados

Quando você executa comandos remotos que geram saída, a saída do comando é transmitida pela rede de volta para o computador local.

Como os objetos .NET dinâmicos não podem ser transmitidos pela rede, os objetos dinâmicos são serializados ou convertidos em representações XML do objeto e suas propriedades. O PowerShell transmite o objeto serializado pela rede.

No computador local, o PowerShell recebe o objeto serializado e o desserializa convertendo o objeto serializado em um objeto .NET padrão.

No entanto, o objeto desserializado não é um objeto ativo. É um instantâneo do objeto no momento da serialização. O objeto desserializado inclui propriedades, mas nenhum método. Você pode usar e gerenciar esses objetos no PowerShell, incluindo passá-los em pipelines, exibir propriedades selecionadas e formatá-los.

A maioria dos objetos desserializados são formatados automaticamente para exibição por entradas nos Types.ps1xml arquivos ou Format.ps1xml . No entanto, o computador local pode não ter arquivos de formatação para todos os objetos que foram gerados em um computador remoto. Quando os objetos não são formatados, todas as propriedades de cada objeto aparecem no console em uma lista de streaming.

Quando os objetos não são formatados automaticamente, você pode usar os cmdlets de formatação, como Format-Table ou Format-List, para formatar e exibir as propriedades selecionadas. Ou, você pode usar o Out-GridView cmdlet para exibir os objetos em uma tabela.

Quando você executa um comando em um computador remoto que usa cmdlets que você não tem no computador local, os objetos que o comando retorna podem não ser formatados como esperado se você não tiver os arquivos de formatação para esses tipos de objeto em seu computador. Use os Get-FormatData cmdlets e Export-FormatData para obter dados de formatação de outro computador.

Alguns tipos de objeto, como objetos DirectoryInfo e GUIDs, são convertidos novamente em objetos dinâmicos quando são recebidos. Esses objetos não precisam de nenhuma manipulação ou formatação especial.

Ordenando os resultados

A ordem dos nomes de computador no parâmetro ComputerName dos cmdlets determina a ordem em que o PowerShell se conecta aos computadores remotos. No entanto, os resultados aparecem na ordem em que os dados são recebidos dos computadores remotos.

Você pode usar o Sort-Object cmdlet para classificar os resultados no PSComputerName. Quando você qualquer outra propriedade do objeto, os resultados de computadores diferentes são intercalados intercalados na saída

Confira também