Windows PowerShell保持安置!

Don Jones

内容

在解决方案
在操作中查看
对多个远程处理
将其放的主意
它是远程管理,新学校样式

我始终已经沮丧双附带有时出的 Microsoft 服务器管理有关消息: 一方面,我们正在 rightly 告诉我们自己的客户端计算机上安装管理工具和管理我们的服务器使用这些工具。我们不是应该转到在数据中心,即使使用远程桌面从技术上讲欺骗因为它基本上只将到数据中心不采取任何遍历。另一方面,但是,有无法轻松地使用现有的远程工具执行的很多服务器管理任务例如更改 IP 地址或其他使用网络的配置。

Windows PowerShell 问答

Q可 Windows PowerShell 脚本作为登录脚本吗?

A 是,但可能不会这样做的任何点。您可以在 VBScript 文件的方式,就不能将脚本拖到组策略对象 (GPO)。而,必须基本上创建批处理文件运行 Powershell.exe,传递的命令行参数告诉它执行何种脚本。很麻烦。您还必须在运行该登录脚本将每个计算机上安装 Windows PowerShell。在结束,记住 Windows PowerShell 是更独立比 VBScript 或 Cmd.exe 外壳程序。渚嬪的方式  映射使用新建的 PSDrive cmdlet 驱动器不会影响 Windows 资源管理器,您必须要回退实际映射驱动器在 Windows,和如果您要如何,为什么不只是使用更方便地包括在 GPO 中的一个传统的批处理文件在 Net Use 命令?

Q可以安排 Windows PowerShell 脚本吗?

A 绝对。您实际上将计划 PowerShell.exe (位于您 %systemroot%文件夹的 /WindowsPowerShell 下),并为其提供命令行参数指定要执行的脚本。确保已计划的任务设置为使用一个具有执行该脚本执行任何,必要的权限的用户帐户,并确保外壳程序执行策略配置为允许执行脚本 (我更喜欢 AllSigned 策略自己,这意味着您的脚本将需要进行数字签名 ; 运行"帮助 about_signing"外壳程序中的详细信息此)。

Q有使用 Windows PowerShell 中的文件和文件夹权限的简单方法吗?

A 当然。了获取的 ACL,并设置的 ACL 命令,开始,获取的 ACL 是很好,如果您要做的只报告的权限。坦白地说,实际更改的权限使用这些命令是不切实际的 Windows 的权限非常复杂的 beasts,而且您只需要设置访问控制列表 (ACL) 编程是同样复杂。但是,谁说您必须使用 cmdlet 吗?外壳程序适合于运行更传统的命令行工具,各种迭代 Cacls.exe (包括 Dsacls 类似的 Active Directory) 的工作从 Windows PowerShell 中的极好。我时总是使用它们需要修改或设置文件和文件夹的权限。

设置新的服务器核心安装是另一个极好的示例。添加角色、 配置网络、 甚至激活 Windows 必须完成所有在本地控制台窗口中或桌面,通过使用命令行工具。当前存在哪些工具是编写自定义的点处理单个任务的解决方案,或者需要专业知识的 Windows 管理规范 (WMI) 的解决方案。我喜欢 WMI,但坦白地说,大多数管理员花费大量时间的学习太复杂而因此它通常是未使用。

Windows PowerShell 已承诺,使所有的更容易,从而 WMI 有点更容易处理,但更重要的是换行到与我们使用了多年,命令行实用工具的大致对应的简单易用的 cmdlet 的管理任务。外壳的问题是,除了 WMI,它实质上是一个本地的外壳程序。其核心鎿嶄綔绯荤粺配置 cmdlet 的许多未提供任何支持联系远程计算机。外壳程序也不能解决的一个 WMI 的更多 egregious 问题: 它的远程过程调用 (RPC) 的远程连接的使用。RPC 是一个麻烦,在环境中使用的本地防火墙 (和用户不能这些天吗?),通常使 WMI 无法用于任何类型的远程管理。

在解决方案

Microsoft 已相当一段中,了解这些缺点,但它的执行所有所需修补程序若要在单个产品中对齐一些时间。其中包括新版本的 Windows 远程管理 (WRM) 的 Windows PowerShell v2 该产品。同时将附带在 Windows 7 和 Windows Server 2008 R2,第一次,并且两个将预安装在这些操作系统上默认情况下。

该技术也会用于较早 Windows 版本的可能是目前背面为 Windows XP。但在撰写本文没有正式通知已建立有关将支持完全的早期的操作系统 (在较早操作系统更难 Microsoft 的任务,因为较早版本可能缺少所需的一些核心支持的技术)。

WinRM 实际上是使所有此该密钥技术。它是一个 WS MAN,或 Web 服务以管理,用于 Microsoft 实现,顾名思义,则使用 HTTP 和 HTTPS 通信,这意味着很容易将该通信通过防火墙。与上一个已知点开始,然后将其对话移到一个随机选择的端口的 RPC 不同 HTTP 和 HTTPS 利用一个端口 80 和 443 在默认情况,但如果您不喜欢这些配置。WinRM 允许侦听为传入的管理连接的多个不同应用程序,Windows PowerShell v2 能够这样一个应用程序。(个人,我认为 WMI 可能最终将迁移到使用 WinRM)。

实质上是,您坐在客户端计算机上,并要求其外壳程序连接到远程计算机。依次旋转上的远程计算机上的 Windows PowerShell v2 实例在远程计算机上激活了 WinRM。外壳程序的实例都能够运行您的命令和传递返回到您的计算机的结果。

在操作中查看

在公用测试版版本的 Windows 7 是第一次世界上最大可能尝试此操作: 打开 Windows PowerShell 会话在服务器上的或多个服务器上 — — 并运行启用的 PSRemoting 配置 WinRM,并启动 WinRM 服务。然后,转到您的客户端计算机也在运行 Windows PowerShell v2 — 并运行 $ 会话 = PSSession 新建的计算机名,远程处理提供您只需配置该服务器的名称。新建-PSSession cmdlet 还可以接受备用的凭据,如果需要并且可以被告知使用非标准端口,如果您已配置。

如果您看到较长的错误消息类似 图 1 所示的方式因 WinRM 进行身份验证。它 Kerberos 默认情况下使用,但在非域环境 (如图所示在实验室计算机上类似) 中, Kerberos 不是选项。Kerberos 不可用时, WinRM 要求的 HTTPS 传输要求在服务器计算机上安装 SSL 证书的使用。这是为了提供您和服务器之间的相互身份验证,以便您知道您连接到您希望该计算机。指定即使 –auth 参数中的基本或摘要式身份验证不能帮助 WinRM 想要使用 HTTPS 加密通信。最简单的解决方案?为在 Active Directory 域中 !

fig01.gif

图 1 像这样可能由于发生在 wayWinRM 较长的错误消息进行身份验证

与您在激活的会话准备开始使用它。输入 PSSession $ 会话将您连接,活动,到远程服务器。神奇地,您要以键入 Windows PowerShell 其实例。以交互方式运行命令,您立即看到结果) 不与 SSH 或类似的技术通常在 UNIX 计算机上使用不同。

Windows PowerShell 甚至会某些默认加密,如果您不使用 HTTPS,您仍然 eavesdroppers 非常安全。运行退出-PSSession 若要从远程控制台分离,并返回您的本地控制台。当您连接到以提醒您在您等远程计算机,则外壳程序提示即使更改。

对多个远程处理

能够在一台计算机上运行的命令是很好,但频率您需要执行一个操作,在一台服务器上吗?通常,我发现我需要在整个大量的计算机上运行命令或一组命令。什么我们使用了到目前为止在 Windows PowerShell v1 称为一对一 (1: 1),远程处理意味着管理一台远程计算机是一个管理员。但外壳程序还提供了一个一对多 (1:n) 的远程处理,位置是一个管理员可以管理多台计算机。关键是 PSSession 的新建的 –computerName 参数中。

让我重复我前面的命令,但这次我将实际拼写出参数而不是让外壳程序假定它: 新建 PSSession –computerName 计算机。因为 –computerName 是位置参数,不需要指定实际参数名称前面,但现在执行此操作将使此操作更容易理解: $ 会话 =-新建 PSSession –computerName (c:\names.txt 获取的内容)。假定 C:\names.txt 文件包含的计算机名称列表,一台计算机名称,每行,然后外壳程序将创建它们以 $ 会话变量中存储会话的整个列表的每个远程会话。

通过默认,会话使用创建 Windows PowerShell 本身任何凭据下运行,因此,我的登录帐户我使用 RunAs 启动外壳程序时。一个单词的警告: 如果用户帐户控制 (UAC) 已启用,请务必显式启动外壳"管理员"通过右击其图标。或者,您可以通过使用命令的 –credential 参数为会话指定一个不同的用户名。

后此命令的集合可以继续使用它们以 1: 1: 输入 PSSession $ 会话 [0] 将您连接到第一台计算机的外壳程序实例,例如。但实际电源在一次针对所有的运行命令: 调用命令 –scriptblock {ipconfig} 0 –session $ 会话。它已连接到一个的会话的每个计算机上运行 Ipconfig 命令,并将结果返回您的计算机。它将实际连接到计算机并联达 32,一次 ; 可以将的并行执行中止更改通过使用 –throttlelimit 参数。

将其放的主意

当然,有时将触发命令的需要一段时间才能运行,关闭,并且您可能不希望坐下来等待完成的所有内容的周围。在这样的情况下,为什么不让外壳程序继续在后台处理呢?只需将 –AsJob 参数添加到调用的命令,并外壳程序创建后台作业。

请记住外壳程序的副本不真正执行的工作 ; 远程 Windows PowerShell 实例上执行您指定命令。您外壳程序只需等待它们完成,并收集结果他们发送回。这些结果存储为作业的一部分。运行若要查看所有当前作业和它们的状态 (是否它们仍在运行,例如) 获取的作业。用于接收作业的提取出已完成作业的结果。因此,它可能如下所示:

$sessions = New-PSSession –computerName (Get-Content c:\names.txt)
$job = Invoke-Command –scriptblock { your command(s) } –AsJob
Get-Job (to check the status)
$results = Receive-Job $job

您可以然后 $ 结果的显示、 筛选、 排序,等等。 每个结果都有附加到帮助您查看来自哪台计算机的信息。 我将讨论 (它甚至可以拥有要处理的后续) 的后台作业在以后的文章。

它是远程管理,新学校样式

忘记了旧的学校方式的涉及到数据中心旅游或使用一个桌面的"远程"管理"就。" Windows PowerShell v2 的远程处理功能是杩愯  鍛戒护一个功能强大的而简单的方法 — — 任何命令在远程计算机上。 尽管我个人的焦点是在服务器管理,这些相同的技术非常适合桌面管理任务,这是为什么 Windows PowerShell v2 是预安装 Windows 7,以及 Windows Server 2008 R2 上的一个原因。

Don Jones 是一个 co-founder 的 集中的技术他每周有关 Windows PowerShell,SQL Server,App-V 的博客和其他主题。 与他联系通过其 Web 站点。