【发布时间】: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