Remote-Verbindung zu einem Windows über PowerShell in Linux

2392
James

Ich versuche, eine Verbindung zu einer Windows-Maschine über PowerShell in einer Linux-Maschine herzustellen, um Informationen zu einem System zu erhalten, aber ich muss dies ohne WinRm erreichen.

Zuerst habe ich die PowerShell installiert, indem Sie den Anweisungen hier folgen . Das Starten der PowerShell pwshfunktionierte gut.

Dann habe ich versucht, einige Informationen über WMI mit dem folgenden Befehl abzurufen:

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

Die Rückkehr ist Get-WmiObject : The term 'Get-WmiObject' is not recognized as the name of a cmdlet, function, script file, or operable program..

Nach dem Änderungsprotokoll für die Version 6.0 des PowerShell-Kerns habe ich festgestellt, dass die Get-Wmi * -Funktionen für Get-Cmi * -Äquivalente ersetzt werden sollten. Lass es uns versuchen:

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

Die Rückkehr ist: Get-CimInstance : The term 'Get-CimInstance' is not recognized as the name of a cmdlet, function, script file, or operable program.

Bei der Suche nach der Befehlsliste, dem Eingeben Get-und dann dem Tabulator zeigt die Rückgabe tatsächlich keine Wmi- oder Cim-Funktion an.

Ich kann mit dem Cmdlet eine Verbindung zum selben Computer herstellen Invoke-Command, aber wie gesagt, ich muss dies ohne WinRm erreichen, und anscheinend ist dies nicht der Fall von Invoke-Comand

Nach einer langen Google-Suche habe ich hier nur eine ähnliche Frage in SO gefunden, aber es verwendet das Cmdlet Enter-PSSession, das auch WinRM verwendet, wenn ich es richtig verstanden habe.

Schließlich fand ich diesen Blogbeitrag mit einem Handschuh, der meinen Bedürfnissen entspricht. Es empfiehlt jedoch die Verwendung der Cmdlets Invoke-WmiMethodund Invoke-CimMethoddass zur Überraschung von niemandem Befehle erkannt werden.

Meine Frage ist: Gibt es überhaupt eine WMI-Abfrage, um Windows-Informationen über PowerShell in einer Linux-Maschine ohne WinRm zu erhalten?

Hinweis 1 : Ich kann die Cmdlets Get-Wmi*und Get-Cim*in Windows-PowerShell ausführen (z. B. über RPC verbunden).

Hinweis2 : Ich kenne eine Problemumgehung, um in Linux ohne PowerShell damit umzugehen, und es sollte für jemanden mit ähnlichen Problemen funktionieren, aber es funktionierte nicht für mich aufgrund eines (zumindest jetzt noch) unlösbaren Codierungsproblems .

INFO

  • OS: Debian 8.10

  • $ PSVersionTable.PSVersion: 6.0.1

  • Remote Windows: W10 Pro

2

1 Antwort auf die Frage

2
postanote

Schauen Sie stattdessen auf PoSH über SSH.

Sehen Sie den Schritt bis hier:

PowerShell Remoting über SSH

Überblick

PowerShell-Remoting verwendet normalerweise WinRM für die Verbindungsverhandlung und den Datentransport. SSH wurde für diese Remoting-Implementierung ausgewählt, da es jetzt sowohl für Linux- als auch für Windows-Plattformen verfügbar ist und echtes PowerShell-Remoting mit mehreren Plattformen ermöglicht. WinRM bietet jedoch auch ein robustes Hosting-Modell für PowerShell-Remote-Sitzungen, das diese Implementierung noch nicht durchführt. Dies bedeutet, dass die Konfiguration der PowerShell-Remote-Endpunkte und JEA (Just Enough Administration) in dieser Implementierung noch nicht unterstützt wird.

Mit PowerShell SSH-Remoting können Sie das grundlegende Remoting von PowerShell-Sitzungen zwischen Windows- und Linux-Computern durchführen. Dazu erstellen Sie auf dem Zielcomputer einen PowerShell-Hosting-Prozess als SSH-Subsystem. Letztendlich wird dies in ein allgemeineres Hosting-Modell geändert, das der Funktionsweise von WinRM ähnelt, um die Endpunktkonfiguration und JEA zu unterstützen.

Die Cmdlets New-PSSession, Enter-PSSession und Invoke-Command verfügen jetzt über einen neuen Parametersatz, um diese neue Remotingverbindung zu vereinfachen

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

Danke für Ihre Hilfe. Es hat wirklich funktioniert. Nur eine Randbemerkung, dieser SSH-Ansatz funktioniert nur mit aktuellen Windows-Versionen. James vor 6 Jahren 0
Ich habe diese Antwort als korrekt markiert, da dies die einzige ist, aber es wäre gut zu wissen, ob es eine Alternative gibt, die mit älteren Windows-Versionen funktioniert. Dies bedeutet, eine Lösung für die Verbindung zu jeder Windows-Version über die PowerShell in Linux. James vor 6 Jahren 0
Keine Bange. Aber verstehen Sie, dass dies nicht so bald passieren wird. Die Aussage "jede Version von Windows" ist viel zu weit gefasst. Es gibt wenig Gründe, ältere nicht unterstützte Windows anzusprechen. Wenn Sie gesagt hätten, alle unterstützten Business-Windows-Versionen, würde ich gerne zustimmen. Allerdings sind die PoSH-Tools auch heute noch nicht in allen Windows-Versionen verfügbar. V5 unter Win7 ist beispielsweise nicht mit V5 unter Win10 identisch und V6 ist weit von V5x unter Windows entfernt. Als OSS-Angebot ist es also wirklich Sache der Community. postanote vor 6 Jahren 0
Du hast recht. Alle Versionen von Windows sind etwas zu breit, aber eine Lösung, die in einigen der alten Versionen funktioniert, wäre gut. James vor 6 Jahren 0