Upravit

Sdílet prostřednictvím


Vzdálená komunikace PowerShellu – nejčastější dotazy

Když pracujete vzdáleně, zadáte příkazy v PowerShellu na jednom počítači (označované jako "místní počítač"), ale příkazy běží na jiném počítači (označované jako "vzdálený počítač"). Práce na dálku by měla být co nejvíce podobná práci přímo na vzdáleném počítači.

Poznámka:

Pokud chcete používat vzdálenou komunikace PowerShellu, musí být vzdálený počítač nakonfigurovaný pro vzdálenou vzdálenou komunikace. Další informace najdete v tématu about_Remote_Requirements.

Musí mít oba počítače nainstalovaný PowerShell?

Ano. Aby místní a vzdálené počítače fungovaly vzdáleně, musí mít powershell, rozhraní Microsoft .NET Framework a protokol WS-Management (Web Services for Management). Všechny soubory a další prostředky potřebné ke spuštění konkrétního příkazu musí být ve vzdáleném počítači.

Počítače se systémem Windows PowerShell 3.0 a počítače se systémem Windows PowerShell 2.0 se můžou vzájemně vzdáleně připojovat a spouštět vzdálené příkazy. Některé funkce, například možnost odpojit se od relace a znovu se k ní připojit, ale fungují jenom v případě, že na obou počítačích běží Windows PowerShell 3.0.

Musíte mít oprávnění pro připojení ke vzdálenému počítači, oprávnění ke spuštění PowerShellu a oprávnění pro přístup k úložištům dat (jako jsou soubory a složky) a registru na vzdáleném počítači.

Další informace najdete v tématu about_Remote_Requirements.

Jak vzdálené komunikace funguje?

Když odešlete vzdálený příkaz, příkaz se přenese přes síť do modulu PowerShellu na vzdáleném počítači a spustí se ve vzdáleném počítači v klientovi PowerShellu. Výsledky příkazu se odešlou zpět do místního počítače a zobrazí se v relaci PowerShellu na místním počítači.

K přenosu příkazů a příjmu výstupu používá PowerShell protokol WS-Management. Informace o protokolu WS-Management naleznete v tématu WS-Management Protocol v dokumentaci systému Windows.

Počínaje windows PowerShellem 3.0 jsou vzdálené relace uložené ve vzdáleném počítači. To vám umožní odpojit se od relace a znovu se připojit k jiné relaci nebo jinému počítači, aniž byste přerušili příkazy nebo ztratili stav.

Je vzdálené komunikace PowerShellu zabezpečená?

Když se připojíte ke vzdálenému počítači, systém použije přihlašovací údaje pro uživatelské jméno a heslo v místním počítači nebo přihlašovací údaje, které zadáte v příkazu, abyste se přihlásili ke vzdálenému počítači. Přihlašovací údaje a zbytek přenosu jsou šifrované.

Pokud chcete přidat další ochranu, můžete nakonfigurovat vzdálený počítač tak, aby místo protokolu HTTP používal protokol SSL (Secure Sockets Layer) k naslouchání požadavkům vzdálené správy systému Windows (WinRM). Uživatelé pak mohou při navazování připojení použít parametr Invoke-CommandUseSSL rozhraní , New-PSSessiona Enter-PSSession rutiny. Tato možnost používá bezpečnější kanál HTTPS místo protokolu HTTP.

Vyžadují vzdálené příkazy vzdálenou vzdálenou komunikace PowerShellu?

Ne. Některé rutiny mají parametr ComputerName , který umožňuje získat objekty ze vzdáleného počítače.

Tyto rutiny nepoužívají vzdálené komunikace PowerShellu. Můžete je tedy použít na jakémkoli počítači, na kterém běží PowerShell, i když počítač není nakonfigurovaný pro vzdálené komunikace PowerShellu nebo pokud počítač nesplňuje požadavky na vzdálené komunikace PowerShellu.

Mezi tyto rutiny patří:

  • Get-Hotfix
  • Rename-Computer
  • Restart-Computer
  • Stop-Computer

Pokud chcete najít všechny rutiny s parametrem ComputerName , zadejte:

Get-Help * -Parameter ComputerName
# or
Get-Command -ParameterName ComputerName

Pokud chcete zjistit, jestli parametr ComputerName konkrétní rutiny vyžaduje vzdálené komunikace PowerShellu, přečtěte si popis parametru. Pokud chcete zobrazit popis parametru, zadejte:

Get-Help <cmdlet-name> -Parameter ComputerName

Příklad:

Get-Help Get-Hotfix -Parameter ComputerName

Pro všechny ostatní příkazy použijte rutinu Invoke-Command .

Návody spustit příkaz na vzdáleném počítači?

Pokud chcete spustit příkaz na vzdáleném počítači, použijte rutinu Invoke-Command .

Uzavřete příkaz do složených závorek ({}), aby byl blok skriptu. K zadání příkazu použijte parametr Invoke-Command ScriptBlock.

Parametr ComputerNameInvoke-Command můžete použít k určení vzdáleného počítače. Nebo můžete vytvořit trvalé připojení ke vzdálenému počítači (relaci) a pak pomocí parametru Invoke-Command Relace spustit příkaz v relaci.

Například následující příkazy spustí Get-Process příkaz vzdáleně.

Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-Process}

#  - OR -

Invoke-Command -Session $s -ScriptBlock {Get-Process}

Pokud chcete vzdálený příkaz přerušit, zadejte ctrl+C. Žádost o přerušení se předá vzdálenému počítači, kde ukončí vzdálený příkaz.

Další informace o about_Remote vzdálených

Můžu se jen připojit ke vzdálenému počítači?

Pomocí této rutiny Enter-PSSession můžete spustit interaktivní relaci se vzdáleným počítačem.

Do příkazového řádku PowerShellu zadejte:

Enter-PSSession <ComputerName>

Příkazový řádek se změní, aby se zobrazilo, že jste připojeni ke vzdálenému počítači.

<ComputerName>\C:>

Teď se příkazy, které zadáte, spouští ve vzdáleném počítači stejně, jako kdybyste je zadali přímo na vzdáleném počítači.

Chcete-li ukončit interaktivní relaci, zadejte:

Exit-PSSession

Interaktivní relace je trvalá relace, která používá protokol WS-Management. Není to stejné jako použití telnetu, ale poskytuje podobné prostředí.

Další informace najdete na webu Enter-PSSession.

Můžu vytvořit trvalé připojení?

Ano. Vzdálené příkazy můžete spustit zadáním názvu vzdáleného počítače, názvu rozhraní NetBIOS nebo jeho IP adresy. Nebo můžete spustit vzdálené příkazy zadáním relace Prostředí PowerShell (PSSession), která je připojená ke vzdálenému počítači.

Pokud použijete parametr ComputerName nebo Invoke-CommandEnter-PSSession, PowerShell vytvoří dočasné připojení. PowerShell používá připojení ke spuštění pouze aktuálního příkazu a pak připojení zavře. Jedná se o velmi efektivní metodu spuštění jednoho příkazu nebo několika nesouvisejících příkazů, a to i na mnoha vzdálených počítačích.

Když použijete rutinu New-PSSession k vytvoření psSession, PowerShell vytvoří trvalé připojení pro PSSession. Potom můžete spustit více příkazů v psSession, včetně příkazů, které sdílejí data.

Obvykle vytvoříte psSession pro spuštění řady souvisejících příkazů, které sdílejí data. V opačném případě je dočasné připojení vytvořené parametrem ComputerName dostatečné pro většinu příkazů.

Další informace o relacích najdete v tématu about_PSSessions.

Můžu najednou spouštět příkazy na více počítačích?

Ano. Parametr ComputerName rutiny Invoke-Command přijímá více názvů počítačů a parametr Session přijímá více psSessions.

Když spustíte Invoke-Command příkaz, PowerShell spustí příkazy na všech zadaných počítačích nebo ve všech zadaných verzích PSSession.

PowerShell může spravovat stovky souběžných vzdálených připojení. Počet vzdálených příkazů, které můžete odeslat, však může být omezený prostředky vašeho počítače a její kapacitou pro navázání a údržbu více síťových připojení.

Další informace najdete v příkladu v tématu nápovědy Invoke-Command .

Kde jsou moje profily?

Profily PowerShellu se nespouštějí automaticky ve vzdálených relacích, takže příkazy, které přidá profil, nejsou v relaci přítomny. Kromě toho $profile se automatická proměnná ve vzdálených relacích nezaplní.

Pokud chcete spustit profil v relaci, použijte rutinu Invoke-Command .

Například následující příkaz spustí profil CurrentUserCurrentHost z místního počítače v relaci v $s.

Invoke-Command -Session $s -FilePath $profile

Následující příkaz spustí profil CurrentUserCurrentHost ze vzdáleného počítače v relaci v $s. $profile Protože proměnná není vyplněná, příkaz použije explicitní cestu k profilu.

Invoke-Command -Session $s {
  . "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"
}

Po spuštění tohoto příkazu jsou příkazy, které profil přidá do relace, k dispozici v $s.

Spouštěcí skript v konfiguraci relace můžete použít také ke spuštění profilu v každé vzdálené relaci, která používá konfiguraci relace.

Další informace o profilech PowerShellu najdete v tématu about_Profiles. Další informace o konfiguracích relací naleznete v tématu Register-PSSessionConfiguration.

Jak omezování funguje na vzdálených příkazech?

PowerShell obsahuje funkci omezení pro jednotlivé příkazy, která umožňuje omezit počet souběžných vzdálených připojení vytvořených pro jednotlivé příkazy, aby vám pomohl spravovat prostředky na místním počítači.

Výchozí hodnota je 32 souběžných připojení, ale pro konkrétní příkazy můžete použít parametr ThrottleLimit rutin.

Pokud používáte funkci omezování, mějte na paměti, že se použije u každého příkazu, ne na celou relaci nebo na počítač. Pokud spouštíte příkazy souběžně v několika relacích nebo v relacích PSSession, je počet souběžných připojení součtem souběžných připojení ve všech relacích.

Pokud chcete najít rutiny s parametrem ThrottleLimit , zadejte:

Get-Help * -Parameter ThrottleLimit
-or-
Get-Command -ParameterName ThrottleLimit

Liší se výstup vzdálených příkazů od místního výstupu?

Pokud používáte PowerShell místně, odesíláte a přijímáte "živé" objekty rozhraní .NET Framework; "živé" objekty jsou objekty, které jsou přidruženy k skutečným programům nebo systémovým komponentám. Když vyvoláte metody nebo změníte vlastnosti živých objektů, změny ovlivní skutečný program nebo komponentu. A když se vlastnosti programu nebo komponenty změní, vlastnosti objektu, který je představuje, se také změní.

Vzhledem k tomu, že většinu živých objektů nelze přenést přes síť, PowerShell "serializuje" většinu objektů odesílaných ve vzdálených příkazech, tj. převede každý objekt na řadu datových prvků XML (Constraint Language in XML [CLiXML]) pro přenos.

Když PowerShell obdrží serializovaný objekt, převede XML na deserializovaný typ objektu. Deserializovaný objekt je přesný záznam o vlastnostech programu nebo komponenty v předchozím okamžiku, ale již není "živý", to znamená, že již není přímo přidružen k komponentě. A metody se odeberou, protože už nejsou efektivní.

Obvykle můžete použít deserializované objekty stejně jako živé objekty, ale musíte mít na paměti jejich omezení. Objekty vrácené rutinou Invoke-Command mají také další vlastnosti, které vám pomůžou určit původ příkazu.

Některé typy objektů, jako jsou objekty DirectoryInfo a identifikátory GUID, se při jejich přijetí převedou zpět na živé objekty. Tyto objekty nepotřebují žádné zvláštní zpracování ani formátování.

Informace o interpretaci a formátování vzdáleného výstupu najdete v tématu about_Remote_Output.

Můžu vzdáleně spouštět úlohy na pozadí?

Ano. Úloha prostředí PowerShell na pozadí je příkaz PowerShellu, který běží asynchronně bez interakce s relací. Když spustíte úlohu na pozadí, příkazový řádek se okamžitě vrátí a během spuštění úlohy můžete pokračovat v práci v relaci, i když běží po delší dobu.

Úlohu na pozadí můžete spustit, i když jsou spuštěné jiné příkazy, protože úlohy na pozadí se vždy spouští asynchronně v dočasné relaci.

Úlohy na pozadí můžete spouštět na místním nebo vzdáleném počítači. Ve výchozím nastavení se úloha na pozadí spouští na místním počítači. Pomocí parametru AsJob rutiny Invoke-Command však můžete spustit jakýkoli vzdálený příkaz jako úlohu na pozadí. A příkaz můžete použít Invoke-Command ke vzdálenému Start-Job spuštění.

Další informace o úlohách na pozadí v PowerShellu najdete v tématu about_Jobs a about_Remote_Jobs.

Můžu na vzdáleném počítači spouštět programy systému Windows?

Vzdálené příkazy PowerShellu můžete použít ke spouštění programů založených na systému Windows na vzdálených počítačích. Můžete například spustit Shutdown.exe nebo Ipconfig.exe na vzdáleném počítači.

Příkazy PowerShellu však nelze použít k otevření uživatelského rozhraní pro jakýkoli program ve vzdáleném počítači.

Když spustíte program systému Windows na vzdáleném počítači, příkaz se nedokončí a příkazový řádek PowerShellu se nevrátí, dokud se program nedokončí nebo dokud nestisknete ctrl+C, aby se příkaz přerušil. Pokud například program spustíte Ipconfig.exe na vzdáleném počítači, příkazový řádek se nevrátí, dokud Ipconfig.exe se nedokončí.

Pokud ke spuštění programu s uživatelským rozhraním použijete vzdálené příkazy, spustí se proces programu, ale uživatelské rozhraní se nezobrazí. Příkaz PowerShellu není dokončen a příkazový řádek se nevrátí, dokud proces programu nezastavíte, nebo dokud nestisknete klávesu CTRL+C, čímž příkaz přerušíte a proces zastavíte.

Pokud například ke spuštění Notepad na vzdáleném počítači použijete příkaz PowerShellu, spustí se proces Poznámkový blok na vzdáleném počítači, ale uživatelské rozhraní Poznámkový blok se nezobrazí. Pokud chcete příkaz přerušit a obnovit příkazový řádek, stiskněte klávesu CTRL+C.

Můžu omezit příkazy, které můžou uživatelé na mém počítači spustit vzdáleně?

Ano. Každá vzdálená relace musí používat jednu z konfigurací relací ve vzdáleném počítači. Konfigurace relací můžete spravovat na počítači (a oprávnění k těmto konfiguracím relací), abyste zjistili, kdo může vzdáleně spouštět příkazy na vašem počítači a které příkazy můžou spouštět.

Konfigurace relace konfiguruje prostředí pro relaci. Konfiguraci můžete definovat pomocí sestavení, které implementuje novou třídu konfigurace nebo pomocí skriptu, který se spouští v relaci. Konfigurace může určit příkazy, které jsou v relaci k dispozici. Konfigurace může obsahovat nastavení, která chrání počítač, například nastavení, která omezují množství dat, která relace může vzdáleně přijímat v jednom objektu nebo příkazu. Můžete také zadat popisovač zabezpečení, který určuje oprávnění potřebná k použití konfigurace.

Rutina Enable-PSRemoting vytvoří výchozí konfigurace relací na vašem počítači: Microsoft.PowerShell, Microsoft.PowerShell.Workflow a Microsoft.PowerShell32 (pouze 64bitové operační systémy). Enable-PSRemotingnastaví popisovač zabezpečení pro konfiguraci tak, aby je mohli používat jenom členové skupiny Správa istrators ve vašem počítači.

Pomocí rutin konfigurace relace můžete upravit výchozí konfigurace relace, vytvořit nové konfigurace relací a změnit popisovače zabezpečení všech konfigurací relace.

Počínaje windows PowerShellem 3.0 New-PSSessionConfigurationFile umožňuje rutina vytvářet vlastní konfigurace relací pomocí textového souboru. Soubor obsahuje možnosti pro nastavení jazykového režimu a pro zadání rutin a modulů dostupných v relacích, které používají konfiguraci relace.

Když uživatelé používají Invoke-Commandparametr ConfigurationName New-PSSession, nebo Enter-PSSession rutiny, mohou použít parametr ConfigurationName k označení konfigurace relace, která se používá pro relaci. A můžou změnit výchozí konfiguraci, kterou relace používají, změnou hodnoty $PSSessionConfigurationName proměnné předvoleb v relaci.

Další informace o konfiguracích relací najdete v nápovědě pro rutiny konfigurace relace. Pokud chcete najít rutiny konfigurace relace, zadejte:

Get-Command *PSSessionConfiguration

Co jsou konfigurace ventilátorů a ventilátorů?

Nejběžnější scénář vzdálené komunikace PowerShellu zahrnující více počítačů je konfigurace 1:N, ve které jeden místní počítač (počítač správce) spouští příkazy PowerShellu na mnoha vzdálených počítačích. To se označuje jako scénář "fan-out".

V některých podnicích je ale konfigurace M:1, kde se mnoho klientských počítačů připojuje k jednomu vzdálenému počítači, na kterém běží PowerShell, například souborový server nebo veřejný terminál. To se označuje jako konfigurace "fan-in".

Vzdálené komunikace PowerShellu podporuje konfiguraci ventilátoru i ventilátoru.

Pro konfiguraci ventilátoru používá PowerShell protokol Webových služeb pro správu (WS-Management) a službu WinRM, která podporuje implementaci WS-Management od Microsoftu. Když se místní počítač připojí ke vzdálenému počítači, služba WS-Management vytvoří připojení a pomocí modulu plug-in pro PowerShell spustí hostitelský proces PowerShellu (Wsmprovhost.exe) na vzdáleném počítači. Uživatel může zadat alternativní port, konfiguraci alternativní relace a další funkce pro přizpůsobení vzdáleného připojení.

K podpoře konfigurace "fan-in" používá PowerShell k hostování WS-Management internetovou informační službu (IIS), k načtení modulu plug-in PowerShellu a spuštění PowerShellu. V tomto scénáři se místo spuštění každé relace PowerShellu v samostatném procesu spustí všechny relace PowerShellu ve stejném hostitelském procesu.

Hostování služby IIS a vzdálená správa ventilátorů není podporována v systému Windows XP ani v systému Windows Server 2003.

V konfiguraci ventilátoru může uživatel zadat identifikátor URI připojení a koncový bod HTTP, včetně přenosu, názvu počítače, portu a názvu aplikace. Služba IIS předává všechny požadavky se zadaným názvem aplikace do aplikace. Výchozí hodnota je WS-Management, která může hostovat PowerShell.

Můžete také zadat mechanismus ověřování a zakázat nebo povolit přesměrování z koncových bodů HTTP a HTTPS.

Můžu otestovat vzdálené komunikace na jednom počítači, který není v doméně?

Ano. Vzdálené komunikace PowerShellu je k dispozici i v případě, že místní počítač není v doméně. Pomocí funkcí vzdálené komunikace se můžete připojit k relacím a vytvářet relace na stejném počítači. Funkce fungují stejně jako při připojování ke vzdálenému počítači.

Pokud chcete na počítači v pracovní skupině spustit vzdálené příkazy, změňte v počítači následující nastavení systému Windows.

Upozornění: Tato nastavení mají vliv na všechny uživatele v systému a můžou systém usnadnit útok se zlými úmysly. Při provádění těchto změn buďte opatrní.

  • Windows Vista, Windows 7, Windows 8:

    Vytvořte následující položku registru a pak nastavte její hodnotu na 1: LocalAccountTokenFilterPolicy v HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

    K přidání této položky můžete použít následující příkaz PowerShellu:

    $parameters = @{
      Path='HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
      Name='LocalAccountTokenFilterPolicy'
      propertyType='DWord'
      Value=1
    }
    New-ItemProperty @parameters
    
  • Windows Server 2003, Windows Server 2008, Windows Server 2012, Windows Server 2012 R2:

    Nejsou potřeba žádné změny, protože výchozí nastavení zásad "Přístup k síti: Sdílení a model zabezpečení pro místní účty" je "Classic". Ověřte nastavení v případě, že se změnilo.

Můžu na počítači v jiné doméně spustit vzdálené příkazy?

Ano. Příkazy se obvykle spouštějí bez chyby, i když možná budete muset použít parametr Credential objektu Invoke-Command, New-PSSessionnebo Enter-PSSession rutiny k zadání přihlašovacích údajů člena skupiny Správa istrators ve vzdáleném počítači. To se někdy vyžaduje, i když je aktuální uživatel členem skupiny Správa istrators na místních a vzdálených počítačích.

Pokud však vzdálený počítač není v doméně, které důvěřuje místnímu počítači, vzdálený počítač nemusí být schopen ověřit přihlašovací údaje uživatele.

Pokud chcete povolit ověřování, pomocí následujícího příkazu přidejte vzdálený počítač do seznamu důvěryhodných hostitelů pro místní počítač v prostředí WinRM. Na příkazovém řádku PowerShellu zadejte příkaz.

Set-Item WSMan:\localhost\Client\TrustedHosts -Value <Remote-computer-name>

Pokud chcete například přidat počítač Server01 do seznamu důvěryhodných hostitelů v místním počítači, zadejte na příkazovém řádku PowerShellu následující příkaz:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value Server01

Podporuje PowerShell vzdálené komunikace přes SSH?

Ano. Další informace najdete v tématu Vzdálené komunikace PowerShellu přes SSH.