我一直难以想出一个解决方案,将为 *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:
从旧版本复制粘贴:
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
答案3
为 Windows 安装 OpenSSH 端口 - 它是免费的,并提供客户端和服务器。