Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode usar o PowerShell Direct para executar o PowerShell arbitrário em um Windows 10 ou superior, ou o Windows Server 2016 ou uma máquina virtual mais recente 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 resistente (build 14280 e posterior) usando os cmdlets New-PSSession, Copy-Item e Remove-PSSession
Requirements
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 você estiver gerenciando máquinas virtuais mais antigas, use a VMConnect (Conexão de Máquina Virtual) ou conecte-se por meio de uma conexão de rede.
Requisitos de configuração:
- A máquina virtual deve ser executada localmente no host.
- A máquina virtual deve ser ativada e executada com pelo menos um perfil de usuário configurado.
- Você deve estar conectado ao computador host como administrador 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 que você digita são executados na máquina virtual, assim como você os digitou 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 credenciais para a máquina virtual quando solicitado.
Execute comandos em sua máquina virtual. Você deve ver o VMName como o prefixo do prompt do PowerShell como o seguinte:
[VMName]: PS C:\>Qualquer comando que você executar será executado em sua máquina virtual. Para testar, executar
ipconfigouhostnameverificar se 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 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 credenciais para a 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 é fechada 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 credenciais para a máquina virtual quando solicitado.
O script é executado na máquina virtual. A conexão é fechada automaticamente assim que o comando é executado.
Para obter mais informações sobre esse cmdlet, consulte Invoke-Command.
Copiar arquivos com New-PSSession e Copy-Item
Observação
O PowerShell Direct dá suporte apenas a sessões persistentes nos builds do Windows 14280 e posteriores
Sessões persistentes do PowerShell são incrivelmente úteis ao escrever scripts que coordenam ações em um ou mais computadores remotos. Depois de criadas, as sessões persistentes existem em segundo plano até que você decida excluí-las. Isso significa que você pode referenciar a mesma sessão repetidamente com Invoke-Command ou Enter-PSSession sem passar credenciais.
Pelo mesmo token, 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, copie os arquivos:
No host Hyper-V, abra o PowerShell como Administrador.
Execute um dos seguintes comandos para criar uma sessão persistente do PowerShell 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 credenciais para a máquina virtual quando solicitado.
Aviso
Há um bug em builds antes de 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 alternativas.Copie um arquivo para a máquina virtual.
Para copiar
C:\host_path\data.txtpara a máquina virtual da máquina host, execute:Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\Copie um arquivo da máquina virtual (no host).
Para copiar
C:\guest_path\data.txtpara o host da máquina virtual, execute:Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\Interrompa a sessão persistente usando
Remove-PSSession.Remove-PSSession $s
Resoluçã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.
-Parâmetros de VMName ou -VMID não existem
Problema:
Enter-PSSession, Invoke-Command ou New-PSSession não têm um parâmetro -VMName ou -VMId.
Possíveis causas:
O problema mais provável é que seu sistema operacional host não dá suporte ao PowerShell Direct.
Você pode verificar o build do Windows executando o seguinte comando:
[System.Environment]::OSVersion.Version
Se você estiver executando um build com suporte, também é possível que sua versão do PowerShell não dê suporte ao PowerShell Direct. Para o PowerShell Direct e o JEA, a versão principal deve ser 5 ou posterior.
Você pode verificar o build 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 com a mensagem "Uma sessão remota pode ter terminado".
Mensagem de erro:
Enter-PSSession: ocorreu um erro que o Windows PowerShell não pode manipular. Uma sessão remota pode ter terminado.
Possíveis causas:
- A máquina virtual existe, mas não está em execução.
- O sistema operacional convidado não dá suporte ao PowerShell Direct. Consulte os requisitos.
- O PowerShell ainda não está disponível no convidado
- O sistema operacional ainda não terminou a inicialização
- O sistema operacional não pode inicializar corretamente
- Algum evento de hora de inicialização precisa de entrada do usuário
Use o cmdlet Get-VM para verificar quais VMs estão em execução no host.
Mensagem de erro:
New-PSSession: ocorreu um erro que o Windows PowerShell não pode manipular. Uma sessão remota pode ter terminado.
Possíveis causas:
- Uma das razões listadas anteriormente — todas se aplicam a
New-PSSession - Um bug nos builds atuais em que você deve passar explicitamente as 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 VMConnect, abra o PowerShell e reinicie o serviço de 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.
Possíveis causas:
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 acesso ao administrador implícito do host, 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.
Possíveis causas:
- As credenciais de convidado não puderam ser validadas
- As credenciais fornecidas estavam incorretas.
- Não há contas de usuário no convidado (o sistema operacional não foi inicializado antes)
- Se estiver se conectando como Administrador: Administrador não está definido como um usuário ativo. Para obter mais informações, consulte Habilitar e desabilitar a conta de administrador interna.
Erro: o parâmetro VMName de entrada não é resolvido para nenhuma máquina virtual.
Mensagem de erro:
Enter-PSSession: o parâmetro VMName de entrada não é resolvido para nenhuma máquina virtual.
Possíveis causas:
- Você não é um administrador Hyper-V.
- A máquina virtual não existe.
Utilize o cmdlet Get-VM para verificar se as credenciais que você está usando têm a função de administrador do Hyper-V e para ver quais VMs estão sendo executadas localmente no host e inicializadas.
Exemplos e guias do usuário
O PowerShell Direct dá suporte à JEA (Administração Just Enough).
Confira exemplos no GitHub.