Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Você pode usar o PowerShell Direct para executar o PowerShell arbitrário em uma máquina virtual do Windows 10 ou superior, ou Windows Server 2016 ou mais recente, a partir do seu host Hyper-V. Use o PowerShell Direct independentemente da configuração de rede ou das configurações de gerenciamento remoto.
Aqui estão algumas maneiras de executar o PowerShell Direct:
- Como uma sessão interativa usando o cmdlet Enter-PSSession
- Como uma seção de uso único para executar um único comando ou script usando o cmdlet Invoke-Command
- Como uma sessão persistente (compilação 14280 e posterior) usando os cmdlets New-PSSession, Copy-Item e Remove-PSSession
Requerimentos
Requisitos do sistema operacional:
- Host: Windows 10, Windows Server 2016 ou posterior executando o Hyper-V.
- Convidado/Máquina Virtual: Windows 10, Windows Server 2016 ou posterior.
Se estiver a gerir máquinas virtuais mais antigas, utilize a Ligação à Máquina Virtual (VMConnect) ou ligue-se através de uma ligação de rede.
Requisitos de configuração:
- A máquina virtual deve ser executada localmente no host.
- A máquina virtual deve estar ligada e em execução com pelo menos um perfil de usuário configurado.
- Tem de ter sessão iniciada no computador anfitrião como administrador de Hyper-V.
- Você deve fornecer credenciais de usuário válidas para a máquina virtual.
Criar e sair de uma sessão interativa do PowerShell
A maneira mais fácil de executar comandos do PowerShell em uma máquina virtual é iniciar uma sessão interativa.
Quando a sessão é iniciada, os comandos digitados são executados na máquina virtual, como se você os digitasse diretamente em uma sessão do PowerShell na própria máquina virtual.
Para iniciar uma sessão interativa:
No host Hyper-V, abra o PowerShell como Administrador.
Execute um dos seguintes comandos para criar uma sessão interativa usando o nome da máquina virtual ou GUID:
Enter-PSSession -VMName <VMName> Enter-PSSession -VMId <VMId>Insira as credenciais da máquina virtual quando solicitado.
Execute comandos na sua máquina virtual. Você deve ver o VMName como o prefixo do prompt do PowerShell da seguinte forma:
[VMName]: PS C:\>Qualquer comando executado é executado na máquina virtual. Para testar, executar
ipconfigouhostnamecertificar-se de que esses comandos são executados na máquina virtual.Quando terminar, execute o seguinte comando para fechar a sessão:
Exit-PSSession
Observação
Se a sua sessão não se conectar, consulte a solução de problemas para possíveis causas.
Para saber mais sobre esses cmdlets, consulte Enter-PSSession e Exit-PSSession.
Executar um script ou comando com Invoke-Command
O PowerShell Direct com Invoke-Command é perfeito para situações em que você precisa executar um comando ou um script em uma máquina virtual, mas não precisa continuar interagindo com a máquina virtual além desse ponto.
Para executar um único comando:
No host Hyper-V, abra o PowerShell como Administrador.
Execute um dos seguintes comandos para criar uma sessão usando o nome da máquina virtual ou GUID:
Invoke-Command -VMName <VMName> -ScriptBlock { command } Invoke-Command -VMId <VMId> -ScriptBlock { command }Insira as credenciais da máquina virtual quando solicitado.
O comando é executado na máquina virtual. Se o comando produzir saída, você a verá no console. A conexão fecha automaticamente assim que o comando é executado.
Para executar um script:
No host Hyper-V, abra o PowerShell como Administrador.
Execute um dos seguintes comandos para criar uma sessão usando o nome da máquina virtual ou GUID:
Invoke-Command -VMName <VMName> -FilePath C:\host\script_path\script.ps1 Invoke-Command -VMId <VMId> -FilePath C:\host\script_path\script.ps1Insira as credenciais da máquina virtual quando solicitado.
O script é executado na máquina virtual. A conexão fecha automaticamente assim que o comando é executado.
Para obter mais informações sobre esse cmdlet, consulte Invoke-Command.
Copiar ficheiros com New-PSSession e Copy-Item
Observação
O PowerShell Direct oferece suporte apenas a sessões persistentes nas compilações 14280 e posteriores do Windows
As sessões persistentes do PowerShell são incrivelmente úteis ao escrever scripts que coordenam ações em uma ou mais máquinas remotas. Uma vez criadas, as sessões persistentes existem em segundo plano até que você decida excluí-las. Isso significa que você pode fazer referência à mesma sessão repetidamente com Invoke-Command ou Enter-PSSession sem passar credenciais.
Da mesma forma, as sessões mantêm o estado. Como as sessões persistentes persistem, todas as variáveis criadas em uma sessão ou passadas para uma sessão são preservadas em várias chamadas. Você pode usar várias ferramentas para trabalhar com sessões persistentes. Para este exemplo, use New-PSSession e Copy-Item para mover dados do host para uma máquina virtual e de uma máquina virtual para o host.
Para criar uma sessão e copiar ficheiros:
No host Hyper-V, abra o PowerShell como Administrador.
Execute um dos seguintes comandos para criar uma sessão PowerShell persistente para a máquina virtual usando
New-PSSession.$s = New-PSSession -VMName <VMName> -Credential (Get-Credential) $s = New-PSSession -VMId <VMId> -Credential (Get-Credential)Insira as credenciais da máquina virtual quando solicitado.
Advertência
Há um bug nas compilações anteriores a 14500. Se você não especificar explicitamente as credenciais com o
-Credentialsinalizador, o serviço no convidado falhará e precisará ser reiniciado. Se você encontrar esse problema, consulte a seção Erro: uma sessão remota pode ter terminado para obter instruções de solução alternativa.Copie um arquivo para a máquina virtual.
Para copiar
C:\host_path\data.txtda máquina host para a máquina virtual, execute:Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\Copie um arquivo da máquina virtual (para o host).
Para copiar
C:\guest_path\data.txtda máquina virtual para o host, execute:Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\Pare a sessão persistente usando
Remove-PSSession.Remove-PSSession $s
Solução de problemas
O PowerShell Direct apresenta um pequeno conjunto de mensagens de erro comuns. As seções a seguir descrevem as mensagens de erro mais comuns, algumas causas e ferramentas para diagnosticar problemas.
-VMName ou -VMID parâmetros não existem
Problema:
Enter-PSSession, Invoke-Command, ou New-PSSession não têm um parâmetro -VMName ou -VMId.
Causas potenciais:
O problema mais provável é que seu sistema operacional host não oferece suporte ao PowerShell Direct.
Você pode verificar sua compilação do Windows executando o seguinte comando:
[System.Environment]::OSVersion.Version
Se você estiver executando uma compilação com suporte, também é possível que sua versão do PowerShell não ofereça suporte ao PowerShell Direct. Para PowerShell Direct e JEA, a versão principal deve ser 5 ou posterior.
Você pode verificar sua compilação de versão do PowerShell executando o seguinte comando:
$PSVersionTable.PSVersion
Erro: Uma sessão remota pode ter terminado
Observação
Para Enter-PSSession entre as compilações de host 10240 e 12400, todos os erros são relatados como "Uma sessão remota pode ter terminado".
Mensagem de erro:
Enter-PSSession : Ocorreu um erro que o Windows PowerShell não consegue manipular. Uma sessão remota pode ter terminado.
Causas potenciais:
- A máquina virtual existe, mas não está em execução.
- O SO convidado não suporta o PowerShell Direct. Consulte os requisitos.
- O PowerShell ainda não está disponível no convidado
- O sistema operacional não terminou de inicializar
- O sistema operacional não pode inicializar corretamente
- Alguns eventos de tempo de inicialização precisam da entrada do usuário
Use o cmdlet Get-VM para verificar quais VMs estão sendo executadas no host.
Mensagem de erro:
New-PSSession : Ocorreu um erro que o Windows PowerShell não consegue manipular. Uma sessão remota pode ter terminado.
Causas potenciais:
- Uma das razões listadas anteriormente - todas elas se aplicam a
New-PSSession - Um bug nas compilações atuais onde você deve passar explicitamente credenciais com
-Credential. Quando esse bug ocorre, todo o serviço trava no sistema operacional convidado e precisa ser reiniciado. Você pode verificar se a sessão ainda está disponível com Enter-PSSession.
Para contornar o problema de credencial, entre na máquina virtual usando o VMConnect, abra o PowerShell e reinicie o serviço vmicvmsession com o seguinte comando do PowerShell:
Restart-Service -Name vmicvmsession
Erro: O conjunto de parâmetros não pode ser resolvido
Mensagem de erro:
Enter-PSSession : O conjunto de parâmetros não pode ser resolvido usando os parâmetros nomeados especificados.
Causas potenciais:
Você não pode usar
-RunAsAdministratorao se conectar a máquinas virtuais.Ao se conectar a um contêiner do Windows, o
-RunAsAdministratorsinalizador permite conexões de administrador sem credenciais explícitas. Como as máquinas virtuais não dão ao host acesso implícito de administrador, você precisa inserir explicitamente as credenciais.
Você pode passar credenciais de administrador para a máquina virtual com o -Credential parâmetro ou inserindo-as manualmente quando solicitado.
Erro: A credencial é inválida
Mensagem de erro:
Enter-PSSession : A credencial é inválida.
Causas potenciais:
- Não foi possível validar as credenciais do hóspede
- As credenciais fornecidas estavam incorretas.
- Não há contas de usuário no convidado (o sistema operacional não inicializou antes)
- Se ligar como Administrador: o Administrador não está definido como um utilizador ativo. Para obter mais informações, consulte Habilitar e desabilitar a conta de administrador interna.
Erro: O parâmetro de entrada VMName não corresponde a nenhuma máquina virtual.
Mensagem de erro:
Enter-PSSession : O parâmetro de entrada VMName não corresponde a nenhuma máquina virtual.
Causas potenciais:
- Você não é um administrador Hyper-V.
- A máquina virtual não existe.
Use o cmdlet Get-VM para verificar se as credenciais que você está usando têm a função de administrador Hyper-V e para ver quais VMs estão sendo executadas localmente no host e inicializadas.
Exemplos e guias do utilizador
O PowerShell Direct oferece suporte a Administração Apenas Suficiente (JEA).
Confira exemplos no GitHub.