・ 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 �Ccomputer 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 �CForce,接着按提示输入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 �CCredential Administrator;Enter-PSSession �CComputerName 192.168.1.110 �CCredential $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