极客学校:学习在PowerShell中使用远程处理

PowerShell提供的最佳功能之一是能够远程管理您的服务器。它甚至还能让你一次管理一大堆这样的东西。

请务必阅读本系列的前几篇文章:

了解如何使用PowerShell自动化Windows。 学习在PowerShell中使用Cmdlet。 了解如何在PowerShell中使用对象。 在PowerShell中学习格式化、筛选和比较

在接下来的一周里,我们将继续关注这一系列的节目。

什么是远程处理?

批量管理您的服务器可能会很乏味,如果您以前必须在50台Web服务器上更改IIS配置,您就会明白我的意思。在这些情况下,PowerShell远程处理和该语言的脚本功能可以派上用场。使用HTTP或更安全的HTTPS,PowerShell远程处理允许您向网络上的远程计算机发送命令。然后,机器运行命令并将输出发回给您,然后输出显示在您的屏幕上。

让我们来了解一下技术方面的情况

PowerShell Remoting的核心是单一的Windows服务,也就是众所周知的Windows远程管理或WinRM服务。使用WinRM,您可以设置一个或多个会话配置(也称为端点),这些配置基本上是包含有关您希望向连接到远程PowerShell实例的人员提供体验的信息的文件。更具体地说,您可以使用会话配置文件来定义哪些人可以连接到实例,哪些人不能连接,哪些cmdlet和脚本可以运行,以及会话必须在什么安全上下文下运行。使用WinRM服务,您还可以设置“侦听器”,它侦听传入的PowerShell请求。这些“监听程序”可以是HTTP或HTTPS,并且可以绑定到您计算机上的单个IP地址。当您打开到另一台计算机的PowerShell连接时(从技术上讲,这是使用基于HTTP的WS-MAN协议完成的),该连接将绑定到这些“侦听器”之一。然后,“侦听器”负责将流量发送到与适当的会话配置文件相关联的应用程序;该应用程序(通常为PowerShell,但如果需要,您也可以使用其他托管应用程序)然后运行该命令,并通过“侦听器”将结果通过网络返回到您的计算机上。

告诉我怎么做

您需要做的第一件事是在要连接的计算机上启用远程处理。这可以通过运行以下命令来完成:

然后,您需要对所有提示回答是。运行Enable-PSRemoting时,会对您的PC进行一些更改:

WinRM服务启动。 WinRM服务从手动启动模式更改为自动启动模式。 它会创建一个绑定到所有网卡的HTTP侦听器。 它还为WS-MAN协议创建入站防火墙例外。 创建了一些默认会话配置

如果您运行的是Windows 7,并且您的网卡位置设置为Public,则启用PowerShell远程处理将失败。要修复它,只需切换到家庭或工作网络位置。或者,您可以使用以下选项跳过网络检查:

但是,我们建议您最好更改您的网络位置。

使用PowerShell连接到另一台计算机有两种方式。有一种方法是一对一的,这与使用SSH非常相似,然后是一对多方法。

使用PowerShell会话

使用PowerShell连接到远程计算机的第一种方式是使用称为PowerShell会话的东西。简单地说,会话允许您以交互方式在远程计算机上运行命令,与在您自己的计算机上运行命令非常相似。要打开会话,只需键入以下命令:

提示将获得一个前缀,该前缀表示您正在运行cmdlet的计算机。

从这里,您可以真正像坐在远程机器前一样处理提示。例如,如果要查看C:\驱动器上的所有文件,可以执行以下简单操作:

如果您来自Linux背景,您可以考虑使用这种一对一的远程处理方法作为SSH的PowerShell替代方案。

使用Invoke-Command

在远程机器上使用PowerShell的第二种方法是使用Invoke-Command。使用Invoke-Command的优势在于您可以在多台机器上同时执行同一命令。正如您可以想象的那样,当您想要执行某些操作(如从服务器收集事件日志)时,这特别有用。Invoke-Command遵循以下语法:

由于该命令在所有机器上并行执行,因此您需要某种方式来查看给定结果来自哪台PC。您可以通过查看PSComputerName属性来完成此操作。

使用Invoke-Command时,您不再拥有管道中可能需要的对象。您知道,为了让PowerShell将信息从远程计算机返回到您的计算机,它们需要某种方式来表示您在远程计算机上运行的命令输出的对象。如今,表示分层数据结构的选择方式似乎是使用XML,这意味着当您使用Invoke-Command发出命令时,结果首先被序列化为XML,然后再发送回您的机器。一旦它们返回到您的机器上,它们就被反序列化到一个对象中;这里的问题是,当它们被反序列化时,除了ToString()方法之外,对象拥有的所有方法都会被剥离。

注意:此规则也有一些例外,例如,大多数原始类型(如整数)都可以反序列化它的方法。还有一个称为恢复消重数据的过程,在该过程中可以将一些方法添加回反序列化对象。所以要小心,记住Get-Member是你的朋友。

家庭作业 / 准备工作 / 预先所做的研究 / 在家里做的工作

阅读Don Jones的“PowerShell远程处理的秘密”电子书。

相关文章