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ä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:
Ö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 kommandon som du kör körs på den virtuella datorn. Testa genom att köra
ipconfigellerhostnamekontrollera 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 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:
Ö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 kommandot genererar utdata visas det i 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.ps1Ange 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:
Ö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 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
-Credentialflaggan 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.Kopiera en fil till den virtuella datorn.
Om du vill kopiera
C:\host_path\data.txttill 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.txttill 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 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
-RunAsAdministratornär du ansluter till virtuella datorer.När du ansluter till en Windows-container
-RunAsAdministratortillå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.