添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

· PowerShell 中的 远程管理:通过远程管理计算机,通过 WinRM (Windows Remote Management) 起作用,它是基于微软的 WS-Management 协议的。

· PowerShell 2.0 远程管理的条件,必须安装以下软件(默认在 windows 7, 2008 R2 上安装),并且能够在 XP SP3, Server 2003 SP2,Vista,2008 SP1-SP3 上安装;

1 Windows PowerShell 2.0

2 NET Framework 2.0 SP1 以上

3 Windows Remote Management (WinRM) 2.0

· PowerShell 脚本在远程计算机上执行的条件:

1. 在远程主机上属于 administrators 组的成员;

2. 执行远程相关命令时,能提供 administrator 凭证,或具有 PS 线程配置信息的权限;

3. 要求客户端是 Windows vista, 7 以上系统 ;

· PowerShell 中传统的远程命令:可以用来从远程计算机获取信息

o Get-WmiObject

o Invoke-WmiMethod

o Limit-EventLog

o Set-Service

o Set-WmiInstance

o Show-EventLog

o Stop-Computer

o Clear-EventLog

o Get-Counter

o New-EventLog

o Register-WmiEvent

o Remove-EventLog

o Remove-WmiObject

o Restart-Computer

o Get-EventLog

o Get-HotFix

o Get-Process

o Get-Service

o Get-WinEvent

· PowerShell 中新的远程命令:可以用来配置远程管理,并不都是直接用于执行远程命令;

o Enable-PSRemoting :用于配置计算机接受通过 WS-Management 技术发送的 Windows PowerShell 远程命令。如果要启用 PowerShell 远程特性需首先且仅需执行这个 cmdlet 一遍。这个 cmdlet 会马上调用 Set-WSManQuickConfig 配置 WinRM 服务,为 WS Management 启用防火墙的例外,最后启用所有已注册的 PowerShell 配置。

o Disable-Command :用于禁用当前计算机所有的 PowerShell 线程配置,使计算机接受任何从远程主机发送的命令。在禁用 PowerShell 的远程管理后,不再希望 WinRM 服务自启动,则需要手动停止该服务。

o Invoke-Command :用于在本地或远程主机上执行命令并返回命令的输出,包括错误。用单独的 Invoke-Command 命令,可以在多台主机上运行命令。这个 cmdlet 默认情况下会在远程计算机开启线程用于运行命令,当执行完毕命令则将其关闭。这种方式块可能会比较换慢慢需要在特定的预定义线程信息下执行。

o New-PSSession :能用于在远程计算机中创建持久连接。通过创建持久线程,用户可以分享数据,如在相同 PSSession 中的不同命令间共享函数或者变量值。

o Enter-PSSession :能和单独的远程主机启动交互式线程。在线程存活期间,用户向远程主机键入的命令,就如同直接在远程主机上执行。在同一时间只能启动一个交互式线程,用户能通过此 cmdlet 指定由 New-PSSession cmdlet 创建的 PSSession

o Exit-PSSession :将退出由 Enter-PSSession cmdlet 创建的互交式的 PS 线程。

o Get-PSSession :获取在当前线程中创建的 Windows PowerShell 线程 (PSSession) ,当没有参数指定的情况下,这个 cmdlet 获取所有的 PSSession 并返回所有的 PSSession 到一个变量,用户能在其他类似于 Invoke-Command Enter-PSSession Remove-PSSession cmdlet 中使用这些线程信息。

o Remove-PSSession :用于关闭 PS 线程,将会停止任何在 PSSession 中运行的命令,结束 PSSession ,并释放所有 PSSession 占用的资源。如果 PSSesion 正在连接到远程计算机, Remove-PSSession 将会关闭本地到远程计算机的连接。

o Import-PSSession :使用 PowrShell 2.0 隐含的远程特性。隐含的远程特性允许用户从本地 / 远程将命令导入到现存的 PS 线程中,如果是在本地线程中则直接运行命令。

o Export-PSSession :用于从本机或远程计算机的其他 PSSession 中获取 cmdlet ,函数,别名以及其他命令格式,并将其作为 Windows PowerShell 模块存储到本地硬盘。用户能用 Import-Module cmdlet 从存储的模块获取命令并添加到 PS 线程中。

o Register-PSSessionConfiguration :在本地计算机中创建和注册新的线程配置信息。

o Unregister-PSSessionConguration :用于删除在计算机注册线程的配置信息。

o Disable-PSSessionConfiguration : 用于将注册的 PS 线程配置信息置成失效。这里需要强调的是此操作只将配置信息设置为失效,并未从本机反注册或删除信息,这样将会使线程配置信息不能被用于创建远程线程。

o Enable-PSSessionConfiguration: 用于将通过 Disable-PSSessionConfiguration 置为失效的线程配置信息重新生效。

o Get-PSSessionConfiguration: 用于获取已在本地计算机上注册的线程配置信息。

o Set-PSSessionConfiguration: 用于更改已在本地计算机注册的线程配置信息的属性。

o Test-WSMan cmdlet: 快速检查是否能从其他计算机创建远程线程。如果 WinRM 没有在远程主机上启用,用户能安全的确认 PowerShell 远程管理没有被启用。然而,却不能只通过检查 WinRM 服务是否运行来确认 PowerShell 远程管理是否被启用,因为这个 cmdlet 是通过检查 WinRM 服务和远程管理所需的许多功能组件是否齐备来判断的。

o Enable-WSManCredSSP  :PowerShell 远程管理支持 CredSSP 认证并且可以通过 Enable-WSManCredSSP cmdlet 启用。

o Disable-WSManCredSSP: 用于在客户端或服务器禁用 CredSSP 认证。

· PowerSheel 中执行远程操作

配置好远程基础结构,就可以执行远程操作了。远程操作主要依赖几个 Session (会话)命令和 Invoke-Command 命令来进行。常见的使用情况有三种场景:

o 场景一:远程交互式会话

这个场景一般用于手动进行远程操作,输入命令,查看结果。方法很简单。进入交互式会话的命令是 Enter-PSSession ,退出时键入 Exit-PSSession 或者 exit 都可以。远程交互式操作期间,输入的命令在远程计算机上运行,就像直接在远程计算机上输入并执行这些命令一样。期间所定义的变量和命令的执行结果在退出交互式会话之后不再可用。

o 场景二:脚本块、脚本文件的一次性执行

这种场景,是在本地计算机与远程计算机上建立一个临时会话。将脚本块或者脚本文件的内容发送到远程计算机执行,并将结果发回本地计算机。这种方法执行效率很高,是 PowerShell 推荐的执行远程命令的方法。除非需要在会话中共享数据,否则建议使用该方法。

o 场景三:脚本块、脚本文件在命名会话中执行

这种场景是最复杂的,也是功能最强大的。会话会保持所有定义的变量、函数和脚本,导入的模块和管理单元,有利于共享数据。使用方法如下:

1 、定义会话: 请使用 new-pssession 命令定义会话,如 $session1 = new-pssession –computer server1 。(如果必要请使用 Credential 参数。)

2 、在会话中远程执行脚本(或者脚本文件): 请使用 Invoke-Command 命令执行远程脚本,如 Invoke-Command -Session $session1 -ScriptBlock {dir c:\} 或者 Invoke-Command -Session $session1 -FilePath .\dirDriveC.ps1

3 、获得结果: 可以将执行结果赋于变量,如 $sub = Invoke-Command -Session $session1 -ScriptBlock {dir c:\} 或者 $sub = Invoke-Command -Session $session1 -FilePath .\dirDriveC.ps1

· PowerSheel 中执行远程操作实例

我的工作 PC Server ,要点检的服务器就叫 Client ,无论是 Server 还是 Client 都要开启 Windows Remote Management (WS-Management) 服务。

1. Client 上打开 PowerShell ,执行 Enable-PSRemoting –Force ,接着按提示输入 Y 回车,系统会自动配置相关功能。

2. Server 上打开 PowerShell ,执行 cd WSMan::localhost\client, 这是切到远程管理的 client 目录下。

(因为我在工作组模式下,如果是域环境就不需要了,远程连接时自动套用当前用户来认证。)

然后执行 Get-ChildItem ,看一下有什么子项。执行 Set-Item ./TrustedHosts 192.168.1.111, Client IP 加到时 Server 上受信主机里去。 192.168.1.111 是我其中一台 DB 服务器,

要加多台的话,用逗号分隔 IP:

Set-Item ./TrustedHosts ‘192.168.1.110,192.168.1.111,192.168.1.112’

3. 到这里远程管理的配置就完成了。测试一下,在 Server 上执行:

$C=Get-Credential –Credential Administrator;Enter-PSSession –ComputerName 192.168.1.110 –Credential $C

弹出一个框要求输入当前要连接服务器的用户名和密码,我这里用的是管理员。

参考:

http://tech.ccidnet.com/art/302/20100701/2102213_1.html

http://www.cnblogs.com/ceachy/archive/2013/02/20/PowerShell_Remoting.html

http://www.cnblogs.com/Joe-T/archive/2011/11/14/2248384.html