我正在研究是否有可能主持一个始终运行的Powershell远程处理流程。
默认情况下,PSRemoting将以经过身份验证的用户身份启动进程。 但是,使用自定义PS会话配置,可以设置"作为帐户运行"这将确保远程进程(在服务器上,可以这么说)始终作为一个已知的"用户,无论连接客户端的标识如何。
我研究这个问题的原因是,我注意到Ansible对Windows服务器的运行速度相当慢,我怀疑这是因为服务器上的远程处理过程随着Ansible发送的每个命令而被调高。我想知道是否可以拥有一个始终正在运行的流程,即“准备就绪”#34;为了加快处决速度。
就我而言:
$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 ++
}
即使我使用不同的凭证连接到会话,实际流程也会以" service"凭证,这部分是好的。
然而,在每次执行时,它似乎仍在上下流动。
只是为了澄清:这里的客户不是常规的Powershell,它的客户端将通过http与wsman服务直接交互。因此,虽然我感谢所有回复,但基于客户端Powershell代码(例如new-pssession,invoke-command等)的建议不会有所帮助: - |
任何指针都会在这里受到赞赏,我试图到达远程处理过程简单生活的地方,无论会话执行与否。这可能吗?
答案 0 :(得分:0)
在外面创建会话并在循环中使用它。
$Session = New-PSSession -ComputerName $Server -ConfigurationName MyConfiguration
While(1){
Invoke-Command -Session $Session -Credential $remotecred -Authentication Basic -ScriptBlock {'my code'}
sleep 10
}