PSSession como usuário logado

1

Estou tentando configurar um script Powershell que monitore uma VM VirtualBox (ou seja, "Builder4") em execução em um dos nossos servidores de compilação. Ocasionalmente, ele perde a conexão e eu já tenho um script (local no servidor) que recarrega o adaptador de rede, mas quero torná-lo totalmente automatizado.

Eu tenho a PSSession corretamente autenticada com o servidor, conectada com sucesso, e posso executar comandos do servidor, fazer uma sessão interativa (Enter-PSSession), etc. No entanto, é uma "nova" sessão, então posso ' t gerenciar qualquer uma das VMs já em execução.

A configuração do servidor é uma caixa do Windows Server 2012 com uma única conta. A conta é local para o servidor, em oposição a estar no domínio corporativo ("pc-name \ user" versus "company.na.com \ user") e permanece conectada enquanto o servidor estiver em execução. Normalmente, nos conectamos ao servidor via RemoteDesktop. Embora eu esteja conectando à PSSession usando o mesmo nome de computador, nome de usuário e credenciais, parece que ele não está se conectando ao login existente no servidor, embora minha única evidência de suporte seja que VBoxManage list runningvms retorna um lista vazia. Por exemplo, executando o seguinte (conteúdo básico de "test.ps1"):

whoami
VBoxManage list vms
echo -----
VBoxManage list runningvms

fornece a seguinte saída:

Da sessão remota

PS ...> test.ps1
win-*******\jenkins
"Builder1" {vm-hash-code}
"Builder2" {vm-hash-code}
"Builder3" {vm-hash-code}
"Builder4" {vm-hash-code}
"Builder5" {vm-hash-code}
"Builder6" {vm-hash-code}
-----
PS ...>

Do servidor (localmente)

PS ...> test.ps1
win-*******\jenkins
"Builder1" {vm-hash-code}
"Builder2" {vm-hash-code}
"Builder3" {vm-hash-code}
"Builder4" {vm-hash-code}
"Builder5" {vm-hash-code}
"Builder6" {vm-hash-code}
-----
"Builder1" {vm-hash-code}
"Builder2" {vm-hash-code}
"Builder3" {vm-hash-code}
"Builder4" {vm-hash-code}
"Builder5" {vm-hash-code}
PS ...>

Como o whoami sugere, pareço estar logado sob a conta / usuário adequado. No entanto, como o VBoxManage list runningvms sugere, o Windows o vê como um "usuário diferente" (já que runningvms são específicos do usuário).

Existe alguma maneira de se conectar ao login existente sem desconectá-lo e fazer o login novamente com o CLI? A Área de Trabalho Remota parece funcionar simplesmente trocando o controle de sessão sempre que uma nova sessão remota é iniciada (ou desbloqueada na máquina física), então imagino que essa funcionalidade exista.

Para concluir e esclarecer, preciso me conectar remotamente via CLI à sessão de login existente não apenas a um usuário existente. Até agora não consegui realizar isso.

    
por b_c 10.07.2017 / 17:22

3 respostas

0

As respostas de Ulfy e Cory Knutson conseguiu me apontar na direção certa para encontrar uma solução que atendesse às minhas necessidades.

Infelizmente, iniciar as VMs com PSSession não é uma opção, pois ainda precisamos ser capazes de acessá-las graficamente com bastante frequência. Eu tinha tentado iniciar uma das VMs através da PSSession que teve sucesso, mas não estava fisicamente acessível através da Área de Trabalho Remota ou login local (também conhecido como a "sessão de login") para o servidor.

Na mesma linha, tentei usar o PSExec, que descobri que tinha a opção de executar em uma sessão específica (obtida através de query session ). Consegui iniciar uma das VMs com o mesmo ID de sessão que a sessão de login. Eu só podia dizer isso verificando tasklist e vendo-o listado sob esse ID de sessão, pois nunca aparecia visualmente.

Por fim, acabei incorporando uma resposta do StackOverflow ao script que estava escrevendo. O snippet usado cria uma tarefa agendada para um usuário designado na máquina remota, executa-a e, em seguida, remove a tarefa. Um pouco hacky, como afirma a autora, mas funciona bem para o que eu preciso neste caso.

    
por 11.07.2017 / 21:19
0

O PSSession usa o WinRM para executar comandos PS em um servidor remoto. A sessão aqui é simplesmente aquela sessão estabelecida e não tem nada a ver com sessões de RD.

Se você precisar extrair informações de variáveis exclusivas para uma sessão de RD / terminal em execução, poderá procurar no PSExec.

    
por 11.07.2017 / 00:53
0

Vou reafirmar algumas das informações existentes, mas espero que isso possa esclarecer as coisas.

Seu problema não é que o script esteja vendo a PSSession como um usuário diferente. É que o Windows é baseado em sessão quando se trata de conexões remotas. Um usuário pode ter várias sessões em um servidor, com processos separados que não podem interagir uns com os outros facilmente. Existem algumas ferramentas que podem ser acessadas entre as sessões, o que é necessário para interagir com os serviços do sistema em execução na sessão 0. Essas sessões são isoladas por motivos de segurança. A área de trabalho remota se conectará à sua sessão em execução para permitir que você gerencie as VMs em execução.

Uma PSSession também não é um login interativo completo. Não cria uma janela completa "Session". Você pode ver o que estou falando usando tasklist ou query session dentro de sua PSSession. Você verá a sessão 0 e outra id de sessão para o console, mas nenhuma para sua PSSession. Ele também mostra uma seta ao lado da sessão em que você está atualmente. Quando estiver em uma PSSession, será a sessão services .

Agora, para que suas VMs sejam exibidas remotamente, você pode tentar iniciá-las de dentro da PSSession. Em seguida, você pode se conectar mais tarde e fazer check-in, enquanto se reconecta à sessão de console.

    
por 11.07.2017 / 17:00