about_Remote_Output
Krótki opis
Opisuje sposób interpretowania i formatowania danych wyjściowych poleceń zdalnych.
Długi opis
Dane wyjściowe polecenia, które zostało uruchomione na komputerze zdalnym, mogą wyglądać jak dane wyjściowe tego samego polecenia uruchomionego na komputerze lokalnym, ale istnieją pewne istotne różnice.
W tym temacie wyjaśniono, jak interpretować, formatować i wyświetlać dane wyjściowe poleceń uruchamianych na komputerach zdalnych.
Wyświetlanie nazwy komputera
Gdy polecenie cmdlet jest używane Invoke-Command
do uruchamiania polecenia na komputerze zdalnym, polecenie zwraca obiekt zawierający nazwę komputera, który wygenerował dane. Właściwość PSComputerName zawiera nazwę komputera zdalnego.
W przypadku wielu poleceń polecenie PSComputerName jest domyślnie wyświetlane. Na przykład następujące polecenie uruchamia Get-Culture
polecenie na dwóch komputerach zdalnych, Server01 i Server02. Dane wyjściowe, które są wyświetlane poniżej, zawierają nazwy komputerów zdalnych, na których uruchomiono polecenie.
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
Możesz użyć parametru HideComputerName polecenia , Invoke-Command
aby ukryć właściwość PSComputerName . Ten parametr jest przeznaczony dla poleceń zbierających dane tylko z jednego komputera zdalnego.
Następujące polecenie uruchamia polecenie na komputerze zdalnym Get-Culture
Server01. Używa parametru HideComputerName , aby ukryć właściwość PSComputerName i powiązane właściwości.
$invokeCommandSplat = @{
ScriptBlock = {Get-Culture}
ComputerName = 'Server01'
HideComputerName = $true
}
Invoke-Command @invokeCommandSplat
LCID Name DisplayName
---- ---- -----------
1033 en-US English (United States)
Można również wyświetlić właściwość PSComputerName , jeśli nie jest wyświetlana domyślnie.
Na przykład następujące polecenia używają Format-Table
polecenia cmdlet , aby dodać właściwość PSComputerName do danych wyjściowych polecenia zdalnego 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
Deserializowane obiekty
Po uruchomieniu poleceń zdalnych, które generują dane wyjściowe, dane wyjściowe polecenia są przesyłane przez sieć z powrotem do komputera lokalnego.
Ponieważ nie można przesyłać na żywo obiektów .NET za pośrednictwem sieci, obiekty na żywo są serializowane lub konwertowane na reprezentacje XML obiektu i jego właściwości. Program PowerShell przesyła serializowany obiekt w sieci.
Na komputerze lokalnym program PowerShell odbiera serializowany obiekt i deserializuje go, konwertując serializowany obiekt na standardowy obiekt .NET.
Jednak deserializowany obiekt nie jest obiektem dynamicznym. Jest to migawka obiektu w momencie serializacji. Obiekt deserializowany zawiera właściwości, ale nie ma metod. Tych obiektów można używać i zarządzać nimi w programie PowerShell, w tym przekazywać je w potokach, wyświetlać wybrane właściwości i formatować.
Większość zdeserializowane obiekty są automatycznie formatowane do wyświetlania przez wpisy w Types.ps1xml
plikach lub Format.ps1xml
. Jednak komputer lokalny może nie mieć plików formatowania dla wszystkich obiektów, które zostały wygenerowane na komputerze zdalnym. Gdy obiekty nie są sformatowane, wszystkie właściwości każdego obiektu są wyświetlane w konsoli na liście przesyłania strumieniowego.
Gdy obiekty nie są formatowane automatycznie, można użyć poleceń cmdlet formatowania, takich jak Format-Table
lub Format-List
, do formatowania i wyświetlania wybranych właściwości. Możesz też użyć Out-GridView
polecenia cmdlet , aby wyświetlić obiekty w tabeli.
Po uruchomieniu polecenia na komputerze zdalnym, który używa poleceń cmdlet, które nie są dostępne na komputerze lokalnym, obiekty zwracane przez polecenie mogą nie być sformatowane zgodnie z oczekiwaniami, jeśli nie masz plików formatowania dla tych typów obiektów na komputerze. Polecenia cmdlet i Export-FormatData
służą Get-FormatData
do pobierania danych formatowania z innego komputera.
Niektóre typy obiektów, takie jak obiekty DirectoryInfo i identyfikatory GUID, są konwertowane z powrotem na obiekty na żywo po ich odebraniu. Te obiekty nie wymagają specjalnej obsługi ani formatowania.
Porządkowanie wyników
Kolejność nazw komputerów w parametrze ComputerName poleceń cmdlet określa kolejność, w jakiej program PowerShell łączy się z komputerami zdalnymi. Jednak wyniki są wyświetlane w kolejności odbierania danych z komputerów zdalnych.
Możesz użyć Sort-Object
polecenia cmdlet , aby posortować wyniki na PSComputerName. Gdy jakakolwiek inna właściwość obiektu, wyniki z różnych komputerów są przeplatane przeplatane w danych wyjściowych