注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

 
 
 

日志

 
 

PowerShell远程管理 2.0 版速览  

2009-12-11 14:23:12|  分类: powershell |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
两种远程作业类型
在远程管理领域中,通常存在以下两种远程作业类型:扇入和扇出。扇入远程作业包括多个管理员,他们执行到单个服务器的安全外壳连接。Windows PowerShell 设计为通过一种安全的分区方式启用此功能,以便能够为客户提供对服务器的各部分的管理访问权限,例如,公司的 Exchange Server 即是如此。通过扇入远程作业,您可以采用交互的方式在远程安全地访问远程服务器上安装的 Windows PowerShell 副本(仅限版本 2.0!)。
扇出远程作业是指立即向整组远程服务器发出一组命令。这些命令从工作站并行“扇出”到服务器组。它们在每台服务器上都会执行,并且结果会以 Windows PowerShell 对象的形式返回到工作站,以便复查和处理它们。Windows PowerShell 支持两种核心的扇出远程作业技术 — Windows? 管理规范 (WMI) 和 Windows 远程管理 (WinRM),它们首先在 Windows Server 2008 中推出,而后在 Windows PowerShell 2.0 CTP 中又有所更新。

同步与异步
实际上,Windows PowerShell 1.0 甚至也有一些基本的扇出功能,它们都与 WMI 相关。例如,您可以轻松地创建一个计算机名称数组,然后从中检索 WMI 类:


$names = @("server1","server2","server2")
Get-WmiObject Win32_OperatingSystem 
    –computer $names

执行方法时(例如重启计算机)需要的操作会更多一些,因为版本 1.0 没有提供执行 WMI 方法的批量方式。但在 2.0 CTP 版本中改变了这种情况,而这应归功于 Invoke-WmiMethod cmdlet:


$names = @("server1","server2","server2")
Get-WmiObject Win32_OperatingSystem     –computer $names | `
Invoke-WmiMethod Reboot

但是,此技术存在一个问题。它是同步的,这意味着每台计算机一次只能与一台计算机联系,并且必须等到每台计算机都执行完毕后才可以执行其他命令。但是, CTP 引入了一种全新的概念,即后台作业,这将允许在后台执行类似上面所说的命令。简单说来,只需添加 –AsJob 参数即可在后台运行 WMI 命令:


$names = @("server1","server2","server2")
Get-WmiObject Win32_OperatingSystem     –computer $names -asjob

可通过运行 Get-PSJob 来查看最终作业的状态,通过运行 Receive-PSJob 来查看作业的最终结果。(我将在以后的专栏中介绍更多有关作业管理的详细信息。)但是,Invoke-Command cmdlet 为在后台运行命令提供了更好的方式,如下所示:


$command = { Get-WmiObject     Win32_OperatingSystem }
$names = @("server1","server2","server2")
Invoke-Command –command $command     –computer $names –asjob

它实际上是将 Get-WmiObject 命令向外推送到每台指定的计算机,然后在本地执行。它的执行速度通常要快得多,并且不必依赖 WMI 远程过程调用 (RPC) 连接。相反,Invoke-Command 使用的是 WinRM,默认情况下,WinRM 使用端口 80 或 443。这些端口可轻松地导航防火墙,并且是完全可配置的。Invoke-Command 还支持用于备用凭据和限制的其他参数,允许您将数以百计的计算机作为目标,但只并行运行其中的数台。这可以避免拥堵和过度开销。

可重用的运行空间
如果打算多次远程管理给定的一组计算机,应考虑使用运行空间而非简单的计算机名称列表。在 Windows PowerShell 中,运行空间只是外壳引擎的一个实例(无论它是作为外壳控制台窗口在计算机中本地运行,还是在远程计算机中在后台运行)。启动远程运行空间非常简单:


$names = @("server1","server2","server2")
New-RunSpace –computer $names

由于运行空间也使用 WinRM,因此默认情况下它们也使用端口 80(如果指定 –UseSSL 参数,则为 443)。它们也可以接受备用凭据等。如果检索最终的运行空间对象,可将其传递给 Invoke-Command,Windows PowerShell 会将命令向外推送到这些运行空间所在的计算机中:


$command = { Get-WmiObject     Win32_OperatingSystem }
$rs = Get-Runspace
Invoke-Command –command $command     –runspace $rs –asjob

这样做的好处是只要外壳处于打开状态,运行空间就始终是活动的,因此可以很方便地针对其他命令重用它们。

扇入远程作业
运行空间也是扇入远程作业的关键所在。例如,在远程计算机上创建了一个运行空间并检索了对该运行空间的一个引用,然后又使用 Push-Runspace cmdlet 激活了该运行空间。此时,我在远程计算机上运行命令,非常类似于 SSH 或其他远程外壳实用程序所允许的那样。运行 Pop-Runspace 将返回我的原始“本地”运行空间,并且外壳提示符会帮助我随时跟踪我所在的位置。

我所运行的具体命令顺序如下:


PS C:\>new-runspace -computer     "WIN-YFZXQMHXAWM"
PS C:\>$server2 = get-runspace -sessionid 2
PS C:\>push-runspace $server2
[win-yfzxqmhxawm]: PS C:\Windows\System32>    pop-runspace
PS C:\>

此技术被称为扇入,因为多个管理员可以同时打开同一台服务器上的远程交互式运行空间 — 他们从各自的工作站“扇入”到服务器。Windows PowerShell 2.0 中的新安全模型允许创建受限制外壳和 cmdlet,因此每个管理员均无法进行全局修改。每人都被限制在其自己的外壳区域。(这些新的安全技术需要通过以 .NET Framework 为目标的语言进行一些自定义的软件开发。此内容超出了 Windows PowerShell 专栏的范围,但最好知道存在这些功能。)

2.0 中的杀手级应用程序
Windows PowerShell 2.0 CTP 新增了一组无与伦比的功能。在我看来,远程功能即是杀手级应用程序。几乎所有环境中的每个管理员都可以从中受益。
您应当熟悉这些功能,以便向产品团队提供您的建议。您是否希望通过组策略来管理 WinRM 默认端口?cmdlet 的工作方式是否应有所不同?是否存在性能问题?WinRM 配置起来容易吗?您可以将建议发送到 connect.microsoft.com 来发表您的观点,或与 MVP 奖获者以及我本人(要与我联系,请将您的反馈发布到论坛 ScriptingAnswers.com)共享您的反馈。让我们共同参与,一起构建下一代 Windows PowerShell 的杀手级应用程序!


  评论这张
 
阅读(1048)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017