Udostępnij za pośrednictwem


Automatyzacja maszyn wirtualnych i zarządzanie nimi przy użyciu programu PowerShell

Możesz użyć programu PowerShell Direct, aby uruchomić dowolny program PowerShell w systemie Windows 10 lub nowszym lub Windows Server 2016 lub nowszym maszyny wirtualnej z hosta Hyper-V. Użyj programu PowerShell Direct niezależnie od konfiguracji sieci lub ustawień zdalnego zarządzania.

Oto kilka sposobów uruchamiania programu PowerShell Direct:

Wymagania

Wymagania dotyczące systemu operacyjnego:

  • Host: Windows 10, Windows Server 2016 lub nowszy z funkcją Hyper-V.
  • Gość/maszyna wirtualna: Windows 10, Windows Server 2016 lub nowszy.

Jeśli zarządzasz starszymi maszynami wirtualnymi, użyj połączenia maszyny wirtualnej (VMConnect) lub skonfiguruj sieć wirtualną dla maszyny wirtualnej.

Wymagania dotyczące konfiguracji:

  • Maszyna wirtualna musi być uruchomiona lokalnie na hoście.
  • Maszyna wirtualna musi być włączona i uruchomiona z co najmniej jednym skonfigurowanym profilem użytkownika.
  • Musisz zalogować się do komputera hosta jako administrator Hyper-V.
  • Musisz podać prawidłowe poświadczenia użytkownika dla maszyny wirtualnej.

Tworzenie i zamykanie interakcyjnej sesji programu PowerShell

Najprostszym sposobem uruchamiania poleceń programu PowerShell na maszynie wirtualnej jest uruchomienie sesji interaktywnej.

Gdy sesja zostanie rozpoczęta, polecenia, które wpisujesz, są uruchamiane na maszynie wirtualnej, tak jakbyś wpisywał je bezpośrednio w sesji programu PowerShell na tej samej maszynie wirtualnej.

Aby rozpocząć sesję interaktywną:

  1. Na hoście Hyper-V otwórz program PowerShell jako administrator.

  2. Uruchom jedno z następujących poleceń, aby utworzyć sesję interaktywną przy użyciu nazwy maszyny wirtualnej lub identyfikatora GUID:

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

    Po wyświetleniu monitu systemowego podaj poświadczenia dla maszyny wirtualnej.

  3. Wykonaj polecenia na maszynie wirtualnej. Jako prefiks wiersza poleceń PowerShell powinna zostać wyświetlona nazwa VMName w następujący sposób:

    [VMName]: PS C:\>
    

    Każde polecenie, które zostanie uruchomione, będzie działać na twojej maszynie wirtualnej. Aby przetestować, możesz uruchomić ipconfig lub hostname, aby upewnić się, że te polecenia działają na maszynie wirtualnej.

  4. Po zakończeniu uruchom następujące polecenie, aby zamknąć sesję:

     Exit-PSSession 
    

Uwaga / Notatka

Jeśli sesja nie zostanie nawiązana, zobacz rozwiązywanie problemów, aby poznać potencjalne przyczyny.

Aby dowiedzieć się więcej na temat tych cmdletów, zobacz Enter-PSSession i Exit-PSSession.

Uruchamianie skryptu lub polecenia przy użyciu Invoke-Command

Program PowerShell Direct z Invoke-Command jest idealny w sytuacjach, w których należy uruchomić jedno polecenie lub jeden skrypt na maszynie wirtualnej, ale nie musi kontynuować interakcji z maszyną wirtualną poza tym punktem.

Aby uruchomić jedno polecenie:

  1. Na hoście Hyper-V otwórz program PowerShell jako administrator.

  2. Uruchom jedno z następujących poleceń, aby utworzyć sesję przy użyciu nazwy maszyny wirtualnej lub identyfikatora GUID:

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

    Po wyświetleniu monitu systemowego podaj poświadczenia dla maszyny wirtualnej.

    Polecenie zostanie wykonane na maszynie wirtualnej, a jeśli na konsoli znajdują się dane wyjściowe, zostaną one wyświetlone na twojej konsoli. Połączenie zostanie zamknięte automatycznie po uruchomieniu polecenia.

Aby uruchomić skrypt:

  1. Na hoście Hyper-V otwórz program PowerShell jako administrator.

  2. Uruchom jedno z następujących poleceń, aby utworzyć sesję przy użyciu nazwy maszyny wirtualnej lub identyfikatora GUID:

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

    Po wyświetleniu monitu systemowego podaj poświadczenia dla maszyny wirtualnej.

    Skrypt zostanie wykonany na maszynie wirtualnej. Połączenie zostanie zamknięte automatycznie po uruchomieniu polecenia.

Aby dowiedzieć się więcej na temat tego polecenia cmdlet, zobacz Invoke-Command .

Kopiowanie plików za pomocą New-PSSession i Copy-Item

Uwaga / Notatka

Program PowerShell Direct obsługuje tylko trwałe sesje w kompilacjach systemu Windows 14280 i nowszych

Trwałe sesje programu PowerShell są niezwykle przydatne podczas pisania skryptów, które koordynują akcje na co najmniej jednej maszynie zdalnej. Po utworzeniu trwałe sesje istnieją w tle do momentu podjęcia decyzji o ich usunięciu. Oznacza to, że możesz wielokrotnie odwoływać się do tej samej sesji przy użyciu Invoke-Command lub Enter-PSSession bez przekazywania poświadczeń.

Za pomocą tego samego tokenu sesje przechowują stan. Ponieważ sesje trwałe są utrwalane, wszystkie zmienne utworzone w sesji lub przekazane do sesji zostaną zachowane w wielu wywołaniach. Dostępnych jest wiele narzędzi do pracy z sesjami trwałymi. W tym przykładzie użyjemy New-PSSession i Copy-Item, aby przenieść dane z hosta na maszynę wirtualną i z maszyny wirtualnej do hosta.

Aby utworzyć sesję, skopiuj pliki:

  1. Na hoście Hyper-V otwórz program PowerShell jako administrator.

  2. Uruchom jedno z następujących poleceń, aby utworzyć trwałą sesję programu PowerShell na maszynie wirtualnej przy użyciu polecenia New-PSSession.

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

    Po wyświetleniu monitu systemowego podaj poświadczenia dla maszyny wirtualnej.

    Ostrzeżenie

    W kompilacjach o numerach wersji poniżej 14500 występuje usterka. Jeśli poświadczenia nie są jawnie określone z flagą -Credential, usługa w systemie gościa zawiesi się i będzie musiała zostać ponownie uruchomiona. Jeśli napotkasz ten problem, instrukcje obejścia są dostępne w sekcji Błąd: sesja zdalna mogła się zakończyć.

  3. Skopiuj plik do maszyny wirtualnej.

    Aby skopiować C:\host_path\data.txt na maszynę wirtualną z maszyny hosta, uruchom polecenie:

    Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
    
  4. Skopiuj plik z maszyny wirtualnej (na hoście).

    Aby skopiować C:\guest_path\data.txt z hosta do maszyny wirtualnej, uruchom polecenie:

    Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
    
  5. Zatrzymaj sesję trwałą przy użyciu polecenia Remove-PSSession.

    Remove-PSSession $s
    

Rozwiązywanie problemów

Istnieje niewielki zestaw typowych komunikatów o błędach wyświetlanych za pośrednictwem programu PowerShell Direct. W poniższych sekcjach opisano najbardziej typowe komunikaty o błędach, niektóre przyczyny i narzędzia do diagnozowania problemów.

-VMName lub parametry -VMID nie istnieją

Problem:

Enter-PSSession, lub Invoke-CommandNew-PSSession nie mają parametru -VMName lub -VMId .

Prawdopodobne przyczyny:

Najbardziej prawdopodobnym problemem jest to, że program PowerShell Direct nie jest obsługiwany przez system operacyjny hosta.

Kompilację systemu Windows można sprawdzić, uruchamiając następujące polecenie:

[System.Environment]::OSVersion.Version

Jeśli używasz obsługiwanej kompilacji, możliwe jest również, że wersja programu PowerShell nie uruchamia programu PowerShell Direct. W przypadku programu PowerShell Direct i JEA wersja główna musi mieć wartość 5 lub nowszą.

Możesz sprawdzić kompilację wersji programu PowerShell, uruchamiając następujące polecenie:

$PSVersionTable.PSVersion

Błąd: Sesja zdalna mogła zostać zakończona

Uwaga / Notatka

W przypadku Enter-PSSession pomiędzy kompilacjami hosta 10240 a 12400, wszystkie poniższe błędy są zgłaszane jako „Sesja zdalna mogła zostać zakończona”.

Komunikat o błędzie:

Enter-PSSession: wystąpił błąd, którego program Windows PowerShell nie może obsłużyć. Sesja zdalna mogła zostać zakończona.

Prawdopodobne przyczyny:

  • Maszyna wirtualna istnieje, ale nie jest uruchomiona.
  • System operacyjny gościa nie obsługuje programu PowerShell Direct. Zobacz wymagania.
  • Program PowerShell nie jest jeszcze dostępny w gościu
    • System operacyjny nie zakończył rozruchu
    • System operacyjny nie może poprawnie uruchomić
    • Pewne zdarzenie w czasie rozruchu wymaga interakcji ze strony użytkownika

Możesz użyć polecenia cmdlet Get-VM , aby sprawdzić, które maszyny wirtualne są uruchomione na hoście.

Komunikat o błędzie:

New-PSSession: wystąpił błąd, którego program Windows PowerShell nie może obsłużyć. Sesja zdalna mogła zostać zakończona.

Prawdopodobne przyczyny:

  • Jedną z przyczyn wymienionych powyżej — wszystkie one mają takie samo zastosowanie do New-PSSession
  • Usterka w bieżących kompilacjach, w której poświadczenia muszą być jawnie przekazywane za pomocą polecenia -Credential. W takim przypadku cała usługa zawiesza się w systemie operacyjnym gościa i musi zostać ponownie uruchomiona. Możesz sprawdzić, czy sesja jest nadal dostępna za pomocą polecenia Enter-PSSession.

Aby obejść problem z poświadczeniami, zaloguj się do maszyny wirtualnej przy użyciu programu VMConnect, otwórz program PowerShell i uruchom ponownie usługę vmicvmsession przy użyciu następującego programu PowerShell:

Restart-Service -Name vmicvmsession

Błąd: nie można rozpoznać zestawu parametrów

Komunikat o błędzie:

Enter-PSSession: nie można rozpoznać zestawu parametrów przy użyciu określonych nazwanych parametrów.

Prawdopodobne przyczyny:

  • -RunAsAdministrator nie jest obsługiwane podczas łączenia z maszynami wirtualnymi.

    Podczas nawiązywania połączenia z kontenerem systemu Windows flaga -RunAsAdministrator zezwala na połączenia administratora bez jawnych poświadczeń. Ponieważ maszyny wirtualne nie zapewniają hostowi automatycznego dostępu administratora, należy ręcznie wprowadzić poświadczenia.

Poświadczenia administratora można przekazać do maszyny wirtualnej za pomocą parametru -Credential lub wprowadzając je ręcznie po wyświetleniu monitu.

Błąd: poświadczenie jest nieprawidłowe

Komunikat o błędzie:

Enter-PSSession: poświadczenie jest nieprawidłowe.

Prawdopodobne przyczyny:

  • Nie można zweryfikować poświadczeń gościa
    • Podane poświadczenia były nieprawidłowe.
    • Brak kont użytkowników na maszynie gościa (system operacyjny nie został wcześniej uruchomiony)
    • Jeśli łączysz się jako Administrator: Administrator nie został ustawiony jako aktywny użytkownik. Dowiedz się więcej w artykule Włączanie i wyłączanie wbudowanego konta administratora.

Błąd: Wejściowy parametr VMName nie jest rozpoznawany dla żadnej maszyny wirtualnej.

Komunikat o błędzie:

Enter-PSSession: wejściowy parametr VMName nie jest rozpoznawany dla żadnej maszyny wirtualnej.

Prawdopodobne przyczyny:

  • Nie jesteś administratorem Hyper-V.
  • Maszyna wirtualna nie istnieje.

Możesz użyć polecenia cmdlet Get-VM , aby sprawdzić, czy używane poświadczenia mają rolę administratora Hyper-V i sprawdzić, które maszyny wirtualne są uruchomione lokalnie na hoście i uruchomione.

Przykłady i przewodniki użytkownika

Program PowerShell Direct obsługuje usługę Just Enough Administration (JEA).

Zapoznaj się z przykładami w witrynie GitHub.