Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile usare PowerShell Direct per eseguire PowerShell arbitrario in windows 10 o versione successiva o Windows Server 2016 o versione successiva, macchina virtuale dall'host Hyper-V. Usare PowerShell Direct indipendentemente dalla configurazione di rete o dalle impostazioni di gestione remota.
Ecco alcuni modi per eseguire PowerShell Direct:
- Come sessione interattiva usando il cmdlet Enter-PSSession
- Come sezione a uso singolo per eseguire un singolo comando o uno script usando il cmdlet Invoke-Command
- Come sessione persistente (build 14280 e versioni successive) usando i cmdlet New-PSSession, Copy-Item e Remove-PSSession
Requisiti
Requisiti del sistema operativo:
- Host: Windows 10, Windows Server 2016 o versione successiva che esegue Hyper-V.
- Guest/Macchina virtuale: Windows 10, Windows Server 2016 o versione successiva.
Se si gestiscono macchine virtuali meno recenti, usare Virtual Machine Connection (VMConnect) o connettersi tramite una connessione di rete.
Requisiti di configurazione:
- La macchina virtuale deve essere eseguita localmente nell'host.
- La macchina virtuale deve essere attivata ed eseguita con almeno un profilo utente configurato.
- È necessario essere connessi al computer host come amministratore di Hyper-V.
- È necessario fornire credenziali utente valide per la macchina virtuale.
Creare ed uscire da una sessione interattiva di PowerShell
Il modo più semplice per eseguire i comandi di PowerShell in una macchina virtuale consiste nell'avviare una sessione interattiva.
All'avvio della sessione, i comandi digitati vengono eseguiti nella macchina virtuale, proprio come se li digitassero direttamente in una sessione di PowerShell nella macchina virtuale stessa.
Per avviare una sessione interattiva:
Nell'host Hyper-V aprire PowerShell come amministratore.
Eseguire uno dei comandi seguenti per creare una sessione interattiva usando il nome o il GUID della macchina virtuale:
Enter-PSSession -VMName <VMName> Enter-PSSession -VMId <VMId>Immettere le credenziali per la macchina virtuale quando richiesto.
Eseguire i comandi nella macchina virtuale. Il nome VMName dovrebbe essere visualizzato come prefisso per il prompt di PowerShell come segue:
[VMName]: PS C:\>Qualsiasi comando eseguito viene eseguito nella macchina virtuale. Per testare, eseguire
ipconfigohostnameper assicurarsi che questi comandi vengano eseguiti nella macchina virtuale.Al termine, eseguire il comando seguente per chiudere la sessione:
Exit-PSSession
Annotazioni
Se la sessione non si connette, vedere la risoluzione dei problemi per possibili cause.
Per altre informazioni su questi cmdlet, vedere Enter-PSSession e Exit-PSSession.
Eseguire uno script o un comando con Invoke-Command
PowerShell Direct con Invoke-Command è ideale per situazioni in cui è necessario eseguire un comando o uno script in una macchina virtuale, ma non è necessario continuare a interagire con la macchina virtuale oltre quel punto.
Per eseguire un singolo comando:
Nell'host Hyper-V aprire PowerShell come amministratore.
Eseguire uno dei comandi seguenti per creare una sessione usando il nome o il GUID della macchina virtuale:
Invoke-Command -VMName <VMName> -ScriptBlock { command } Invoke-Command -VMId <VMId> -ScriptBlock { command }Immettere le credenziali per la macchina virtuale quando richiesto.
Il comando viene eseguito nella macchina virtuale. Se il comando produce output, lo viene visualizzato nella console. La connessione viene chiusa automaticamente non appena viene eseguito il comando.
Per eseguire uno script:
Nell'host Hyper-V aprire PowerShell come amministratore.
Eseguire uno dei comandi seguenti per creare una sessione usando il nome o il GUID della macchina virtuale:
Invoke-Command -VMName <VMName> -FilePath C:\host\script_path\script.ps1 Invoke-Command -VMId <VMId> -FilePath C:\host\script_path\script.ps1Immettere le credenziali per la macchina virtuale quando richiesto.
Lo script viene eseguito nella macchina virtuale. La connessione viene chiusa automaticamente non appena viene eseguito il comando.
Per altre informazioni su questo cmdlet, vedere Invoke-Command.
Copiare file con New-PSSession e Copy-Item
Annotazioni
PowerShell Direct supporta solo sessioni persistenti nelle build di Windows 14280 e versioni successive
Le sessioni di PowerShell persistenti sono estremamente utili quando si scrivono script che coordinano le azioni in uno o più computer remoti. Dopo la creazione, le sessioni permanenti esistono in background fino a quando non si decide di eliminarle. Ciò significa che è possibile fare riferimento alla stessa sessione più o più volte con Invoke-Command o Enter-PSSession senza passare le credenziali.
Con lo stesso token, le sessioni mantengono lo stato. Poiché le sessioni persistenti vengono mantenute, tutte le variabili create in una sessione o passate a una sessione vengono mantenute tra più chiamate. È possibile usare diversi strumenti per lavorare con sessioni persistenti. Per questo esempio, usare New-PSSession e Copy-Item per spostare i dati dall'host a una macchina virtuale e da una macchina virtuale all'host.
Per creare una sessione, copiare i file:
Nell'host Hyper-V aprire PowerShell come amministratore.
Eseguire uno dei comandi seguenti per creare una sessione di PowerShell persistente nella macchina virtuale usando
New-PSSession.$s = New-PSSession -VMName <VMName> -Credential (Get-Credential) $s = New-PSSession -VMId <VMId> -Credential (Get-Credential)Immettere le credenziali per la macchina virtuale quando richiesto.
Avvertimento
C'è un bug nelle build precedenti alla 14500. Se non si specificano esplicitamente le credenziali con il flag
-Credential, il servizio nel sistema ospite si arresta in modo anomalo e deve essere riavviato. Se si verifica questo problema, vedere la sezione Errore: una sessione remota potrebbe essere terminata per istruzioni alternative.Copiare un file nella macchina virtuale.
Per eseguire la copia
C:\host_path\data.txtnella macchina virtuale dal computer host, eseguire:Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\Copiare un file dalla macchina virtuale (nell'host).
Per copiare
C:\guest_path\data.txtnell'host dalla macchina virtuale, eseguire:Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\Arrestare la sessione persistente usando
Remove-PSSession.Remove-PSSession $s
Risoluzione dei problemi
PowerShell Direct visualizza un piccolo set di messaggi di errore comuni. Le sezioni seguenti descrivono i messaggi di errore più comuni, alcune cause e strumenti per la diagnosi dei problemi.
-VMName o parametri -VMID non esistono
Problema:
Enter-PSSession, Invoke-Commando New-PSSession non hanno un -VMName parametro o -VMId .
Possibili cause:
Il problema più probabile è che il sistema operativo host non supporta PowerShell Direct.
È possibile controllare la compilazione di Windows eseguendo il comando seguente:
[System.Environment]::OSVersion.Version
Se si esegue una build supportata, è anche possibile che la versione di PowerShell non supporti PowerShell Direct. Per PowerShell Direct e JEA, la versione principale deve essere 5 o successiva.
È possibile controllare la build della versione di PowerShell eseguendo il comando seguente:
$PSVersionTable.PSVersion
Errore: una sessione remota potrebbe essere terminata
Annotazioni
Per Enter-PSSession tra le build host 10240 e 12400, tutti gli errori segnalano come "Una sessione remota potrebbe essere terminata".
Messaggio di errore:
Enter-PSSession: si è verificato un errore che windows PowerShell non può gestire. Potrebbe essere stata terminata una sessione remota.
Possibili cause:
- La macchina virtuale esiste ma non è in esecuzione.
- Il sistema operativo guest non supporta PowerShell Direct. Vedere i requisiti.
- PowerShell non è ancora disponibile nel guest
- L'avvio del sistema operativo non è terminato
- Il sistema operativo non può essere avviato correttamente
- Per alcuni eventi di avvio è necessario l'input dell'utente
Usare il cmdlet Get-VM per verificare quali macchine virtuali sono in esecuzione nell'host.
Messaggio di errore:
New-PSSession: si è verificato un errore che windows PowerShell non può gestire. Potrebbe essere stata terminata una sessione remota.
Possibili cause:
- Uno dei motivi elencati in precedenza - tutti si applicano a
New-PSSession - Bug nelle build correnti in cui è necessario passare in modo esplicito le credenziali con
-Credential. Quando si verifica questo bug, l'intero servizio si blocca nel sistema operativo guest e deve essere riavviato. È possibile verificare se la sessione è ancora disponibile con Enter-PSSession.
Per risolvere il problema delle credenziali, accedere alla macchina virtuale usando VMConnect, aprire PowerShell e riavviare il servizio vmicvmsession con il comando di PowerShell seguente:
Restart-Service -Name vmicvmsession
Errore: Impossibile risolvere il set di parametri
Messaggio di errore:
Enter-PSSession : l'insieme di parametri non può essere risolto usando i parametri denominati specificati.
Possibili cause:
Non è possibile usare
-RunAsAdministratorper la connessione alle macchine virtuali.Quando ci si connette a un contenitore di Windows, il
-RunAsAdministratorflag consente connessioni di amministratore senza credenziali esplicite. Poiché le macchine virtuali non forniscono l'accesso implicito all'amministratore host, è necessario immettere in modo esplicito le credenziali.
È possibile passare le credenziali di amministratore alla macchina virtuale con il -Credential parametro o immettendole manualmente quando richiesto.
Errore: La credenziale non è valida
Messaggio di errore:
Enter-PSSession: le credenziali non sono valide.
Possibili cause:
- Non è stato possibile convalidare le credenziali guest
- Le credenziali specificate non sono corrette.
- Non sono presenti account utente nel guest (il sistema operativo non è stato avviato prima)
- Se ci si connette come amministratore: l'amministratore non è impostato come utente attivo. Per altre informazioni, vedere Abilitare e disabilitare l'account amministratore predefinito.
Errore: il parametro VMName di input non viene risolto in alcuna macchina virtuale.
Messaggio di errore:
Enter-PSSession: il parametro VMName inserito non corrisponde a nessuna macchina virtuale.
Possibili cause:
- Non si è un amministratore Hyper-V.
- La macchina virtuale non esiste.
Usare il cmdlet Get-VM per verificare che le credenziali usate abbiano il ruolo di amministratore Hyper-V e per verificare quali macchine virtuali sono in esecuzione localmente nell'host e avviare.
Esempi e guide utente
PowerShell Direct supporta Just Enough Administration (JEA).
Vedere gli esempi in GitHub.