【问题标题】:Is it possible to host an "always running" powershell remoting process?是否可以托管“始终运行”的 powershell 远程处理进程?
【发布时间】:2018-03-24 13:21:36
【问题描述】:

我正在研究是否可以托管始终运行的 Powershell 远程处理进程。

默认情况下,PSRemoting 将作为经过身份验证的用户启动一个进程。 但是,使用自定义 PS 会话配置,可以设置“以帐户身份运行”,以确保远程进程(可以说是在服务器上)始终以“已知”用户身份运行,而不管连接的身份如何客户。

我研究这个的原因是,我注意到 Ansible 在 Windows 服务器上运行非常缓慢,我怀疑这是由于服务器上的远程处理进程随着 Ansible 发送的每个命令而启动。我想看看是否有可能让一个始终运行的进程“准备好”以加快执行速度。

据我所知:

$ansiblecred = get-credential
New-PSSessionConfigurationFile `
    -path "C:\sessionconfig.pssc" -SessionType Default `
    -RequiredGroups @{ And = 'Administrators' }
Unregister-PSSessionConfiguration -Name ansible -force
Register-PSSessionConfiguration `
    -Path "C:\sessionconfig.pssc" -Name ansible `
    -RunAsCredential $ansiblecred -AccessMode Remote `
    -UseSharedProcess -ThreadOptions ReuseThread
restart-service winrm


$remotecred = Get-Credential

$i = 0
while ($i -lt 10)
{
    #This is slow because the remoting session is setup/teard down every time
    Invoke-Command -ComputerName "localhost" -Credential $remotecred -Authentication Basic -ScriptBlock {$env:computername} -ConfigurationName ansible
    $i ++
}

即使我使用不同的凭据连接到会话,实际进程作为“服务”凭据运行,所以这部分很好。

但是,它似乎仍然在每次执行时向上和向下旋转。

只是为了澄清:这里的客户端不是普通的Powershell,它是通过http直接与wsman服务交互的客户端。因此,虽然我感谢所有回复,但基于客户端 Powershell 代码(例如 new-pssession、invoke-command 等)的建议无济于事:-|

任何指针都会在这里受到赞赏,我试图到达一个远程处理过程简单存在的地方,而不管会话是否执行。这可能吗?

【问题讨论】:

  • 尝试使用 powershell.exe -Server 作为服务帐户启动 PowerShell 进程。如果该进程按您的预期重用,您可以开发一个小型服务来启动服务器并在需要时重新启动它。

标签: powershell powershell-remoting


【解决方案1】:

在外部创建一个会话并在循环中使用它。

$Session = New-PSSession -ComputerName $Server -ConfigurationName MyConfiguration

While(1){
Invoke-Command -Session $Session -Credential $remotecred -Authentication Basic -ScriptBlock {'my code'}
sleep 10

}

【讨论】:

  • 客户端不是powershell
  • 您是否尝试过上述解决方案?,如果客户端不是 PowerShell。您的 Invoke-Command 将无法使用。
猜你喜欢
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多