网站建设服务器
Windows远程管理(WinRM)是WS-Management协议的Microsoft实现。该协议是基于简单对象访问协议(SOAP)的防火墙友好的标准协议,它使来自不同供应商的硬件和操作系统能够互操作。WS-Management协议是由硬件和软件制造商开发的。作为一种公共标准,它可用于与任何实现该协议的计算机设备远程交换管理数据。
使用PowerShell远程管理服务器,应该在远程服务器上启用WinRM。
第一,知识储备:
1.WinRM相关操作
打开WinRM服务:
enable-PS remoting-Force
阻止本地计算机接收远程命令(不会停止WinRM服务):
禁用-PS remoting-Force
查看WinRM服务监控信息:
winrm枚举winrm/config/Listener
WinRM2.0的默认端口是5985(HTTP端口)或5986(HTTPS端口)。
删除WinRM HTTP侦听:
winrm删除winrm/config/listener?地址=*传输=HTTP
重新建立HTTP侦听:
winrm创建winrm/config/listener?地址=*传输=HTTP
WinRM服务更改侦听端口:
set-item-force ws man:\ \ \ \ localhost \ \ \ \ listener \ \ \ \ listener * \ \ \ \ port 5985
查看WinRM配置:
winrm获取winrm/config
查看端口监视器状态:
netstat -nao | findstr 5985
2、PowerShell脚本保存凭证的方法
使用Get-Credential命令以交互方式输入凭据(用户名和密码)。您可以先将凭证保存在变量中,例如:
$ cred=get-credit
$cred的对象类型名是:system。management . automation . PS credential,其中Password和UserName是它的属性,因此您可以创建一个这种类型的新对象。这里需要注意的是,密码类型是SecureString,用户名类型是String,所以需要将明文密码转换成安全字符串,可以使用ConvertTo-SecureString命令。
非交互式保存凭据代码示例:
$ account=管理员
$password=\\\'123456\\\ '
$ sec pwd=convert to-secure string $ password-asplaint ext-force
$cred=new-objectSystem。management . automation . PS credential-argument list $ account,$secpwd
3、调用命令
Invoke-Command在本地和远程计算机上运行命令,并返回命令的所有输出,包括错误。使用一个Invoke-Command命令,您可以在多台计算机上运行该命令。一些参数的介绍:
-港口int
为此命令指定远程计算机上的网络端口。当WinRM的默认侦听端口更改时,指定一个新端口。
-计算机名称字符串[]
指定运行此命令的计算机。默认值是本地计算机。
使用ComputerName参数时,Windows PowerShell会创建一个临时连接,该连接仅用于运行指定的命令,然后关闭。如果需要持久连接,请使用Session参数。
在逗号分隔的列表中键入一台或多台计算机的NETBIOS名称、IP地址或完全限定的域名。要指定本地计算机,请键入计算机名,“localhost”或句点(。).
要在ComputerName参数的值中使用IP地址,该命令必须包含Credential参数。此外,计算机必须配置有HTTPS传输,或者远程计算机的IP地址必须包含在本地计算机上的WinRM TrustedHosts列表中。
-会话PSSession[]
在指定的Windows PowerShell会话(PSSession)中运行此命令。
通过创建PSSession,Windows PowerShell可以与远程计算机建立永久连接。
-凭据PS凭据
指定有权执行此操作的用户帐户。默认值是当前用户。
-command/-ScriptBlock脚本Block
指定要运行的命令。用大括号({})将命令括起来,形成一个脚本块。
-文件路径字符串
在一台或多台远程计算机上运行指定的本地脚本。
-工作
在远程计算机上作为后台作业运行该命令。使用此参数运行需要很长时间才能完成的命令。
使用AsJob时,此命令返回代表作业的对象,然后显示命令提示符。若要管理作业,请使用Job cmdlet。要获得作业结果,请使用Receive-Job。
-节流限制int
指定为运行此命令可以建立的最大并发连接数。如果省略此参数或输入值0,则使用默认值32。
4、压力
PSSession是一个Windows PowerShell会话。当您需要与远程计算机持续连接时,请使用PSSession。PSSession相关命令:
回车-PSSession
与远程计算机开始交互式会话。
新一轮
创建一个PSSession并返回一个表示PSSession的对象。您可以将对象保存在变量中。
获得-压力
获取在当前会话中创建的PSSession。Get-PSSession返回与New-PSSession返回的对象类型相同的对象。
移除-PSSession
删除PSSession并释放它正在使用的资源。
5.将计算机名添加到TrustedHosts列表中。
要将所有计算机添加到可信主机列表中,请使用以下命令:
set-item ws man:localhost \ \ \ \ client \ \ \ \ trusted hosts-Force-value *
您还可以使用通配符(*)将特定域中的所有计算机添加到可信主机列表中。
例如,以下命令将Fabrikam域中的所有计算机添加到可信主机列表中。
set-item ws man:localhost \ \ \ \ client \ \ \ \ trusted hosts * . fabrikam . com
要将特定计算机的IP地址添加到可信主机列表中,请使用以下命令格式(IP支持通配符*):
set-item ws man:\ \ \ \ localhost \ \ \ \ Client \ \ \ \ trusted hosts-value IP Address[,IP Address]
要查看受信任主机的列表,请使用以下命令:
get-item ws man:\ \ \ \ localhost \ \ \ \ Client \ \ \ \ trusted hosts
二、远程操作的常见场景
场景1:远程交互会话
这种场景一般用于手动远程操作,输入命令,查看结果。方法简单。进入交互式会话的命令是Enter-PSSession,退出时可以键入Exit-PSSession或Exit。在远程交互操作期间,输入命令在远程计算机上运行,就好像它们是在远程计算机上直接输入和执行的一样。退出交互式会话后,期间定义的变量和命令的执行结果不再可用。
场景1的示例:
#用户输入凭证(用户名和密码)
$ cred=get-credit
#建立远程互动会话
输入-PS session-计算机名192 . 168 . 21 . 1-凭据$cred
场景2:脚本块和脚本文件的一次性执行
这种情况是在本地计算机和远程计算机之间建立临时会话。将脚本块或脚本文件的内容发送到远程计算机执行,并将结果发送回本地计算机。这种方法非常高效,PowerShell推荐使用这种方法来执行远程命令。除非需要在会话中共享数据,否则建议使用这种方法。
场景2示例,
#用户输入凭证(用户名和密码)
$ cred=get-credit
#远程执行命令
invoke-command-computer name 192 . 168 . 21 . 1-Credential $ cred-command { dirC:/}
invoke-command-computer name 192 . 168 . 21 . 1-Credential $ cred-script block { dirc:\ \ \ \ }
#远程脚本执行
echodirc:\\\\dirDriveC.ps1
调用-命令-计算机名192 . 168 . 21 . 1-凭据$ cred-文件路径。\\\\dirDriveC.ps1
场景2示例(多个远程主机),
#用户输入凭证(用户名和密码)
$ cred=get-credit
#在多个远程主机上批量执行命令
invoke-command-computer name 192 . 168 . 21 . 1,192.168.21.4,192 . 168 . 21 . 7-Credential $ cred-script block { dirc:\ \ \ \ }
#将并发连接数设置为1。
invoke-command-computer name 192 . 168 . 21 . 1,192.168.21.4,192 . 168 . 21 . 7-Credential $ cred-throttle limit 1-script block { dirc:\ \ \ \ }
场景3:脚本块和脚本文件在命名会话中执行。
1.定义会话:请使用new-pssession命令定义会话,例如$ session 1=new-PS session-computer name server 1。(如有必要,请使用Credential参数。)
2.会话中脚本(或脚本文件)的远程执行:请使用Invoke-Command命令执行远程脚本,如Invoke-Command-session $ session 1-script block { dir c:\ \ }或Invoke-Command-session $ session 1-file path。\ \ \ dir驱动器c.ps1。
3.获取结果:可以将执行结果赋给变量,比如$ sub=invoke-command-session $ session 1-script block { dir c:\ \ \ }或者$ sub=invoke-command-session $ session 1-file path。\ \ \ dir驱动器c.ps1。
后续命令可参照步骤2或者3继续执行,所有执行的命令就好像在同一个上下文中执行一样。
场景三例子、
#用户输入凭据(用户名密码)
$ cred=获得信用
#创建PSSession,并赋值给变量
$ session 1=new-PS session-计算机名192 .168 .21 .1-凭据美元信用
#远程执行命令(持续性)
invoke-Command-Session $ Session 1-脚本块{ $ a=hello world }
invoke-Command-Session $ Session 1-脚本块{ $ a }
场景三例子(多个远程主机)、
#用户输入凭据(用户名密码)
$ cred=获得信用
#对多个远程主机创建PSSession,并赋值给变量
$ session _ many=new-PS session-计算机名192。168 .21 .1,192.168.21.4,192 .168 .21 .7-凭据美元信用
#对多个远程主机批量执行命令
invoke-Command-Session $ Session _ many-throttle limit 1-脚本块{ dirc:\ \ \ \ }
场景三例子(脚本方式)、
$ account=管理员
$password=\\\'123456\\\ '
#把密码转换为安全措施
$ sec pwd=convert to-secure string $ password-as plaint ext-force
#新建附言(同postscript);警官(police sergeant)凭据对象
$cred=new-objectSystem .管理。自动化。PS凭据-参数列表$ account,$secpwd
#远程主机列表赋值给变量
[string[]$计算机名=192。168 .21 .1,192.168.21.4,192.168.21.7
#创建压力
$ session _ many=new-PS session-计算机名$计算机名-凭据$ cred
#批量远程执行命令
invoke-Command-Session $ Session _ many-throttle limit 1-脚本块{ dirc:\ \ \ \ }
参考资料:
https://technet.microsoft.com/zh-cn/library/dd347578.aspx
https://technet.microsoft.com/zh-cn/library/hh847839.aspx
https://technet.microsoft.com/zh-cn/library/dd347642.aspx
http://www。cnblogs。com/ceachy/archive/2013/02/20/PowerShell _ remoting。超文本标记语言
更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理商官网:www.chenqinet.cn