我正在尝试通过 Linux 机器中的 PowerShell 连接到 Windows 机器以获取一些系统信息,但我需要在不使用 WinRm 的情况下实现这一点。
首先,我按照说明安装了 PowerShell这里。启动 PowerShellpwsh
工作正常。
然后我尝试使用以下命令通过 WMI 获取一些信息:
Get-WmiObject -Class Win32_Process -Impersonation 3 -ComputerName IP_ADDRESS
回报是Get-WmiObject : The term 'Get-WmiObject' is not recognized as the name of a cmdlet, function, script file, or operable program.
。
继变更日志对于 PowerShell 核心版本 6.0,我发现 Get-Wmi* 函数应该替换为 Get-Cmi* 等效函数。让我们尝试一下:
Get-CimInstance -Class Win32_Process -Impersonation 3 -ComputerName IP_ADDRESS
返回的是:Get-CimInstance : The term 'Get-CimInstance' is not recognized as the name of a cmdlet, function, script file, or operable program.
查找命令列表,键入Get-
然后按 Tab,返回确实没有显示任何 Wmi 或 Cim 功能。
我能够使用 cmdlet 连接到同一台计算机Invoke-Command
,但正如我所说,我需要在不使用 WinRm 的情况下实现它,而且显然,情况并非如此调用命令
经过大量的谷歌搜索,我只找到了一个类似的问题在这里,但它使用 cmdlet Enter-PSSession
,这也是使用温控器如果我理解正确的话。
最后我找到了这个博客文章完全符合我的需求。但是,它建议使用 cmdlet Invoke-WmiMethod
,而且Invoke-CimMethod
,出乎意料的是,这些命令无法被识别。
我的问题是:有没有办法在不使用 WinRm 的情况下在 Linux 机器上通过 PowerShell 运行 WMI 查询来获取一些 Windows 信息?
注1:我能够在 Windows 机器 PowerShell 中运行Get-Wmi*
和Get-Cim*
cmdlet(例如,通过 RPC 连接);
笔记2:我知道一个解决方法在没有 PowerShell 的情况下在 Linux 中处理它,它应该对有类似问题的人有用,但由于无法解决(至少现在),它对我来说不起作用编码问题;
信息
操作系统:Debian 8.10
$PSVersionTable.PSVersion: 6.0.1
远程Windows:W10 Pro
答案1
请转而寻求通过 SSH 实现的 PoSH。
请参阅此处的步骤:
通过 SSH 进行 PowerShell 远程控制
概述
PowerShell 远程处理通常使用 WinRM 进行连接协商和数据传输。SSH 被选为此远程处理实现,因为它现在可用于 Linux 和 Windows 平台,并允许真正的多平台 PowerShell 远程处理。但是,WinRM 还为 PowerShell 远程会话提供了一个强大的托管模型,而此实现尚未提供此功能。这意味着 PowerShell 远程端点配置和 JEA(Just Enough Administration,足够管理)在此实现中尚不受支持。
PowerShell SSH 远程处理可让您在 Windows 和 Linux 计算机之间进行基本的 PowerShell 会话远程处理。这是通过在目标计算机上创建 PowerShell 托管进程作为 SSH 子系统来实现的。最终,这将更改为更通用的托管模型,类似于 WinRM 的工作方式,以支持端点配置和 JEA。
New-PSSession、Enter-PSSession 和 Invoke-Command cmdlet 现在具有新的参数集,以促进这种新的远程连接
https://github.com/PowerShell/PowerShell/tree/master/demos/SSHRemoting
针对 Anthony Geoghegan 的评论进行了更新
至于---
“这看起来很有希望,但到 GitHub 存储库的链接不再有效。”
----该链接直接指向 MS PS 存储库,所以,是的,出现 404 很奇怪。无论如何,您都可以使用 PowerShell 直接在系统上获取它。
反正 …
Find-Module -Name '*ssh*' | Format-table -AutoSize
# Results
Version Name Repository Description
------- ---- ---------- -----------
2.1 Posh-SSH PSGallery Provide SSH and SCP functionality for executing commands against remote hosts.
0.0.2.0 OpenSSHUtils PSGallery Utilities and functions for configuring OpenSSH on Windows.
2.1.3 SSHSessions PSGallery Svendsen Tech's SSH-Sessions module provides SSH session creation, management and interaction from Power...
1.0.0 SSH PSGallery Provides a PowerShell-based SSH client based on SSH.net http://sshnet.codeplex.com/
0.0.75 PSSharedGoods PSGallery Module covering functions that are shared within multiple projects
1.1.3 PowerSSH PSGallery This module detects the first use of an SSH command, automatically runs the SSH agent, keeps the SSH aut...
0.9.5 WinSSH PSGallery Install OpenSSH-Win64, optionally install ssh-agent and sshd Services. Also includes functions to help c...
1.0.1 ssh-wrapper PSGallery Exposes ssh from WSL by wrapping: bash -c "ssh $args". Requires Windows Subsystem for Linux on Windows 10.
0.3.1 posh-sshell PSGallery Provides integration with ssh-agent and pageant from within Powershell
2.0.1.8 SkypeForBusinessHybridHealth PSGallery Uses on-premises modules such as Skype For Business and SkypeOnlineConnector to validate basic requireme...
1.0.4 PSShortcut PSGallery This module eases working with Windows shortcuts (LNK and URL) files.
1.1.4 PowerSSH-Legacy PSGallery This module detects the first use of an SSH command, automatically runs the SSH agent, keeps the SSH aut...
1.0 cEPRSSharepoint PSGallery DSCModule helps in installing & configuring the sharepoint site, Farm etc.,
0.0.3 dockeraccesshelper PSGallery Allow a user account to access the docker engine without elevated access rights
0.3 PSShareFile PSGallery A PowerShell module to manipulate various objects in Citrix's ShareFile service
0.0.1 PSSherpaDesk PSGallery PowerShell module for interacting with the SherpaDesk API
Find-Module -Name '*Posh-SSH' |
Save-Module -Path "$env:USERPROFILE\Documents\WindowsPowerShell\Modules"
Install-Module -Name 'Posh-SSH'
我刚刚打了它,所以我知道它有效。