Sdílet prostřednictvím


Automatizace a správa virtuálních počítačů pomocí PowerShellu

PowerShell Direct můžete použít ke spuštění libovolného PowerShellu ve Windows 10 nebo novějším nebo windows Serveru 2016 nebo novějším virtuálním počítači z vašeho hostitele Hyper-V. Použijte PowerShell Direct bez ohledu na konfiguraci sítě nebo nastavení vzdálené správy.

Tady je několik způsobů, jak spustit PowerShell Direct:

Požadavky

Požadavky na operační systém:

  • Hostitel: Windows 10, Windows Server 2016 nebo novější s Hyper-V.
  • Host nebo virtuální počítač: Windows 10, Windows Server 2016 nebo novější.

Pokud spravujete starší virtuální počítače, použijte připojení k virtuálnímu počítači (VMConnect) nebo se připojte přes síťové připojení.

Požadavky na konfiguraci:

  • Virtuální počítač musí běžet místně na hostiteli.
  • Virtuální počítač musí být zapnutý a spuštěný s alespoň jedním nakonfigurovaným profilem uživatele.
  • Musíte být přihlášeni k hostitelskému počítači jako správce Hyper-V.
  • Musíte zadat platné přihlašovací údaje uživatele pro virtuální počítač.

Vytvoření a ukončení interaktivní relace PowerShellu

Nejjednodušší způsob, jak spustit příkazy PowerShellu na virtuálním počítači, je spustit interaktivní relaci.

Když se relace spustí, příkazy, které zadáte na virtuálním počítači, se spustí stejně, jako kdybyste je zadali přímo do relace PowerShellu na samotném virtuálním počítači.

Spuštění interaktivní relace:

  1. Na hostiteli Hyper-V otevřete PowerShell jako správce.

  2. Spuštěním jednoho z následujících příkazů vytvořte interaktivní relaci pomocí názvu virtuálního počítače nebo identifikátoru GUID:

    Enter-PSSession -VMName <VMName>
    Enter-PSSession -VMId <VMId>
    

    Po zobrazení výzvy zadejte přihlašovací údaje pro virtuální počítač.

  3. Spusťte příkazy na virtuálním počítači. Název virtuálního počítače by se měl zobrazit jako předpona výzvy PowerShellu jako následující:

    [VMName]: PS C:\>
    

    Jakýkoli příkaz, který spustíte, se provádí na vašem virtuálním počítači. Pokud chcete testovat, spusťte ipconfig nebo hostname se ujistěte, že tyto příkazy běží na virtuálním počítači.

  4. Až budete hotovi, zavřete relaci spuštěním následujícího příkazu:

     Exit-PSSession 
    

Poznámka:

Pokud se vaše relace nepřipojí, podívejte se na řešení potíží s potenciálními příčinami.

Další informace o těchto rutinách najdete v tématu Enter-PSSession a Exit-PSSession.

Spuštění skriptu nebo příkazu s Invoke-Command

PowerShell Direct s Invoke-Command je ideální pro situace, kdy potřebujete spustit jeden příkaz nebo jeden skript na virtuálním počítači, ale nemusíte dál pracovat s virtuálním počítačem mimo tento bod.

Spuštění jednoho příkazu:

  1. Na hostiteli Hyper-V otevřete PowerShell jako správce.

  2. Spuštěním jednoho z následujících příkazů vytvořte relaci pomocí názvu virtuálního počítače nebo identifikátoru GUID:

    Invoke-Command -VMName <VMName> -ScriptBlock { command } 
    Invoke-Command -VMId <VMId> -ScriptBlock { command }
    

    Po zobrazení výzvy zadejte přihlašovací údaje pro virtuální počítač.

    Příkaz se spustí na virtuálním počítači. Pokud příkaz vytvoří výstup, zobrazí se v konzole. Připojení se automaticky zavře, jakmile se příkaz spustí.

Spuštění skriptu:

  1. Na hostiteli Hyper-V otevřete PowerShell jako správce.

  2. Spuštěním jednoho z následujících příkazů vytvořte relaci pomocí názvu virtuálního počítače nebo identifikátoru GUID:

    Invoke-Command -VMName <VMName> -FilePath C:\host\script_path\script.ps1 
    Invoke-Command -VMId <VMId> -FilePath C:\host\script_path\script.ps1 
    

    Po zobrazení výzvy zadejte přihlašovací údaje pro virtuální počítač.

    Skript běží na virtuálním počítači. Připojení se automaticky zavře, jakmile se příkaz spustí.

Další informace o tomto cmdletu naleznete viz Invoke-Command.

Kopírování souborů pomocí New-PSSession a Copy-Item

Poznámka:

PowerShell Direct podporuje trvalé relace jenom v buildech Windows 14280 a novějších.

Trvalé relace PowerShellu jsou neuvěřitelně užitečné při psaní skriptů, které koordinuje akce napříč jedním nebo více vzdálenými počítači. Po vytvoření existují trvalé relace na pozadí, dokud se nerozhodnete je odstranit. To znamená, že můžete znovu odkazovat na stejnou relaci pomocí Invoke-Command přihlašovacích údajů nebo Enter-PSSession bez předání přihlašovacích údajů.

Podle stejného tokenu relace uchovávají stav. Vzhledem k tomu, že trvalé relace přetrvávají, zachovají se všechny proměnné, které vytvoříte v relaci nebo které předáte relaci, ve více voláních. K práci s trvalými relacemi můžete použít řadu nástrojů. V tomto příkladu můžete pomocí rutiny New-PSSession a Copy-Item přesunout data z hostitele na virtuální počítač a z virtuálního počítače do hostitele.

Pokud chcete vytvořit relaci, zkopírujte soubory:

  1. Na hostiteli Hyper-V otevřete PowerShell jako správce.

  2. Spuštěním jednoho z následujících příkazů vytvořte trvalou relaci PowerShellu s virtuálním počítačem pomocí New-PSSessionpříkazu .

    $s = New-PSSession -VMName <VMName> -Credential (Get-Credential)
    $s = New-PSSession -VMId <VMId> -Credential (Get-Credential)
    

    Po zobrazení výzvy zadejte přihlašovací údaje pro virtuální počítač.

    Výstraha

    V buildech před 14500 došlo k chybě. Pokud nezadáte explicitně přihlašovací údaje s příznakem -Credential , služba v hostovi se chybově ukončí a je potřeba ji restartovat. Pokud narazíte na tento problém, projděte si část Chyba: Vzdálená relace mohla být ukončena pro pokyny k alternativnímu řešení.

  3. Zkopírujte soubor do virtuálního počítače.

    Pokud chcete z hostitelského počítače zkopírovat C:\host_path\data.txt do virtuálního počítače, spusťte:

    Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
    
  4. Zkopírujte soubor z virtuálního počítače (na hostiteli).

    Pokud chcete zkopírovat C:\guest_path\data.txt hostitele z virtuálního počítače, spusťte:

    Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
    
  5. Zastavte trvalou relaci pomocí Remove-PSSession.

    Remove-PSSession $s
    

Řešení problémů

PowerShell Direct zobrazí malou sadu běžných chybových zpráv. Následující části popisují nejběžnější chybové zprávy, některé příčiny a nástroje pro diagnostiku problémů.

Parametry -VMName nebo -VMID neexistují

Problém:

Enter-PSSession, Invoke-Command nebo New-PSSession nemají -VMName nebo -VMId parametr.

Potenciální příčiny:

Nejpravděpodobnějším problémem je, že hostitelský operační systém nepodporuje PowerShell Direct.

Sestavení Windows můžete zkontrolovat spuštěním následujícího příkazu:

[System.Environment]::OSVersion.Version

Pokud používáte podporované sestavení, je také možné, že vaše verze PowerShellu nepodporuje Direct PowerShell. Pro PowerShell Direct a JEA musí být hlavní verze 5 nebo novější.

Sestavení verze PowerShellu můžete zkontrolovat spuštěním následujícího příkazu:

$PSVersionTable.PSVersion

Chyba: Vzdálená relace mohla být ukončena.

Poznámka:

U Enter-PSSession mezi buildy hostitele 10240 a 12400 se všechny chyby hlásí jako "Vzdálená relace mohla být ukončena".

Zpráva o chybě:

Enter-PSSession: Došlo k chybě, kterou Windows PowerShell nedokáže zpracovat. Vzdálená relace mohla být ukončena.

Potenciální příčiny:

  • Virtuální počítač existuje, ale není spuštěný.
  • Hostovaný operační systém nepodporuje PowerShell Direct. Viz požadavky.
  • PowerShell zatím není v hostovi k dispozici.
    • Spuštění operačního systému se nedokončilo.
    • Operační systém se nemůže správně spustit.
    • Některá událost doby spuštění vyžaduje vstup uživatele.

Pomocí rutiny Get-VM zkontrolujte, které virtuální počítače běží na hostiteli.

Zpráva o chybě:

New-PSSession: Došlo k chybě, kterou Windows PowerShell nedokáže zpracovat. Vzdálená relace mohla být ukončena.

Potenciální příčiny:

  • Jeden z důvodů uvedených dříve – všechny platí pro New-PSSession
  • Chyba v aktuálních buildech, kde musíte explicitně předat přihlašovací údaje -Credential. Pokud k této chybě dojde, celá služba přestane reagovat v hostovaném operačním systému a je potřeba ji restartovat. Pomocí enter-PSSession můžete zkontrolovat, jestli je relace stále dostupná.

Pokud chcete problém s přihlašovacími údaji obejít, přihlaste se k virtuálnímu počítači pomocí VMConnect, otevřete PowerShell a restartujte službu vmicvmsession pomocí následujícího příkazu PowerShellu:

Restart-Service -Name vmicvmsession

Chyba: Sadu parametrů nejde vyřešit

Zpráva o chybě:

Enter-PSSession: Parametrická sada nelze vyřešit pomocí specifikovaných pojmenovaných parametrů.

Potenciální příčiny:

  • Nemůžete použít -RunAsAdministrator při připojování k virtuálním počítačům.

    Při připojování ke kontejneru -RunAsAdministrator Windows umožňuje příznak připojení správce bez explicitních přihlašovacích údajů. Vzhledem k tomu, že virtuální počítače neudělují implicitnímu správci hostitele přístup, musíte explicitně zadat přihlašovací údaje.

Přihlašovací údaje správce můžete předat virtuálnímu počítači pomocí parametru -Credential nebo je po zobrazení výzvy zadat ručně.

Chyba: Přihlašovací údaje jsou neplatné.

Zpráva o chybě:

Enter-PSSession: Přihlašovací údaje jsou neplatné.

Potenciální příčiny:

  • Přihlašovací údaje hosta se nedají ověřit.
    • Zadané přihlašovací údaje byly nesprávné.
    • Host nemá žádné uživatelské účty (operační systém se nespustí dříve)
    • Pokud se připojujete jako správce: Správce není nastavený jako aktivní uživatel. Další informace najdete v tématu Povolení a zakázání předdefinovaného účtu správce.

Chyba: Vstupní parametr VMName se nepřekládá na žádný virtuální počítač.

Zpráva o chybě:

Enter-PSSession: Vstupní parametr VMName neodkazuje na žádný virtuální počítač.

Potenciální příčiny:

  • Nejste správcem Hyper-V.
  • Virtuální počítač neexistuje.

Pomocí rutiny Get-VM zkontrolujte, že přihlašovací údaje, které používáte, mají roli správce Hyper-V a zjistěte, které virtuální počítače běží místně na hostiteli a spuštěné.

Ukázky a uživatelské příručky

PowerShell Direct podporuje just Enough Administration (JEA).

Podívejte se na ukázky na GitHubu.