代码改变世界

PowerShell 2.0如何将远程线程保存在本地

2010-12-12 09:09 by @天行健中国元素, ... 阅读, ... 评论, 收藏, 编辑

在上篇文章里,介绍了如何用Import-PSSession cmdlet将远程命令导入到本地来直接执行,如同在本地直接管理多台主机。当然这样的技术能在持久线程存活的情况下使用,如果使用Remove-PSSession杀死了线程或线程过期后,隐式远程线程也会同时被终止。

在本文中将会讨论如何将远程线程保存到本地硬盘,这样就可以不必在每次执行命令前,显式的创建PS线程到远程主机上执行命令了,直接导入本地已经保存的线程信息初始化相关环境即可。

将远程线程作为模块导出到本地

Export-PSSessioon用于从远程线程导入命令并将其保存到本地硬盘作为PowerShell的模块。这个cmdlet能够将cmdlet、函数、别名和其他的命令类型保存到PowerShell模块中。下面是如何使用该cmdlet的例子:

$s = New-PSSession -ComputerName WinServ-wfe

Invoke-Command -Session $s -ScriptBlock {Import-Module ActiveDirectory}

Export-PSSession -Session $s -OutputModule ADRemoteCommands -AllowClobber -Module ActiveDirectory

上面的例子中,前两行分别创建持久线程并导入活动目录模块,第三行用Export-PSSession将别名、函数等所有在$s线程中可用的命令作为模块导出到本地硬盘并命名为ADRemoteCommands

从本地导入模块

能够看到被导出的的模块文件时存放在$Env:PSModulePath中的,这样在导入的过程中就不需要显式的指明导入模块的路径了,执行的命令如下例所示:

Import-Module ADRemoteCommands

上述命令将会导入保存在本地模块中线程所有可用功的命令。导入模块后无论何时,不需要执行任何远程相关的cmdlet,用户就可执行远程命令,隐式远程管理,创建远程线程,在远程线程中执行命令并返回结果。如果创建远程线程需要密码,将会提示用户输入。

Export-PSSession的局限性

使用Export-PSSession也有类似于隐式远程管理的局限性,用户不能通过Export-PSSession导出PowerShell提供者。导出的模块不包含用于创建线程的线程选项,如果需要在运行远程命令之前指定任何线程选项,则需要用户在导入硬盘保存模块之前,先创建带有所需线程选项的PS线程。

总结

用Export-PSSession将远程线程信息保存到本地文件中,能够不用显式创建PS线程或者启动交互式远程线程的情况下,快速执行远程主机上的命令。在前面的文章里介绍了各种情境下启用远程管理,执行远程命令以及导入导出远程线程的方法

赛迪网地址:http://tech.ccidnet.com/art/302/20100702/2104179_1.html

作者: 付海军
出处:http://fuhj02.cnblogs.com
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu/