powershell - New-PSSession 在本地不起作用

标签 powershell winrm

我正在尝试使用 New-PSSession 连接到本地主机。

我有

  • 配置 WinRM 使用
    winrm quickconfig
    
  • 启用 PS 远程处理
    Enable-PSRemoting
    
  • 添加可信主机
    Set-Item WSMan:\localhost\Client\TrustedHosts * -Force
    
  • 防火墙的 8173 端口有入站规则。
  • winrm 的输出:
    PS C:\> winrm get winrm/config/listener?Address=*+Transport=HTTP
    Listener
        Address = *
        Transport = HTTP
        Port = 8173
        Hostname
        Enabled = true
        URLPrefix = wsman
        CertificateThumbprint
        Listening on = 127.0.0.1
    

    我正在尝试运行以下命令:
    New-PSSession -ConnectionUri http://localhost:8173/WSMAN
    

    但我收到此错误:
    [localhost] Processing data from remote server failed with the following error message:
    Error with error code 14 occurred while calling method WSManPluginReceiveResult. For
    more information, see the about_Remote_Troubleshooting Help topic.
        + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportException
        + FullyQualifiedErrorId : PSSessionOpenFailed
    

    编辑:

    我看到的唯一额外的事情是网络连接到公共(public)
    $listenerport = "8173"
    winrmwinrm 创建 winrm/config/Listener?Address=*+Transport=HTTP "@ {Port = "$listenerport " }"
    C:\>winrm get winrm/config
    Config
        MaxEnvelopeSizekb = 1039440
        MaxTimeoutms = 60000
        MaxBatchItems = 32000
        MaxProviderRequests = 4294967295
        Client
            NetworkDelayms = 5000
            URLPrefix = wsman
            AllowUnencrypted = true
            Auth
                Basic = true
                Digest = true
                Kerberos = true
                Negotiate = true
                Certificate = true
                CredSSP = false
            DefaultPorts
                HTTP = 8173
                HTTPS = 5986
            TrustedHosts = *
        Service
            RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;S-1-5-21-2458768215-3945602940-3262220185-1045)S:P(AU;FA;GA;;;WD)(AU;SA;GWGX;;;WD)
            MaxConcurrentOperations = 4294967295
            MaxConcurrentOperationsPerUser = 500
            EnumerationTimeoutms = 60000
            MaxConnections = 25
            MaxPacketRetrievalTimeSeconds = 120
            AllowUnencrypted = true
            Auth
                Basic = true
                Kerberos = false
                Negotiate = true
                Certificate = true
                CredSSP = false
                CbtHardeningLevel = Relaxed
            DefaultPorts
                HTTP = 5985
                HTTPS = 5986
            IPv4Filter = *
            IPv6Filter = *
            EnableCompatibilityHttpListener = false
            EnableCompatibilityHttpsListener = false
            CertificateThumbprint
        Winrs
            AllowRemoteShellAccess = true
            IdleTimeout = 180000
            MaxConcurrentUsers = 5
            MaxShellRunTime = 2147483647
            MaxProcessesPerShell = 15
            MaxMemoryPerShellMB = 150
            MaxShellsPerUser = 5
    
    
    PS C:\> Get-PSSessionConfiguration microsoft.powershell | fl *
    
    
    xmlns            : http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
    Name             : Microsoft.PowerShell
    Filename         : %windir%\system32\pwrshplugin.dll
    SDKVersion       : 1
    XmlRenderingType : text
    lang             : en-US
    PSVersion        : 2.0
    ResourceUri      : http://schemas.microsoft.com/powershell/Microsoft.PowerShell
    SupportsOptions  : true
    ExactMatch       : true
    Capability       : {Shell}
    Permission       :
    
    Administrators group have permission as I see in the window popup (Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI)
    

    编辑 2:Permissions

    最佳答案

    通过排除过程,我们可以排除防火墙问题,因为您只连接到环回地址 (127.0.0.1)。我们也可以排除看起来不错的 WinRM 配置。

    该错误消息表明与 http://localhost:8173/WSMAN 的 TCP 连接实际上是成功的,但是在建立 PS session 时发生了故障。

    这指向 Microsoft.PowerShell session 配置。

    看起来您在查看时看到的权限存在差异

    Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI 
    

    以及实际分配给 Microsoft.PowerShell 的权限。
    的输出
    Get-PSSessionConfiguration microsoft.powershell | fl *
    

    应该列出“SecurityDescriptorSddl”和“Permission”属性。像这样:
    Name                   : microsoft.powershell
    Filename               : %windir%\system32\pwrshplugin.dll
    SDKVersion             : 1
    XmlRenderingType       : text
    lang                   : en-US
    PSVersion              : 2.0
    ResourceUri            : http://schemas.microsoft.com/powershell/microsoft.powershell
    SupportsOptions        : true
    Capability             : {Shell}
    xmlns                  : http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
    Uri                    : http://schemas.microsoft.com/powershell/microsoft.powershell
    ExactMatch             : true
    SecurityDescriptorSddl : O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
    Permission             : BUILTIN\Administrators AccessAllowed
    

    尝试删除并重新分配这些权限。

    编辑:

    根据您提供的信息,这不是主要问题。我还注意到您在 WinRM 服务设置中有一个非标准的“RootSDDL”。
    RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;S-1-5-21-2458768215-3945602940-3262220185-1045)(AU;SA;GWGX;;;WD)
    

    默认情况下,这应该是
    RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GWGX;;;WD)
    

    我已经在测试虚拟机上重新创建了这个,远程处理仍然有效。所以我又看了一下你的 WinRM 配置......

    解决方案

    你的问题是这条线
    MaxEnvelopeSizekb = 1039440
    

    通过设置此值,我可以复制您遇到的问题。我建议将其设置为更合理的值或默认值。
    winrm set winrm/config '@{MaxEnvelopeSizekb="150"}'
    

    会解决你的问题。

    关于powershell - New-PSSession 在本地不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30439760/

    相关文章:

    powershell - 从使用 runas 打开的命令提示符或作为计划任务启动脚本时,Start-Process -wait 不起作用

    c# - CAKE 任务中的错误未显示在 TeamCity 概述中

    powershell - 通过 API 在 Azure 上部署 Windows VM 时配置 WinRM 时出现问题

    powershell - 检查远程计算机中的 WinRM 服务

    windows - 在 Windows 防火墙中允许 WinRM

    powershell - 使用.Replace()处理文件中每行的第一个字符

    Azure powershell - 从资源属性中选择子属性

    powershell - 从字符串中提取文本到文档末尾

    python - 如何使用 winrm+Python 将文件上传到 Windows 机器

    powershell - WinRM 无法处理请求 - 仅在特定域上失败