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 ser semelhante à 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 Types.ps1xml
objetos desserializados é formatada automaticamente para exibição por entradas nos arquivos or 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 em seu computador local, os objetos que o comando retorna podem não ser formatados conforme o 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 nenhum tratamento ou formatação especial.
Ordenando os resultados
A ordem dos nomes de computador no parâmetro ComputerName de cmdlets determina a ordem na qual 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 diferentes computadores são intercalados intercalados na saída