Windows PowerShell 远程处理

Windows PowerShell 远程处理

我一直难以想出一个解决方案,将为 *nix 机器设计的框架扩展到 Windows。该框架目前从一台 *nix 服务器运行,并通过 ssh 连接到其他 *nix 服务器,并执行一系列不同的命令,如检查日志文件、从源代码控制同步文件、将日志提交回源代码控制等。我遇到的最大问题是如何连接到远程 Windows 机器并访问命令行。连接也可以来自另一台 Windows 机器,不必从 Unix 机器启动,它可以从 Windows 转到 Windows,而不是从 Unix 转到 Windows。

以下是当前如何在 unix 系统上运行命令的示例。类似这样的命令位于循环中,循环遍历服务器名称列表。我需要让类似这样的命令在 windows 机器上运行。

ssh ${user}@${server} "cd /app/app_name/logs; <export source control params>; <submit logs to source control>" >> Log.txt

此外,我不愿意使用第三方工具(我的预算约为 0 美元)。我检查了 PsExec 和其他几个工具,但看起来您需要管理员访问权限或必须以纯文本形式传递用户/传递。

答案1

使用 Powershell Remoting:

更新链接: https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/running-remote-commands?view=powershell-7

从旧版本复制粘贴:

Windows PowerShell 远程处理

Windows PowerShell 远程处理使用 WS-Management 协议,可让您在一台或多台远程计算机上运行任何 Windows PowerShell 命令。它允许您建立持久连接、启动 1:1 交互式会话以及在多台计算机上运行脚本。要使用 Windows PowerShell 远程处理,必须配置远程计算机以进行远程管理。配置 Windows PowerShell 远程处理后,您可以使用多种远程处理策略。本文档的其余部分仅列出了其中的几种。#启动交互式会话要启动与单台远程计算机的交互式会话,请使用 Enter-PSSession cmdlet。例如,要启动与 Server01 远程计算机的交互式会话,请键入:

Enter-PSSession Server01

命令提示符会更改为显示您所连接的计算机的名称。从那时起,您在提示符下输入的任何命令都会在远程计算机上运行,​​并且结果会显示在本地计算机上。

要结束交互式会话,请输入:

Exit-PSSession

#运行远程命令

要在一台或多台远程计算机上运行任何命令,请使用 Invoke-Command cmdlet。例如,要在 Server01 和 Server02 远程计算机上运行 Get-UICulture 命令,请键入:

invoke-command -computername Server01, Server02 {get-UICulture}

输出返回到您的计算机。

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

#运行脚本

要在一台或多台远程计算机上运行脚本,请使用 Invoke-Command cmdlet 的 FilePath 参数。脚本必须位于本地计算机上或可由本地计算机访问。结果将返回到本地计算机。

例如,以下命令在 Server01 和 Server02 远程计算机上运行 DiskCollect.ps1 脚本。

invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1

#建立持久连接

要运行一系列共享数据的相关命令,请在远程计算机上创建一个会话,然后使用 Invoke-Command cmdlet 在您创建的会话中运行命令。要创建远程会话,请使用 New-PSSession cmdlet。

例如,以下命令在 Server01 计算机上创建一个远程会话,并在 Server02 计算机上创建另一个远程会话。它将会话对象保存在 $s 变量中。

$s = new-pssession -computername Server01, Server02

现在会话已建立,您可以在其中运行任何命令。由于会话是持久的,您可以在一个命令中收集数据并在后续命令中使用它。

例如,以下命令在 $s 变量中的会话中运行 Get-Hotfix 命令,并将结果保存在 $h 变量中。$h 变量在 $s 中的每个会话中创建,但它在本地会话中不存在。

invoke-command -session $s {$h = get-hotfix}

现在您可以在后续命令中使用 $h 变量中的数据,例如以下命令。结果显示在本地计算机上。

invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"} }

答案2

尝试隧道工人来自 Bitvise。这是一个 ssh 客户端。还有一个ssh 服务器用于连接到 Windows 机器。这两者可让您建立非常安全的连接以及更高级的功能,例如 Web 代理或端口隧道。

答案3

为 Windows 安装 OpenSSH 端口 - 它是免费的,并提供客户端和服务器。

答案4

你可以尝试执行它为你提供了文件共享服务上的远程 shell(或者不管它叫什么)。还有操作系统如果您想使用 Linux 作为客户端。

相关内容