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ärd: Windows 10, Windows Server 2016 eller senare som kör 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 ansluter via en nätverksanslutning.

Konfigurationskrav:

  • Den virtuella datorn måste köras lokalt på värden.
  • 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 kommandon som du kör körs på den virtuella datorn. Testa genom att 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 se felsökningen för potentiella 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 kommandot genererar utdata visas det i 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.

Av samma token har sessioner tillstånd. Eftersom beständiga sessioner kvarstår bevaras alla variabler som du skapar i en session eller skickar till en session över flera anrop. Du kan använda ett antal verktyg för att arbeta med beständiga sessioner. I det här exemplet använder du New-PSSession och Copy-Item för att flytta data från värddatorn till en virtuell maskin och från en virtuell maskin till värddatorn.

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 hjälp av 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 du inte uttryckligen anger autentiseringsuppgifter med -Credential flaggan kraschar tjänsten i gästen och måste startas om. Om du stöter på det här problemet kan du läsa avsnittet Fel: En fjärrsession kan ha avslutats för lösningsinstruktioner.

  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 hjälp av Remove-PSSession.

    Remove-PSSession $s
    

Felsökning

PowerShell Direct innehåller en liten uppsättning vanliga felmeddelanden. 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 saknar -VMName- eller -VMId-parameter.

Potentiella orsaker:

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

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 stöder 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 rapporterar alla fel som "En fjärrsession kan ha avslutats".

Felmeddelande:

Enter-PSSession: Ett fel uppstod som Windows PowerShell inte kan hantera. En fjärrsession kan ha avslutats.

Potentiella 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 än
    • Operativsystemet har inte startats klart
    • Operativsystemet kan inte startas korrekt
    • Vissa starttidshändelser behöver användarindata

Använd cmdleten Get-VM för att kontrollera vilka virtuella datorer som körs på värden.

Felmeddelande:

New-PSSession: Ett fel uppstod som Windows PowerShell inte kan hantera. En fjärrsession kan ha avslutats.

Potentiella orsaker:

  • En av orsakerna som angavs tidigare – de gäller alla för New-PSSession
  • En bugg i aktuella versioner där du uttryckligen måste skicka autentiseringsuppgifter med -Credential. När den här buggen inträffar 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 följande PowerShell-kommando:

Restart-Service -Name vmicvmsession

Fel: Parameteruppsättningen kan inte lösas

Felmeddelande:

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

Potentiella orsaker:

  • Du kan inte använda -RunAsAdministrator när du ansluter 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ärdsystemet underförstådd administratörsåtkomst måste du uttryckligen ange inloggningsuppgifter.

Du kan skicka administratörsautentiseringsuppgifter 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.

Potentiella orsaker:

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

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

Felmeddelande:

Enter-PSSession : Indataparametern VMName matchar inte för någon virtuell dator.

Potentiella orsaker:

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

Använd cmdleten Get-VM för att kontrollera att de autentiseringsuppgifter du använder har Hyper-V administratörsroll och för att se vilka virtuella datorer som körs lokalt på värden och är igång.

Exempel och användarguider

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

Kolla in exempel på GitHub.