Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
- Som en interaktiv session med hjälp av cmdleten Enter-PSSession
- Som ett avsnitt med en enda användning för att köra ett enda kommando eller skript med hjälp av cmdleten Invoke-Command
- Som en bestående session (version 14280 och senare) med hjälp av cmdletarna New-PSSession, Copy-Item och Remove-PSSession
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:
Öppna PowerShell som administratör på Hyper-V värd.
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.
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
ellerhostname
kontrollera att dessa kommandon körs på den virtuella datorn.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:
Öppna PowerShell som administratör på Hyper-V värd.
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:
Öppna PowerShell som administratör på Hyper-V värd.
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:
Öppna PowerShell som administratör på Hyper-V värd.
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.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\
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\
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.