·
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