Udostępnij za pomocą


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:

Requirements

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 połącz się za pośrednictwem połączenia sieciowego.

Wymagania dotyczące konfiguracji:

  • Maszyna wirtualna musi działać 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.

Po rozpoczęciu sesji polecenia uruchamiane na maszynie wirtualnej są uruchamiane tak samo, jak w przypadku wpisywania ich bezpośrednio w sesji programu PowerShell na 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 wprowadź poświadczenia dla maszyny wirtualnej.

  3. Uruchom polecenia na maszynie wirtualnej. Jako prefiks monitu programu PowerShell powinien zostać wyświetlony ciąg VMName w następujący sposób:

    [VMName]: PS C:\>
    

    Każde uruchamiane polecenie jest wykonywane na maszynie wirtualnej. Aby przetestować, uruchom polecenie ipconfig lub hostname upewnij się, że te polecenia są uruchamiane 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 z potencjalnymi przyczynami.

Aby dowiedzieć się więcej na temat tych poleceń cmdlet, 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 musisz uruchomić jedno polecenie lub jeden skrypt na maszynie wirtualnej, ale nie trzeba 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 wprowadź poświadczenia dla maszyny wirtualnej.

    Polecenie jest uruchamiane na maszynie wirtualnej. Jeśli polecenie generuje dane wyjściowe, zobaczysz je w 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 wprowadź poświadczenia dla maszyny wirtualnej.

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

Aby uzyskać więcej informacji 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 odwołać się do tej samej sesji ponownie z Invoke-Command przekazywaniem poświadczeń lub Enter-PSSession bez przekazywania poświadczeń.

Za pomocą tego samego tokenu sesje przechowują stan. Ponieważ sesje trwałe są utrwalane, wszystkie zmienne tworzone w sesji lub przekazywane do sesji są zachowywane w wielu wywołaniach. Do pracy z sesjami trwałymi można użyć wielu narzędzi. W tym przykładzie użyj polecenia 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 wprowadź poświadczenia dla maszyny wirtualnej.

    Ostrzeżenie

    W kompilacjach występuje usterka przed 14500. Jeśli nie określisz jawnie poświadczeń z flagą -Credential, usługa w systemie gościa ulega awarii i musi zostać ponownie uruchomiona. Jeśli wystąpi ten problem, zobacz sekcję Błąd: sesja zdalna mogła zostać zakończona , aby uzyskać instrukcje obejścia.

  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 do hosta z 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

Program PowerShell Direct przedstawia niewielki zestaw typowych komunikatów o błędach. 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 ma parametru -VMName lub -VMId .

Potencjalne przyczyny:

Najbardziej prawdopodobnym problemem jest to, że system operacyjny hosta nie obsługuje programu PowerShell Direct.

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 obsługuje 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 między kompilacjami hosta 10240 i 12400 wszystkie błędy są raportowane 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.

Potencjalne 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ć
    • Niektóre zdarzenie czasu rozruchu wymaga danych wejściowych użytkownika

Użyj 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.

Potencjalne przyczyny:

  • Jedna z wymienionych wcześniej przyczyn — wszystkie mają zastosowanie do New-PSSession
  • Usterka w bieżących kompilacjach, w której należy jawnie przekazać poświadczenia za pomocą polecenia -Credential. W przypadku wystąpienia tej usterki 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 polecenia 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.

Potencjalne przyczyny:

  • Nie można używać -RunAsAdministrator podczas nawiązywania połą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 przyznają hostowi dorozumianego 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.

Potencjalne przyczyny:

  • Nie można zweryfikować poświadczeń gościa
    • Podane poświadczenia były nieprawidłowe.
    • Brak kont użytkowników w trybie gościa (system operacyjny nie został wcześniej uruchomiony)
    • W przypadku nawiązywania połączenia jako administrator: administrator nie jest ustawiony jako aktywny użytkownik. Aby uzyskać więcej informacji, zobacz 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 odnosi się do żadnej z maszyn wirtualnych.

Potencjalne przyczyny:

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

Użyj 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.