windows服务器远程执行命令(PowerShell+WinRM)


Windows 远程管理 (WinRM) 是 WS-Management 协议的 Microsoft 实现。该协议是基于简单对象访问协议 (SOAP) 的、防火墙友好的标准协议,使来自不同供应商的硬件和操作系统能够互操作。WS-Management 协议由硬件和软件制造商群体开发,作为一种公共标准,可用于与实现该协议的任何计算机设备远程交换管理数据。使用PowerShell对服务器远程管理,要在远程服务器上启用开发云主机域名WinRM。一、知识储备:
1、WinRM相关操作开启WinRM服务:Enable-PSRemoting –Force阻止本地计算机接收远程命令(不会停止WinRM服务):Disable-psremoting –Force查看WinRM服务监听信息:winrm enumerate winrm/config/ListenerWinRM2.0默认端口5985(HTTP端口)或5986(HTTPS端口)。删除WinRM HTTP侦听:winrm delete winrm/config/listener?Address=*+Transport=HTTP重新建立HTTP侦听:winrm create winrm/config/listener?Address=*+Transport=HTTPWinRM服务更改监听端口:set-item -force wsman:localhostlistenerlistener*port 5985查看WinRM的配置:winrm get winrm/config查看端口监听状态:netstat -nao | findstr “5985”2、PowerShell脚本保存凭据方法使用Get-Credential命令来交互式输入凭据(用户名+密码),可以先将凭据保存到一个变量中,如:$cred = get-credential$cred的对象类型名称为:System.Management.Automation.PSCredential,其中的Password和UserName都是其属性,所以可以新建一个该类型的对象。在此处需要注意的是Password类型为SecureString,UserName类型为String,所以需要将明文的Password转换为安全字符串,可以使用ConvertTo-SecureString命令。交互式保存凭据代码示例:3、Invoke-CommandInvoke-Command在本地和远程计算机上运行命令,并从命令返回所有输出,包括错误。使用一个Invoke-Command命令,可以在多台计算机上运行命令。部分参数介绍:-Port 指定远程计算机上用于此命令的网络端口。用于WinRM默认监听端口被更改的情况下,指定新的端口。-ComputerName 指定运行此命令的计算机。默认值为本地计算机。使用 ComputerName 参数时,Windows PowerShell 会创建一个临时连接,此连接仅用于运行指定的命令,之后将关闭。如果需要持续性连接,请使用 Session 参数。在一个逗号分隔列表中键入一台或多台计算机的 NETBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机,请键入计算机名称、“localhost”或句点 (.)。若要在 ComputerName 参数的值中使用 IP 地址,命令必须包括 Credential 参数。另外,必须为计算机配置 HTTPS 传输,或者必须在本地计算机上的 WinRM TrustedHosts 列表中包含远程计算机的 IP 地址。-Session 在指定的 Windows PowerShell 会话 (PSSession) 中运行此命令。通过创建 PSSession,Windows PowerShell 可以建立与远程计算机的持续性连接。-Credential 指定有权执行此操作的用户帐户。默认值为当前用户。-command/-ScriptBlock 指定要运行的命令。用大括号 ({ }) 括起命令以形成脚本块。-FilePath 在一台或多台远程计算机上运行指定的本地脚本。-AsJob在远程计算机上将命令作为后台作业运行。使用此参数可运行需要较长时间才能完成的命令。使用 AsJob 时,此命令返回代表作业的对象,然后显示命令提示符。要管理作业,请使用 Job cmdlet。要获取作业结果,请使用 Receive-Job。-ThrottleLimit 指定为运行此命令可建立的并发连接的最大数目。如果省略此参数或输入 0 值,则使用默认值 32。4、PSSessionPSSession即Windows PowerShell会话。当你需要与远程计算机的持续连接时,则使用PSSession。PSSession相关命令:Enter-PSSession启动与远程计算机间的交互式会话。New-PSSession创建PSSession,并返回一个表示PSSession的对象。你可以将对象保存在变量中。Get-PSSession获取当前会话中创建的PSSession。Get-PSSession返回与New-PSSession返回的对象相同类型的对象。Remove-PSSession删除 PSSession 并释放其正在使用的资源。5、将计算机名称添加到TrustedHosts列表若要将所有计算机添加到受信任主机列表,请使用以下命令 :set-item wsman:localhostclienttrustedhosts -Force -value *还可以使用通配符 (*) 将特定域中的所有计算机添加到受信任主机列表。例如,以下命令将Fabrikam域中的所有计算机添加到受信任主机列表。set-item wsman:localhostclienttrustedhosts *.fabrikam.com若要将特定计算机的 IP 地址添加到受信任主机列表,请使用以下命令格式(IP支持通配符*):set-item wsman:localhostClientTrustedHosts -value “[,]”若要查看受信任主机列表,请使用以下命令:get-item wsman:localhostClientTrustedHosts
二、远程操作常见场景场景一:远程交互式会话  这个场景一般用于手动进行远程操作,输入命令,查看结果。方法很简单。进入交互式会话的命令是Enter-PSSession,退出时键入Exit-PSSession或者exit都可以。远程交互式操作期间,输入的命令在远程计算机上运行,就像直接在远程计算机上输入并执行这些命令一样。期间所定义的变量和命令的执行结果在退出交互式会话之后不再可用。

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

场景三:脚本块、脚本文件在命名会话中执1、定义会话: 请使用new-pssession命令定义会话,如$session1 = new-pssession -computername server1。(如果必要请使用Credential参数。)2、在会话中远程执行脚本(或者脚本文件): 请使用Invoke-Command命令执行远程脚本,如Invoke-Command -Session $session1 -ScriptBlock {dir c:}或者Invoke-Command -Session $session1 -FilePath .dirDriveC.ps13、获得结果: 可以将执行结果赋于变量,如$sub = Invoke-Command -Session $session1 -ScriptBlock {dir c:}或者$sub = Invoke-Command -Session $session1 -FilePath .dirDriveC.ps1后续命令可参照步骤2或者3继续执行,所有执行的命令就好像在同一个上下文中执行一样。
参考资料:https://technet.microsoft.com/zh-cn/library/dd347578.aspxhttps://technet.microsoft.com/zh-cn/library/hh847839.aspxhttps://technet.microsoft.com/zh-cn/library/dd347642.aspxhttp://www.cnblogs.com/ceachy/archive/2013/02/20/PowerShell_Remoting.html

相关推荐: CENTOS6.5安装java8

1、首先去官网下载linux版本的jdk 我下载的64位。jdk-8u121-linux-x64.tar.gz2、把下载好的jdk拷贝到linux上,3、在linux根目录下新建一个java 目录mkdir java4、把jdk拷到此目录下 应用cp /jdk…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 04/02 17:20
Next 04/02 17:20