【问题标题】:How To Execute PowerShell via WinRM如何通过 WinRM 执行 PowerShell
【发布时间】:2019-05-02 06:19:41
【问题描述】:

环境:

Windows Server 2016 Standard Evaluation  
version 1607(OSbuild 14393.2248)  

my_powershell.ps1 在下面。

echo $args

在本地我可以执行上面的脚本。

PS C:\Users\Administrator> .\echo_args.ps1 "aaaa"
aaaa

我可以通过 winrm 执行命令或 exe 文件。 例如)

PS C:\Users\Administrator> winrs -r:localhost -u:Administrator -p:MyPassword .\my.exe

但是当我通过 WinRM(下)执行 my_powershell.ps1 时,my_powershell.ps1 一直在等待,没有做任何事情。

PS C:\Users\Administrator> winrs -r:localhost -u:Administrator -p:MyPassword .\echo_args.ps1

我的 WinRM 配置如下。

PS C:\Users\Administrator> winrm get winrm/config
    Config
    MaxEnvelopeSizekb = 500
    MaxTimeoutms = 60000
    MaxBatchItems = 32000
    MaxProviderRequests = 4294967295
    Client
    NetworkDelayms = 5000
    URLPrefix = wsman
    AllowUnencrypted = false
    Auth
    Basic = true
    Digest = true
    Kerberos = true
    Negotiate = true
    Certificate = true
    CredSSP = false
    DefaultPorts
    HTTP = 5985
    HTTPS = 5986
    TrustedHosts = *
    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
    Winrs
        AllowRemoteShellAccess = true
        IdleTimeout = 7200000
        MaxConcurrentUsers = 2147483647
        MaxShellRunTime = 2147483647
        MaxProcessesPerShell = 2147483647
        MaxMemoryPerShellMB = 2048
        MaxShellsPerUser = 2147483647

我应该在哪里更改?

【问题讨论】:

  • 你为什么使用 WinRS.exe?据我回忆,这会启动一个远程 CMD shell。通常的方法是使用Invoke-Command ...
  • 我想这样做,在远程 linux 服务器上用 pywinrm 连接我的 windows 程序。我试图执行我的 .exe 但是,当我使用日语时出现字符代码问题,所以现在我试图包装 PowerShell 并转换 charcode。
  • 感谢您的“为什么”。我很欣赏这些信息... [grin]

标签: powershell windows-server-2016 winrm


【解决方案1】:

我对 winrm 的命令是错误的。通过 WinRm 执行 PowerShell 时,我应该指定使用 PowerShell.exe。

所以正确的命令在下面。

PS C:\Users\Administrator> winrs -r:localhost -u:Administrator -p:MyPassword powershell .\echo_args.ps1 "aaaa"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 2020-01-07
    • 2014-01-16
    • 2021-12-02
    • 2018-11-09
    • 2017-09-09
    • 2019-11-14
    • 2023-03-26
    相关资源
    最近更新 更多