about_Remote_Output
Krótki opis
Opisuje sposób interpretowania i formatowania danych wyjściowych poleceń zdalnych.
Długi opis
Dane wyjściowe polecenia uruchomionego 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 używasz polecenia cmdlet Invoke-Command do uruchomienia polecenia na komputerze zdalnym, polecenie zwraca obiekt, który zawiera nazwę komputera, który wygenerował dane. Nazwa komputera zdalnego jest przechowywana we właściwości PSComputerName.
W przypadku wielu poleceń parametr PSComputerName jest wyświetlany domyślnie. Na przykład następujące polecenie uruchamia polecenie Get-Culture na dwóch komputerach zdalnych, Server01 i Server02. Dane wyjściowe, które są wyświetlane poniżej, zawiera nazwy komputerów zdalnych, na których uruchomiono polecenie.
C:\PS> invoke-command -script {get-culture} -comp Server01, Server02
LCID Name DisplayName PSComputerName
---- ---- ----------- --------------
1033 en-US English (United States) Server01
1033 es-AR Spanish (Argentina) Server02
Można użyć HideComputerName parametru Invoke-Command aby ukryć właściwość PSComputerName. Ten parametr jest przeznaczony dla poleceń, które zbierają dane tylko z jednego komputera zdalnego.
Następujące polecenie uruchamia polecenie Get-Culture na komputerze zdalnym Server01. Używa parametru HideComputerName, aby ukryć właściwość PSComputerName i powiązane właściwości.
C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName
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ą polecenia cmdlet Format-Table, aby dodać właściwość PSComputerName do danych wyjściowych polecenia Get-Date polecenia.
$dates = invoke-command -script {get-date} -computername Server01, Server02
$dates | format-table DateTime, PSComputerName -auto
DateTime PSComputerName
-------- --------------
Monday, July 21, 2008 7:16:58 PM Server01
Monday, July 21, 2008 7:16:58 PM Server02
WYŚWIETLANIE WŁAŚCIWOŚCI MACHINENAME
Kilka polecenia cmdlet, w tym Get-Process, Get-Service i Get-EventLog, ma ComputerName parametru, który pobiera obiekty na komputerze zdalnym. Te polecenia cmdlet nie używają komunikacji zdalnej programu PowerShell, więc można ich używać nawet na komputerach, które nie są skonfigurowane do komunikacji zdalnej w Windows PowerShell.
Obiekty zwracane przez te polecenia cmdlet przechowują nazwę komputera zdalnego we właściwości MachineName. (Te obiekty nie mają właściwości PSComputerName).
Na przykład to polecenie pobiera proces programu PowerShell na komputerach zdalnych Server01 i Server02. Domyślny ekran nie zawiera właściwości MachineName.
C:\PS> get-process PowerShell -computername server01, server02
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
920 38 97524 114504 575 9.66 2648 PowerShell
194 6 24256 32384 142 3020 PowerShell
352 27 63472 63520 577 3.84 4796 PowerShell
Możesz użyć polecenia cmdlet Format-Table, aby wyświetlić właściwość MachineName obiektów procesu.
Na przykład następujące polecenie zapisuje procesy w zmiennej $p, a następnie używa operatora potoku (|) do wysyłania procesów w $p do Format-Table polecenia. Polecenie używa parametru Property Format-Table, aby uwzględnić właściwość MachineName na ekranie.
C:\PS> $p = get-process PowerShell -comp Server01, Server02
C:\PS> $P | format-table -property ID, ProcessName, MachineName -auto
Id ProcessName MachineName
-- ----------- -----------
2648 PowerShell Server02
3020 PowerShell Server01
4796 PowerShell Server02
Następujące bardziej złożone polecenie dodaje właściwość MachineName do domyślnego wyświetlania procesu. Używa ona tabel skrótów do określania właściwości obliczeniowych. Na szczęście nie musisz go rozumieć, aby z niego korzystać.
(Należy pamiętać, że znak kontynuacji ['] jest znakiem kontynuacji).
C:\PS> $p = get-process PowerShell -comp Server01, Server02
C:\PS> $p | format-table -property Handles, `
@{Label="NPM(K)";Expression={int}}, `
@{Label="PM(K)";Expression={int}}, `
@{Label="WS(K)";Expression={int}}, `
@{Label="VM(M)";Expression={int}}, `
@{Label="CPU(s)";Expression={if ($.CPU -ne $()){ $.CPU.ToString("N")}}}, `
Id, ProcessName, MachineName -auto
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName MachineName
------- ------ ----- ----- ----- ------ -- ----------- -----------
920 38 97560 114532 576 2648 PowerShell Server02
192 6 24132 32028 140 3020 PowerShell Server01
438 26 48436 59132 565 4796 PowerShell Server02
OBIEKTY DESERIALIZOWANE
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ż większość obiektów .NET Framework Microsoft (takich jak obiekty zwracane przez polecenia cmdlet programu PowerShell) nie może być przesyłana za pośrednictwem sieci, obiekty na żywo są "serializowane". Innymi słowy, obiekty na żywo są konwertowane na reprezentacje XML obiektu i jego właściwości. Następnie serializowany obiekt oparty na języku XML jest przesyłany przez sieć.
Na komputerze lokalnym program PowerShell odbiera obiekt serializowany w formacie XML i "deserializuje" go przez przekonwertowanie obiektu opartego na języku XML na standardowy .NET Framework obiekt.
Jednak deserializowany obiekt nie jest obiektem na żywo. Jest to migawka obiektu w czasie serializacji i zawiera właściwości, ale nie metody. Tych obiektów można używać i zarządzać nimi w programie PowerShell, w tym przekazywaniem ich w potokach, wyświetlaniem wybranych właściwości i ich formatowaniem.
Większość deserializowanych obiektów jest automatycznie formatowana do wyświetlania przez wpisy w plikach Types.ps1xml lub Format.ps1xml. Jednak komputer lokalny może nie mieć plików formatowania dla wszystkich deserializowanych 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ć formatowania polecenia cmdlet, takie jak Format-Table lub Format-List, aby sformatować i wyświetlić wybrane właściwości. Możesz też użyć polecenia cmdlet Out-GridView, aby wyświetlić obiekty w tabeli.
Ponadto w przypadku uruchomienia polecenia na komputerze zdalnym, który używa poleceń cmdlet, których nie ma na komputerze lokalnym, obiekty zwracane przez polecenie mogą nie być prawidłowo sformatowane, ponieważ nie masz plików formatowania dla tych obiektów na komputerze. Aby uzyskać dane formatowania z innego komputera, użyj Get-FormatData i Export-FormatData cmdlet.
Niektóre typy obiektów, takie jak obiekty DirectoryInfo i identyfikatory GUID, są konwertowane z powrotem na obiekty na żywo po ich otrzymaniu. Te obiekty nie wymagają specjalnej obsługi ani formatowania.
KOLEJNOŚĆ 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, w której komputer lokalny je odbiera, co może być w innej kolejności.
Aby zmienić kolejność wyników, użyj Sort-Object cmdlet . Możesz sortować według właściwości PSComputerName lub MachineName. Można również sortować według innej właściwości obiektu, aby wyniki z różnych komputerów były przeplatone.
Zobacz też
Opinia
Prześlij i wyświetl opinię dla