转自: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://bobzy.blog.51cto.com/2109336/1181249
PowerShell是微软开发的一个Shell工具,你可以向Linux Unix一样采用命令的方式去控制windows ,Win7之后的版本都带有这个功能。
不过我刚开始使用PowerShell就遇到一个问题。我如何进行远程连接?如果只能在本届执行岂不是和CMD没有区别。
查看了不少文档以后发现,其实需要配置一下就好了。
说一下环境。
服务端:Windows Server 2008 R2 标准版 加入AD , abc.com域
客户端:Win 7 SP1 64位 工作组模式
具体方法:
1.在服务器上 用管理员权限 执行 Enable-PSRemoting 命令
之后会有一堆的确认操作 全部YES就好了
2 在客户端上 执行 Enter-PSSession IP地址 -Credential 域名用户名
例如:Enter-PSSession 192.168.3.1 -Credential abcadministrator
注意:网上好多教程 都是说这样就可以了,但是实际会提示一个错误:
Enter-PSSession : 连接到远程服务器失败,错误消息如下: WinRM 客户端无法处理该请求。如果身份验证方案与 Kerberos 不同,或
者客户端计算机未加入到域中, 则必须使用 HTTPS 传输或者必须将目标计算机添加到 TrustedHosts 配置设置。 使用 winrm.cmd 配
置 TrustedHosts。请注意,TrustedHosts 列表中的计算机可能未经过身份验证。 通过运行以下命令可获得有关此内容的更多信息: wi
nrm help config。 有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。
所在位置 行:1 字符: 16
+ Enter-PSSession <<<< 192.168.3.1 -Credential abcadministrator
+ CategoryInfo : InvalidArgument: (192.168.3.1:String) [Enter-PSSession], PSRemotingTransportException
+ FullyQualifiedErrorId : CreateRemoteRunspaceFailed
网上一般都是说要添加一个TrustedHosts表,相当于一个信任列表。
执行如下命令,将IP为192.168.3.*的主机都加入信任列表
Set-Item wsman:localhostClientTrustedHosts -value 192.168.3.*
注意这个命令需要在 客户端上执行 不是在服务端执行 且客户端需要已管理员权限执行,这一点许多教程没有说,走了不少弯路。
之后再用 Enter-PSSession 192.168.3.1 -Credential abcadministrator 命令就可以完成连接了。
/************************************************ edit 2014-1-26*******************************************/
from:http://blog.csdn.net/tonyhuang_google_com/article/details/10428921
我们采用one-by-one方式:
2.1 在每个节点依次执行单节点时候的步骤直到使能远程脚本功能那一步:
确保 Administrator用户有密码保护
.以Administrator权限运行 Windows PowerShell((用用户名为Administrator的本地管理员登陆), 在PowerShell中依次执行下列命令:
[cpp] view plaincopyprint?
- Set-ExecutionPolicy "Unrestricted" (无需数字签名就可运行脚本,比较危险;如果觉得不安全可以改为 "RemoteSigned",即对远程脚本的执行需要数字签名)
- Enable-PSRemoting
- Set-item wsman:localhostclient rustedhosts -value "s1,s2"
- winrm quickconfig
- winrm set winrm/config/client '@{TrustedHosts="s1,s2"}'
Set-ExecutionPolicy "Unrestricted" (无需数字签名就可运行脚本,比较危险;如果觉得不安全可以改为 "RemoteSigned",即对远程脚本的执行需要数字签名) Enable-PSRemoting Set-item wsman:localhostclient rustedhosts -value "s1,s2" winrm quickconfig winrm set winrm/config/client '@{TrustedHosts="s1,s2"}'然后切回到当前用户
如果要验证远程脚本和命令是否有效,可以管理员权限运行powershell, 执行 Invoke-Command -ComputerName 远程机器名 -ScriptBlock { hostname },如果正确显示远程机器名(hostname)则说明远程脚本和命令起效。比如在s1中执行 Invoke-Command -ComputerName s2 -ScriptBlock { hostname },能正确显示s2.
需要在每个节点上验证是否能连到本机和其它远程机器。
// 如:
Invoke-Command -ComputerName hdp10 -ScriptBlock { hostname }
Invoke-Command -ComputerName hdp11 -ScriptBlock { hostname }
Invoke-Command -ComputerName hdp12 -ScriptBlock { hostname }
Invoke-Command -ComputerName hdp13 -ScriptBlock { hostname }
Invoke-Command -ComputerName hdp14 -ScriptBlock { hostname }
Invoke-Command -ComputerName hdp15 -ScriptBlock { hostname }