Questão Conexão remota a um Windows via PowerShell no Linux


Eu estou tentando se conectar a uma máquina Windows através do PowerShell em uma máquina Linux para obter algumas informações do sistema, mas eu preciso alcançá-lo sem usar o WinRm.

Em primeiro lugar, instalei o PowerShell seguindo as instruções Aqui. Iniciando o PowerShell com pwsh funcionou bem.

Então eu tentei obter algumas informações através do WMI usando o seguinte comando:

Get-WmiObject -Class Win32_Process -Impersonation 3 -ComputerName IP_ADDRESS

O retorno é Get-WmiObject : The term 'Get-WmiObject' is not recognized as the name of a cmdlet, function, script file, or operable program..

Seguindo o changelog para a versão 6.0 do núcleo do PowerShell, descobri que as funções Get-Wmi * devem ser substituídas por equivalentes Get-Cmi *. Vamos tentar:

Get-CimInstance -Class Win32_Process -Impersonation 3 -ComputerName IP_ADDRESS

O retorno é: Get-CimInstance : The term 'Get-CimInstance' is not recognized as the name of a cmdlet, function, script file, or operable program.

Procurando pela lista de comandos, digitando Get- e depois Tab, o retorno de fato não mostra nenhuma função Wmi ou Cim.

Consigo me conectar ao mesmo computador usando o cmdlet Invoke-Command, mas como eu disse, eu preciso alcançá-lo sem o uso do WinRm, e, aparentemente, este não é o caso de Invocar-Comand

Depois de muita pesquisa no Google, encontrei apenas uma pergunta semelhante aqui em SO, mas o usuário o cmdlet Enter-PSSessiontambém é usado WinRM se eu entendi corretamente.

Finalmente, encontrei este postagem no blog com ajustes como uma luva com minhas necessidades. No entanto, sugere o uso dos cmdlets Invoke-WmiMethod e Invoke-CimMethod que, para surpresa de ninguém, não são comandos reconhecidos.

Minha pergunta é: Existe alguma maneira de executar uma consulta WMI para obter algumas informações do Windows por meio do PowerShell em uma máquina Linux sem o uso do WinRm?

Nota 1: Eu sou capaz de executar o Get-Wmi* e Get-Cim* cmdlets na máquina Windows PowerShell (conectado via RPC, por exemplo);

Nota 2: Eu conheço um solução alternativa para lidar com isso no Linux sem PowerShell e deve funcionar para alguém com problema semelhante, mas não funcionou para mim devido a um insolúvel (por agora, pelo menos) problema de codificação;

INFO

  • SO: Debian 8.10

  • $ PSVersionTable.PSVersion: 6.0.1

  • Windows remoto: W10 Pro


2


origem




Respostas:


Olhe para PoSH sobre SSH.

Veja o passo aqui:

PowerShell Remoting sobre SSH

Visão geral

A comunicação remota do PowerShell normalmente usa o WinRM para negociação de conexão e   transporte de dados. SSH foi escolhido para esta implementação remota desde   agora está disponível para plataformas Linux e Windows e permite   verdadeira multiplataforma PowerShell remoting. No entanto, o WinRM também fornece um   modelo de hospedagem robusto para sessões remotas do PowerShell que este   implementação ainda não faz. E isso significa que o controle remoto do PowerShell   configuração de endpoint e JEA (Just Enough Administration) ainda não   suportado nesta implementação.

A comunicação remota do SSH do PowerShell permite que você faça a comunicação remota da sessão do PowerShell   entre máquinas Windows e Linux. Isso é feito criando um   Processo de hospedagem do PowerShell na máquina de destino como um subsistema SSH.   Eventualmente, isso será alterado para um modelo de hospedagem mais geral   semelhante a como o WinRM funciona para suportar a configuração de endpoint   e JEA.

Os cmdlets New-PSSession, Enter-PSSession e Invoke-Command agora têm   um novo conjunto de parâmetros para facilitar essa nova conexão remota

https://github.com/PowerShell/PowerShell/tree/master/demos/SSHRemoting


2



Obrigado pela ajuda. Isso realmente funcionou. Apenas uma observação, esta abordagem SSH funcionará apenas com versões recentes do Windows. - James
Marquei essa resposta como correta, pois é a única, mas seria bom conhecer alguma alternativa que funcione com versões antigas do Windows, ou seja, uma solução para conectar a qualquer versão do Windows através do PowerShell no linux. - James
Não se preocupe. Mas entenda que isso não acontecerá tão cedo. A declaração "qualquer versão do Windows" está longe de ser ampla. Há poucos motivos para segmentar o Windows legado sem suporte. Se você tivesse dito, todas as versões suportadas do Windows, eu estaria inclinado a concordar. No entanto, saiba que, mesmo hoje, nem todas as ferramentas PoSH estão disponíveis em todas as versões do Windows. v5 no Win7 não é o mesmo que um v5 no Win10 por exemplo e v6 está muito longe do v5x no Windows. Então, como uma oferta de OSS agora, depende da comunidade. - postanote
Você está certo. Todas as versões do Windows são algo muito amplo, mas uma solução que funciona em algumas das versões antigas seria boa. - James