Dela via


Automatisering och hantering av virtuella datorer med PowerShell

Du kan använda PowerShell Direct för att köra godtyckliga PowerShell i en Windows 10 eller senare, eller Windows Server 2016 eller senare, virtuell dator från din Hyper-V värd. Använd PowerShell Direct oavsett nätverkskonfiguration eller fjärrhanteringsinställningar.

Här följer några sätt att köra PowerShell Direct:

Kravspecifikation

Operativsystemkrav:

  • Värddator: Windows 10, Windows Server 2016 eller senare med Hyper-V.
  • Gäst/virtuell dator: Windows 10, Windows Server 2016 eller senare.

Om du hanterar äldre virtuella datorer använder du Virtual Machine Connection (VMConnect) eller konfigurerar ett virtuellt nätverk för den virtuella datorn.

Konfigurationskrav:

  • Den virtuella datorn måste köras lokalt på värddatorn.
  • Den virtuella datorn måste vara aktiverad och köras med minst en konfigurerad användarprofil.
  • Du måste vara inloggad på värddatorn som Hyper-V administratör.
  • Du måste ange giltiga autentiseringsuppgifter för den virtuella datorn.

Skapa och avsluta en interaktiv PowerShell-session

Det enklaste sättet att köra PowerShell-kommandon på en virtuell dator är att starta en interaktiv session.

När sessionen startar körs de kommandon som du skriver på den virtuella datorn, precis som om du skrev in dem direkt i en PowerShell-session på själva den virtuella datorn.

Så här startar du en interaktiv session:

  1. Öppna PowerShell som administratör på Hyper-V värd.

  2. Kör något av följande kommandon för att skapa en interaktiv session med hjälp av namnet på den virtuella datorn eller GUID:

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

    Ange autentiseringsuppgifter för den virtuella datorn när du uppmanas att göra det.

  3. Kör kommandon på den virtuella datorn. Du bör se VMName som prefix för PowerShell-prompten som följande:

    [VMName]: PS C:\>
    

    Alla kommandokörningar körs på den virtuella datorn. För att testa kan du köra ipconfig eller hostname kontrollera att dessa kommandon körs på den virtuella datorn.

  4. När du är klar kör du följande kommando för att stänga sessionen:

     Exit-PSSession 
    

Anmärkning

Om sessionen inte ansluter kan du titta i felsökningsguiden för möjliga orsaker.

Mer information om dessa cmdletar finns i Enter-PSSession och Exit-PSSession.

Kör ett skript eller kommando med Invoke-Command

PowerShell Direct med Invoke-Command är perfekt för situationer där du behöver köra ett kommando eller ett skript på en virtuell dator men inte behöver fortsätta interagera med den virtuella datorn utöver den punkten.

Så här kör du ett enda kommando:

  1. Öppna PowerShell som administratör på Hyper-V värd.

  2. Kör något av följande kommandon för att skapa en session med hjälp av namnet på den virtuella datorn eller GUID:

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

    Ange autentiseringsuppgifter för den virtuella datorn när du uppmanas att göra det.

    Kommandot körs på den virtuella datorn, om det finns utdata till konsolen skrivs det ut till konsolen. Anslutningen stängs automatiskt så snart kommandot körs.

Så här kör du ett skript:

  1. Öppna PowerShell som administratör på Hyper-V värd.

  2. Kör något av följande kommandon för att skapa en session med hjälp av namnet på den virtuella datorn eller GUID:

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

    Ange autentiseringsuppgifter för den virtuella datorn när du uppmanas att göra det.

    Skriptet körs på den virtuella datorn. Anslutningen stängs automatiskt så snart kommandot körs.

Mer information om den här cmdleten finns i Invoke-Command.

Kopiera filer med New-PSSession och Copy-Item

Anmärkning

PowerShell Direct stöder endast beständiga sessioner i Windows-versioner 14280 och senare

Beständiga PowerShell-sessioner är otroligt användbara när du skriver skript som samordnar åtgärder på en eller flera fjärrdatorer. När de har skapats finns beständiga sessioner i bakgrunden tills du bestämmer dig för att ta bort dem. Det innebär att du kan referera till samma session om och om igen med Invoke-Command eller Enter-PSSession utan att skicka autentiseringsuppgifter.

På samma sätt behåller sessioner tillstånd. Eftersom beständiga sessioner kvarstår bevaras alla variabler som skapas i en session eller skickas till en session över flera anrop. Det finns ett antal tillgängliga verktyg för att arbeta med beständiga sessioner. I det här exemplet använder vi New-PSSession och Copy-Item för att flytta data från värden till en virtuell dator och från en virtuell dator till värden.

Så här skapar du en session och kopierar sedan filer:

  1. Öppna PowerShell som administratör på Hyper-V värd.

  2. Kör något av följande kommandon för att skapa en beständig PowerShell-session till den virtuella datorn med .New-PSSession

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

    Ange autentiseringsuppgifter för den virtuella datorn när du uppmanas att göra det.

    Varning

    Det finns en bugg i versioner före 14500. Om autentiseringsuppgifterna inte uttryckligen anges med -Credential flaggan kraschar tjänsten i gästen och måste startas om. Om du stöter på det här problemet finns lösningsinstruktioner tillgängliga i avsnittet Fel: En fjärrsession kan ha avslutats.

  3. Kopiera en fil till den virtuella datorn.

    Om du vill kopiera C:\host_path\data.txt till den virtuella datorn från värddatorn kör du:

    Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
    
  4. Kopiera en fil från den virtuella datorn (på till värden).

    Om du vill kopiera C:\guest_path\data.txt till värden från den virtuella datorn kör du:

    Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
    
  5. Stoppa den beständiga sessionen med .Remove-PSSession

    Remove-PSSession $s
    

Felsökning

Det finns en liten uppsättning vanliga felmeddelanden som visas via PowerShell Direct. I följande avsnitt beskrivs de vanligaste felmeddelandena, vissa orsaker och verktyg för att diagnostisera problem.

-VMName eller -VMID parametrar finns inte

Problem:

Enter-PSSession, Invoke-Command, eller New-PSSession har inte en -VMName eller -VMId -parameter.

Möjliga orsaker:

Det mest sannolika problemet är att PowerShell Direct inte stöds av värdoperativsystemet.

Du kan kontrollera din Windows-version genom att köra följande kommando:

[System.Environment]::OSVersion.Version

Om du kör en version som stöds är det också möjligt att din version av PowerShell inte kör PowerShell Direct. För PowerShell Direct och JEA måste huvudversionen vara 5 eller senare.

Du kan kontrollera din PowerShell-version genom att köra följande kommando:

$PSVersionTable.PSVersion

Fel: En fjärrsession kan ha avslutats

Anmärkning

För Enter-PSSession mellan värdversionerna 10240 och 12400 rapporteras alla fel nedan som "En fjärrsession kan ha avslutats".

Felmeddelande:

Enter-PSSession : Ett fel har uppstått som Windows PowerShell inte kan hantera. En fjärrsession kan ha avslutats.

Möjliga orsaker:

  • Den virtuella datorn finns men körs inte.
  • Gästoperativsystemet stöder inte PowerShell Direct. Se krav.
  • PowerShell är inte tillgängligt i gästen ännu
    • Operativsystemet har inte startats klart
    • Operativsystemet kan inte startas korrekt
    • Vissa startprocesser behöver användarinmatning

Du kan använda cmdleten Get-VM för att kontrollera vilka virtuella datorer som körs på den lokala värden.

Felmeddelande:

New-PSSession : Ett fel har uppstått som Windows PowerShell inte kan hantera. En fjärrsession kan ha avslutats.

Möjliga orsaker:

  • En av anledningarna som anges ovan – alla är lika tillämpliga för New-PSSession
  • En bugg i aktuella versioner där autentiseringsuppgifter uttryckligen måste skickas med -Credential. När detta händer låser sig hela tjänsten i gästoperativsystemet och måste startas om. Du kan kontrollera om sessionen fortfarande är tillgänglig med Enter-PSSession.

Om du vill kringgå problemet med autentiseringsuppgifter loggar du in på den virtuella datorn med hjälp av VMConnect, öppnar PowerShell och startar om vmicvmsession-tjänsten med hjälp av följande PowerShell:

Restart-Service -Name vmicvmsession

Fel: Parameteruppsättningen kan inte lösas

Felmeddelande:

Enter-PSSession : Parameteruppsättningen kan inte lösas med de angivna namngivna parametrarna.

Möjliga orsaker:

  • -RunAsAdministrator stöds inte vid anslutning till virtuella datorer.

    När du ansluter till en Windows-container -RunAsAdministrator tillåter flaggan administratörsanslutningar utan explicita autentiseringsuppgifter. Eftersom virtuella datorer inte ger värden underförstådd administratörsåtkomst måste du uttryckligen ange autentiseringsuppgifter.

Administratörsautentiseringsuppgifter kan skickas till den virtuella datorn med parametern -Credential eller genom att ange dem manuellt när du uppmanas att göra det.

Fel: Autentiseringsuppgiften är ogiltig

Felmeddelande:

Enter-PSSession : Autentiseringsuppgiften är ogiltig.

Möjliga orsaker:

  • Det gick inte att verifiera gästautentiseringsuppgifterna
    • De angivna autentiseringsuppgifterna var felaktiga.
    • Det finns inga användarkonton i gästen (operativsystemet har inte startats tidigare)
    • Om du ansluter som administratör: Administratören har inte angetts som en aktiv användare. Läs mer i Aktivera och inaktivera det inbyggda administratörskontot.

Fel: Indataparametern VMName motsvarar inte någon virtuell maskin.

Felmeddelande:

Enter-PSSession : Parametern 'VMName' kan inte kopplas till någon virtuell maskin.

Möjliga orsaker:

  • Du är inte Hyper-V administratör.
  • Den virtuella datorn finns inte.

Du kan använda cmdleten Get-VM för att kontrollera att de autentiseringsuppgifter du använder har administratörsrollen Hyper-V och för att se vilka virtuella datorer som körs lokalt på värden och är startade.

Exempel och användarguider

PowerShell Direct har stöd för just enough-administration (JEA).

Kolla in exempel på GitHub.