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 naleznete v tématu about_Remote_Requirements.

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

Ano. Aby mohly pracovat vzdáleně, musí mít místní a vzdálené počítače protokol PowerShellu, rozhraní Microsoft .NET Framework a webových služeb pro správu (WS-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 naleznete 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 k systému Windows.

Počínaje windows PowerShellem 3.0 se informace o vzdálené relaci ukládají do vzdáleného počítače. 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 zvýšit ochranu, můžete vzdálený počítač nakonfigurovat tak, aby pro požadavky windows Remote Management (WinRM) používal protokol SSL (Secure Sockets Layer) místo protokolu HTTP. Uživatelé pak mohou při navazování připojení použít parametr UseSSLInvoke-Command, New-PSSessiona rutiny Enter-PSSession. 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 cmdlety nepoužívají vzdálenou správu PowerShellu. Můžete je použít na libovolném počítači, na kterém běží PowerShell. Následující cmdlety nevyžadují vzdálenou správu PowerShellu:

  • 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 ComputerName parametr 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

Například:

Get-Help Get-HotFix -Parameter ComputerName

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

Jak 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 ({}). K zadání příkazu použijte parametr ScriptBlockInvoke-Command.

K určení vzdáleného počítače použijte parametr Invoke-Command. Nebo můžete vytvořit trvalé připojení ke vzdálenému počítači (relaci) a pak pomocí parametru SessionInvoke-Command 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 vzdálených příkazech najdete v tématu about_Remote a nápovědě pro cmdlety, které podporují vzdálenou komunikaci.

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

Pomocí 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:>

Příkazy, které zadáte, se spustí ve vzdáleném počítači, 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 v tématu 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 PowerShellu (PSSession), která je připojená ke vzdálenému počítači.

Pokud použijete parametr ComputerNameInvoke-Command nebo Enter-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. Toto chování funguje dobře pro 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.

Pokud k vytvoření psSession použijete rutinu New-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. Jinak dočasné připojení vytvořené parametrem ComputerName stačí 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 instancí PSSession.

Když spustíte příkaz Invoke-Command, 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 článku 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 k dispozici. Kromě toho $PROFILE automatická proměnná není ve vzdálených relacích naplněna.

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

Například následující příkaz spustí CurrentUserCurrentHost profil 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.

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í najdete 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.

Funkce omezení se vztahuje na každý příkaz, 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, počet souběžných připojení je součet 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 objekty vrácené vzdálenými příkazy. Serializace převádí každý objekt na datové prvky XML (CLIXML) Common Language Infrastructure pro přenos.

Když PowerShell přijme serializovaný objekt, převede CLIXML na deserializovaný typ objektu. Deserializovaný objekt je přesný záznam vlastností objektu, ale již není živým objektem. Deserializovaný objekt nemá žádné metody, protože již 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é Invoke-Command mají další vlastnosti, které vám pomohou určit původ příkazu.

Některé typy objektů, jako jsou například 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 naleznete 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í. Zatímco úloha běží, můžete pokračovat v práci v relaci.

Ú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 ale můžete spustit libovolný vzdálený příkaz jako úlohu na pozadí. A Invoke-Command můžete použít ke vzdálenému spuštění příkazu Start-Job.

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 pro 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 ale nemůžete použít k otevření uživatelského rozhraní pro žádný program na vzdáleném počítači.

Když spustíte program windows na vzdáleném počítači, 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í. Program je stále spuštěný. Příkazový řádek se nevrátí, dokud program nezastavíte nebo stisknete 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 na vzdáleném počítači proces Poznámkového bloku, ale uživatelské rozhraní Poznámkového bloku se nezobrazí. Pokud chcete příkaz přerušit a obnovit příkazový řádek, stiskněte 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 ve svém počítači. Oprávnění k těmto konfiguracím relace můžete nastavit tak, aby omezte, kdo může na vašem počítači vzdáleně spouštět příkazy. Můžete také omezit, které příkazy se dají spustit.

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í v počítači: Microsoft.PowerShell, Microsoft.PowerShell.Workflow a Microsoft.PowerShell32 (pouze 64bitové operační systémy). Enable-PSRemoting nastaví popisovač zabezpečení pro konfiguraci tak, aby je mohli používat jenom členové skupiny Administrators 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 umožňuje rutina New-PSSessionConfigurationFile 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í rutiny Invoke-Command, New-PSSession nebo Enter-PSSession, 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 proměnné předvoleb $PSSessionConfigurationName 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 služby WS-Management od Microsoftu. Když se místní počítač připojí ke vzdálenému počítači, WS-Management vytvoří připojení a použije modul plug-in pro PowerShell ke spuštění hostitelského procesu 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ů nejsou podporovány 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ý přístup PowerShellu je dostupný i tehdy, když 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 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:

    Výchozí nastavení zásad síťového přístupu: model sdílení a zabezpečení pro místní účty je Classic. Ověřte, že je nastavení nastaveno na Classichodnotu .

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. Možná ale budete muset použít parametr Credential s příkazy modulu Invoke-Command, New-PSSession, nebo Enter-PSSession. Přihlašovací údaje je možné vyžadovat, i když je aktuální uživatel členem skupiny Administrators na místních a vzdálených počítačích.

Pokud ale 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á správa PowerShellu přes SSH.