• winrm.cmd


    C:Windowssystem32>winrm.cmd
    Windows 远程管理命令行工具

    Windows 远程管理(WinRM)是 WS-Management 协议的 Microsoft 实现,
    该协议为使用 Web 服务的本地计算机和远程计算机
    之间的通信提供了一种安全的方式。

    使用情况:
    winrm OPERATION RESOURCE_URI [-SWITCH:VALUE [-SWITCH:VALUE] ...]
    [@{KEY=VALUE[;KEY=VALUE]...}]

    有关特定操作的帮助:
    winrm g[et] -? 检索管理信息。
    winrm s[et] -? 修改管理信息。
    winrm c[reate] -? 创建管理资源的新实例。
    winrm d[elete] -? 删除管理资源的实例。
    winrm e[numerate] -? 列出管理资源的所有实例。
    winrm i[nvoke] -? 执行管理资源上的方法。
    winrm id[entify] -? 确定 WS-Management 实现是否
    正在远程计算机上运行。
    winrm quickconfig -? 对该计算机进行配置以接受其他计算机的
    WS-Management 的请求。
    winrm configSDDL -? 修改 URI 的现有安全描述符。
    winrm helpmsg -? 显示错误消息的错误代码。

    有关相关主题的帮助:
    winrm help uris 创建资源 URI 的方式。
    winrm help aliases URI 的缩写。
    winrm help config 配置 WinRM 客户端和服务设置。
    winrm help certmapping 配置客户端证书访问。
    winrm help remoting 访问远程计算机的方式。
    winrm help auth 提供远程访问的凭据。
    winrm help input 提供输入以进行创建、设置和调用。
    winrm help switches 其他开关,例如格式化、选项等等。
    winrm help proxy 提供代理信息。
    C:Windowssystem32>winrm help config
    Windows 远程管理命令行工具

    使用 winrm 命令行或通过 GPO 管理 WinRM 的配置。
    配置同时包括客户端和服务的全局配置。

    WinRM 服务至少需要一个侦听程序以表示 IP 地址,
    以接受该地址上的 WS-Management 请求。
    例如,如果计算机具备多个网卡,则可将 WinRM 配置为仅接受
    这些网卡其中之一的请求。

    全局配置
    winrm get winrm/config
    winrm get winrm/config/client
    winrm get winrm/config/service
    winrm enumerate winrm/config/resource
    winrm enumerate winrm/config/listener
    winrm enumerate winrm/config/plugin
    winrm enumerate winrm/config/service/certmapping

    网络侦听需要一个或多个侦听程序。
    侦听程序由两个选择器识别: Address 和 Transport。

    Address 必须是以下内容之一:
    * - 侦听计算机上的所有 IP
    IP:1.2.3.4 - 仅侦听指定的 IP 地址
    MAC:... - 仅侦听指定 MAC 的 IP 地址。

    注意: 所有侦听受制于 IPv4Filter 和 IPv6Filter (在
    config/service.
    注意: IP 可能为 IPv4 地址或 IPv6 地址。


    传输必须为以下内容之一:
    HTTP - 侦听 HTTP (默认端口为 5985)上的请求
    HTTPS - 侦听 HTTPS (默认端口为 5986)上的请求

    注意: 默认情况下 HTTP 流量仅允许
    用 Negotiate 或 Kerberos SSP 加密的消息。


    配置 HTTPS 时,使用以下属性:
    Hostname - 该计算机的名称;必须与证书中的 CN 匹配。
    CertificateThumbprint - 适用于服务器身份验证的证书
    的十六进制指纹。
    注意: 如果仅提供 Hostname,则 WinRM 将试图找到对应的
    证书。

    示例: 侦听计算机上所有 IP 的 HTTP 请求:
    winrm create winrm/config/listener?Address=*+Transport=HTTP

    示例: 禁用给定的侦听程序
    winrm set winrm/config/listener?Address=IP:1.2.3.4+Transport=HTTP @{Enabled="false"}

    示例: 启用客户端而非服务上的基本身份验证:
    winrm set winrm/config/client/auth @{Basic="true"}

    示例: 为所有工作组计算机启用 Negotiate。
    winrm set winrm/config/client @{TrustedHosts="<local>"}

    另请参阅:
    winrm help uris
    winrm help aliases
    winrm help certmapping
    winrm help input
    winrm help switches
    C:Windowssystem32>

    C:Windowssystem32>winrm help config
    Windows 远程管理命令行工具

    使用 winrm 命令行或通过 GPO 管理 WinRM 的配置。
    配置同时包括客户端和服务的全局配置。

    WinRM 服务至少需要一个侦听程序以表示 IP 地址,
    以接受该地址上的 WS-Management 请求。
    例如,如果计算机具备多个网卡,则可将 WinRM 配置为仅接受
    这些网卡其中之一的请求。

    全局配置
    winrm get winrm/config
    winrm get winrm/config/client
    winrm get winrm/config/service
    winrm enumerate winrm/config/resource
    winrm enumerate winrm/config/listener
    winrm enumerate winrm/config/plugin
    winrm enumerate winrm/config/service/certmapping

    网络侦听需要一个或多个侦听程序。
    侦听程序由两个选择器识别: Address 和 Transport。

    Address 必须是以下内容之一:
    * - 侦听计算机上的所有 IP
    IP:1.2.3.4 - 仅侦听指定的 IP 地址
    MAC:... - 仅侦听指定 MAC 的 IP 地址。

    注意: 所有侦听受制于 IPv4Filter 和 IPv6Filter (在
    config/service.
    注意: IP 可能为 IPv4 地址或 IPv6 地址。


    传输必须为以下内容之一:
    HTTP - 侦听 HTTP (默认端口为 5985)上的请求
    HTTPS - 侦听 HTTPS (默认端口为 5986)上的请求

    注意: 默认情况下 HTTP 流量仅允许
    用 Negotiate 或 Kerberos SSP 加密的消息。


    配置 HTTPS 时,使用以下属性:
    Hostname - 该计算机的名称;必须与证书中的 CN 匹配。
    CertificateThumbprint - 适用于服务器身份验证的证书
    的十六进制指纹。
    注意: 如果仅提供 Hostname,则 WinRM 将试图找到对应的
    证书。

    示例: 侦听计算机上所有 IP 的 HTTP 请求:
    winrm create winrm/config/listener?Address=*+Transport=HTTP

    示例: 禁用给定的侦听程序
    winrm set winrm/config/listener?Address=IP:1.2.3.4+Transport=HTTP @{Enabled="false"}

    示例: 启用客户端而非服务上的基本身份验证:
    winrm set winrm/config/client/auth @{Basic="true"}

    示例: 为所有工作组计算机启用 Negotiate。
    winrm set winrm/config/client @{TrustedHosts="<local>"}

    另请参阅:
    winrm help uris
    winrm help aliases
    winrm help certmapping
    winrm help input
    winrm help switches
    C:Windowssystem32>winrm get winrm/config/service
    Service
    RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
    MaxConcurrentOperations = 4294967295
    MaxConcurrentOperationsPerUser = 1500
    EnumerationTimeoutms = 240000
    MaxConnections = 300
    MaxPacketRetrievalTimeSeconds = 120
    AllowUnencrypted = true
    Auth
    Basic = true
    Kerberos = true
    Negotiate = true
    Certificate = false
    CredSSP = false
    CbtHardeningLevel = Relaxed
    DefaultPorts
    HTTP = 5985
    HTTPS = 5986
    IPv4Filter = *
    IPv6Filter = *
    EnableCompatibilityHttpListener = false
    EnableCompatibilityHttpsListener = false
    CertificateThumbprint
    AllowRemoteAccess = true

    C:Windowssystem32>

    Powershell 远程管理 (一)
     忙里偷闲挤出点时间写写PS在Windows不错的管理方式。Powershell 2.0以后可以说是有了质的变化,Modules的加入、ISE、WinRM远程管理的支持,今天主要讲一系列PowerShell在企业级应用的远程管理,其实也是我这次在部署一个应急方案使用的一些脚本和方案的集合吧。(我这里是 域环境,读者可以自己搭建测试)
     首先,我们需要安装Powershell 2.0和WinRM 2.0 ,这个是作为WindowsUpdate附加补丁得,可以通过可选补丁进行安装
     
    选中,直接安装就好了,如果要给所有的服务器安装这个补丁,那么可以考虑用AD环境下的WSUS来安装这个补丁(关于WSUS的配置我会在以后讲述Win2k8 WSUS的文章下详细说明)。
     Powershell好处之一就是文档很详细,我们不清楚要多使用Get-Help来查看帮助,可以先查阅一些关于远程的相关资料:Get-Help about_remote*,我在使用Powershell 1.0的使用做远程是相当的痛苦的,每次都要使用WMI的Win32_Process来创建远程进程,2.0提供了交互式的Session 以及比较好用的Invoke-Command ,同时对其他的命令提供了-ComputerName的参数,管理起来更加方便。
     先说下使用WMI方式做远程调用吧,首先确认目标机器(需要管理的机器)的远程管理(Remote Administration)的防火墙是开启Inbound 允许您的IP传入的。
    打开Windows高级防火墙 –> 传入规则(InboundRules) ->远程管理(Remote Administration)->双击打开对话框 
    选中 Advanced 选择自己的作用域 我这里选择的All,以及在Scope下找到远程IP地址(Remote IP) 加入 Localsubset 本地子网 然后保存 启用规则 如图:


      
    这样一下,我们就允许本地子网对 这台机器的 访问远程管理端口了(当然你可以根据自己,只给定一个IP访问目标机器的远程管理端口防火墙)。
    如果是域环境,要开启这个策略,我们可以建立一个GPO,在
    编辑GPO对象的策略->计算机配置->管理模版->网络->网络连接->防火墙->域->Windows Firewall:Allow Inbound remote Administration exception的策略,
    启用并且选择自己需要加入的IP:
     
    然后应用到自己的OU 或者 整个站点(我建议您在部署入域的服务器先做好各种测试和策略,在入域以后 马上就会立即生效,那么也会比较方便,做远程管理呢。)
    先讲述三个命令:
    Get-WmiObject (1.0+)
    Invoke-WmiMethod (2.0)
    Invoke-Command (2.0)
    大家自行认真查看对应的帮助吧,Get-Help Get-WmiObject –Full
    WMI调用的话,2.0直接使用Invoke-WmiMethod
    比如,我们经常用到的,更新租策略,我记得有一次,我失误导致大部分机器的3389端口全部关闭,远程链接全部失败。我更新组策略,但是没有GPO生效都要超过90分钟的,不得已 一些机器的admin$的共享也关闭,不能使用psexec 来远程调用命令。于是我就用WMI的方式来主动更新组策略:

    复制代码
    function GpupdateForce
    {
    param
    (
    [String][parameter(Mandatory=$True)]
    [String]$RemoteComputer
    )
    Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "GPUPDATE /FORCE" -EnableAllPrivileges -ComputerName $RemoteComputer
    }
    复制代码

    这个方法我没有提供Credential ,就是默认当前登录的域帐号,我们也可以使用
    $creq = Get-Credential
    然后在Invoke-WmiMethod –Credential $req的方式提供对应的凭据。例如:

    复制代码
    function RemoteCall
    {
    param
    (
    ##调用的命令
    [String][parameter(Mandatory=$True)]$Cmd,
    ##远程计算机
    [String][parameter(Mandatory=$True)]$RemoteComputer
    )
    $credential = Get-Credential
    ##可以使用Invoke-Command
    Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList $Cmd -EnableAllPrivileges -ComputerName $RemoteComputer -Credential $credential
    }
    复制代码

    如果你的帐号还不是管理员(这里比较麻烦了,使用WMI的 wmimgmt.msc来添加对应目标机器的权限,这里我不提供脚本了,因为相当的繁琐,以后有机会和大家说说解决方案吧。二就是dcomcnfg.exe设置您的用户允许远程RPC调用的权限)
    WMIMGMT.MSC:
     
    配置WMI命名空间权限。
    DCOMCNFG.EXE:
     
    配置远程DCOM权限
    当然我们可以直接使用Invoke-Command和交互式Session来简化WMI的方式,我会在下一篇文章详细介绍

    我就是用这种方式来主动更新的组策略,当时比较着急可能还有更多方案,我在这里抛砖引玉,毕竟咱不是Pro系统管理员,嘿嘿。
     当时的情况。。。当时公司某些情况发生,导致服务器压力很大,需要立刻部署20台前端用来负载高负荷的请求,必须安装IIS,必须同步所有的程序代码,必须迅速建立站点。
    首先是代码同步,其实这种小工具是必须提前做好准备的,比如配置好rsync之类的。因为是突发事件我临时写了一个代码同步的工具,和大家介绍一下强大的robocopy。

    代码同步:
    Win2008 是自带这个command 的,如果是2003 需要安装Resouces Tools 才能使用robocopy
    我使用了比较方便的Invoke-Command 。

    复制代码
    function CodeSync
    {
     param([String][parameter(Mandatory=$True)]$source,[String][parameter(Mandatory=$True)]$target,[bool]$mirror = $False,[int]$retryNum = 5,[int]$retrySec = 10)
     if($mirror)
     {
     Invoke-Command -ScriptBlock { robocopy.exe $source $target /E /ZB /COPYALL /MIR /R:$retryNum /W:$retrySec}
     }
     else
     {
     Invoke-Command -ScriptBlock { robocopy.exe $source $target /E /ZB /COPYALL /R:$retryNum /W:$retrySec}
     }
    }
    $line = [int]1
    Get-Content -Path "E:DesktopTarget.txt"|%{
     $arr = $_.Split(',')
     if($arr.Length -ne 3)
     {
     Write-Host "Line `"$_`" parameter error at line $line`nParameter Format:Source Target Mirror" -ForegroundColor Red
     }
     else
     {
     CodeSync $arr[0] $arr[1] ($arr[2] -eq "1")
     Write-Host "Task $line Sync Complete!" -ForegroundColor Green
     }
     $line++
    }
    Read-Host "Press any key exit..."
    复制代码

    这个简单的脚本提供了从某个配置文件读取共享目录来同步
    file://machine1//C$/Test/1,//MACHINE2/c$/Test/2,0
    参数1标识Source
    参数2标识 Destination
    参数3标识 是否完全覆盖

    就这样,我先把代码同步到了不同的20个前端。
    安装IIS:
    ServerManagerCMD.exe
    前面我们提供了RemoteCall的脚本,联想到直接使用RemoteCall “ServerManagerCMD.exe –install 角色”,机器名,因此我很顺利的安装了IIS。
    部署IIS:
    这里我走了一些弯路,我试图用 root/WebAdministration 来搞定这一切,但我发现关于IIS WMI的文档太少了,以至于我基本上没找到合适的调用方法。后来我尝试使用了appcmd,也大获成功了:
    思路大致使用RemoteCall 调用 本地的appcmd 来 部署IIS
    首先我调用
    "C:WindowsSystem32inetsrvappcmd.exe add site /name:`"test`" /bindings:http://*:80 /physicalpath:`"C: est `""
    添加了站点  test,而且绑定了 所有IP地址的80端口,路径是:C: est
    注意:在Powershell中的字符串出现了双引号,要使用 “`”(1左边的键)来转义。
    然后
    "C:WindowsSystem32inetsrvappcmd.exe start site `"f-sq`""
    我打开了站点,默认是关闭的。
    "C:WindowsSystem32inetsrvappcmd.exe delete site `"Default Web Site`""
    我删除了所有机器的默认站点
    "C:WindowsSystem32inetsrvappcmd.exe set config  /section:httplogging /dontlog:True"
    并且禁用了 本地的IIS 日志
    "C:WindowsSystem32inetsrvappcmd.exe add apppool /name:`"test`" /queueLength:50000 /processModel.userName:`"test est`" /processModel.password:`"%^&*(234`" /processModel.loadUserProfile:`"True`" /processModel.maxProcesses:5 
    /failure.loadBalancerCapabilities:`"TcpLevel`" /failure.rapidFailProtectionMaxCrashes:50 
    /processModel.identityType:`"SpecificUser`""
    创建了新的应用程序池 制定了工作线程,队列长度,自定义域帐号等。
    "C:WindowsSystem32inetsrvappcmd.exe set site /site.name:`"f-sq`" /applicationDefaults.applicationPool:`"test`""
    最后将站点绑定到test 应用程序池

    •整个过程只话了一个多小时,试想如果以后再来100台前端机器,那么可能只要1分钟时间就能搞定这个任务了。所以说积累也很重要!
     本文已实际的经历描述,希望能帮助到大家,在一篇文章中我会说到PSSession 的实战经验。

      上文Powershell 远程管理 (一)和大家大概的讲述了一个我的远程管理的过程,今天主要和大家说说ps 在交互式会话的管理方式也就是Pssession,Pssession是Windows Powershell会话的意思,一个会话,可以共享数据,提供交互式的对话,我们可以为某些命令例如Invoke-Command 制定会话来远程作业。当然我们还能利用Enter-Pssession来直接和远程计算机连接,直接建立一个持续安全的远程对话,来执行我们的所有命令。
     我们分三个部分来讲述Powershell Session,首先是域环境下的远程连接,WAN/LAN的远程连接(Trusthost方式),WAN/LAN的远程连接(SSL加密方式),可以先大致的理解为,当我们操作的机器和远程机器处于同一个AD下,那么是可以直接向Powershell使用Kerbors(基于FQDN),NTLM基于ip地址来进行身份标识的传输,一般是通过当前登录到机器的用户凭据。当我们处于另外的网络环境,或者工作机没有入域能够提供域标识的情况下,可以使用信任主机和SSL加密方式来向远程机器提供会话标识的方式。
     Powershell基于WinRM和WinRS来建立远程会话的,以及和传统的WMI DCOM的对比。WMI 依赖 DCOM 在远程计算机上执行管理任务,而防火墙往往会阻止所有传入的 DCOM 通信,这使 WMI 很难(如果并非完全不可能)通过 Internet 以编程方式管理计算机 Windows 远程管理(WinRM)是“WS 管理协议的 Microsoft 实施,该协议是基于标准 SOAP、不受防火墙影响的协议,允许不同供应商的硬件和操作系统相互操作。也就是我们在Client使用本地的WinRS(Windows Remote Shell) 向远程的WinRM(Windows Remote Service)基于SOAP 通过http或者https进行连接获取管理数据(底层依旧使用WMI,但是已经被包装了SOAP来通讯了)。必须注意的是:客户端和服务端都必须安装启用WinRM
    Solution One:
    Client:非域环境 Domain:vm.terry-corp.com(也可以是工作组,我这里用的是域)
    客户端打开Powershell 执行 cd wsman::localhostclient 输入ls
    PS Microsoft.WSMan.ManagementWSMan::localhostClient> ls
    (默认TrustedHosts 为空,当我们在非信任环境下(不能使用Kerbors认证) 的时候,必须使用TrustedHosts或者SSL方式)

    ##Set-Item TrustedHosts “你的入域机器的IP或者工作组机器”
    我这里执行的是:
    Set-Item TrustedHosts “192.168.133.67”
    查看 ls

    Name                      Value
    ----                      -----
    NetworkDelayms            5000
    URLPrefix                 wsman
    AllowUnencrypted          false
    Auth
    DefaultPorts
    TrustedHosts              192.168.133.67
    修改成功!

    服务端
    首先启用远程访问Enable-PSRemoting –Force
    操作会打开WinRM服务,添加WinRM 的防火墙例外,可以在WF.MSC自己再次确认Windows Remote Management的防火墙是否对你的Client有了例外

    客户端打开Powershell

    Enter-PSSession -ComputerName 192.168.133.67 –Credential vm.terry-corp.comAdministrator
    (可以设置自己的凭据,我这里用的域帐号)
    成功的话会显示:
    [192.168.133.67]: PS C:UsersAdministratorDocuments>
    记得退出Exit-Pssession
    Solution Two:
    WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。UseSSL 是一种额外的保护措施,它通过 HTTPS 连接而不是 HTTP 连接来发送数据。
    因此使用SSL方式是一种更加安全可靠的远程管理方式.
    SSL的工作原理也是确认客户端和服务端的身份之后再进行握手的,还担保了数据的来源,不被纂改和监听.
    首先要生成SSL证书
    (题外话:我本来打算使用AD 证书服务来给自己颁发一个机器名的证书,但是我入域机器的机器名是带上了dns后缀名的, 而我的客户端连接使用的是IP地址,那么会被认为证书的CN名和机器名不一致.AD 机器很多时候都是内网环境,所以想直接通过AD证书,那么你的DNS必须在客户端能够被解析.所以我这里使用的是自签名的证书)
    可以使用sslself.exe或者makecert.exe
    下载SelfSSL http://www.microsoft.com/downloads/...laylang=en
    makecert.exe在.NET Framework 工具中有
    服务端生成证书
    SELFSSL:
    C:Program Files (x86)IIS ResourcesSelfSSL>selfssl.exe /N:CN=192.168.133.67 /V:3600 /T /Q
    (ip就是服务端的ip)
    MAKECERT:
    MakeCert.exe -pe -n "CN=192.168.133.67" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange –r C:1.CER
    (在C盘根目录下的1.cer)

    打开inetmgr 移除默认站点对SSL 443的binding
    打开MMC (文件->添加删除 管理单元)找到 证书 选择 本地计算机添加 找到根信任区域
    导出刚才的证书
    Copy 到客户端,导入证书到根信任区域
    再次返回到服务端
    打开MMC 找到刚才的证书,复制证书 详细信息里面的 指纹
    eb 10 24 5d 89 11 4a 57 4c 0c ba ac 79 b7 3b 3a 05 aa 1b d7
    执行CMD
    C:UsersAdministrator> winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="192.168.133.67";CertificateThumbprint="‎ eb 10 24 5d 89 11 4a 57 4c 0c ba ac 79 b7 3b 3a 05 aa 1b d7"}
    添加对https 的监听,以及添加证书指纹.
    成功显示:
    ResourceCreated
        Address = http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
        ReferenceParameters
            ResourceURI = http://schemas.microsoft.com/wbem/wsman/1/config/listener
            SelectorSet
                Selector: Address = *, Transport = HTTPS
    执行Winrm enumerate winrm/config/listener 也可以确认添加是否成功显示:

    Listener
        Address = *
        Transport = HTTPS
        Port = 5986
        Hostname = 192.168.133.67
        Enabled = true
        URLPrefix = wsman
        CertificateThumbprint = eb 10 24 5d 89 11 4a 57 4c 0c ba ac 79 b7 3b 3a 05 aa 1b d7
        ListeningOn = 127.0.0.1, 192.168.28.128, 192.168.133.67, ::1, fe80::5efe:192.168.28.128%13, fe80::5efe:192.168.133.6
    7%12, fe80::856d:7551:c80d:b615%11, fe80::c576:2df6:6d25:6da6%10
    说明已经正确添加了SSL证书.再次返回到客户端进行连接:
    Powershell
    Enter-PSSession -ComputerName 192.168.133.67 –Credential vm.terry-corp.comAdministrator –UseSSL
    成功显示:
    [192.168.133.67]: PS C:UsersAdministratorDocuments>

    至此Windows Powershell 的两种方式已经和大家说清楚了,大家不明白的地方可以直接cnblogs联系我.下一篇文章详细讲述如何使用URI 连接远程的WinRM服务进行管理,这主要涉及到IIS 和SSL的配置

  • 相关阅读:
    Vue1.0学习总结(4)———Vue1.0自定义组件、Vue1.0组件之间的通信、slot的使用
    Vue1.0学习总结(3)———vue1.0的生命周期、vue计算属性computed的使用、vue实例(vm)上方法总结、vue结合动画使用
    Vue1.0学习总结(2)———交互(vue-resoucre的使用)
    Vue1.0学习总结(1)———指令、事件、绑定属性、模板、过滤器
    你需要的是坚定自己
    ES6新增—ES6自带的模块化、ES6新增Promise、ES6新增Generator
    ES6新增—ES6中的对象、面向对象、面向对象的继承、面向对象和继承的应用
    ES6新增—新增循环、箭头函数
    ES6新增—let、const、字符串连接、解构赋值、复制数组
    lucene&solr学习——索引维护
  • 原文地址:https://www.cnblogs.com/endv/p/6540581.html
Copyright © 2020-2023  润新知