是否可以主持"始终运行" powershell远程处理?

时间:2018-03-24 13:21:37

标签: powershell powershell-remoting

我正在研究是否有可能主持一个始终运行的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等)的建议不会有所帮助: - |

任何指针都会在这里受到赞赏,我试图到达远程处理过程简单生活的地方,无论会话执行与否。这可能吗?

1 个答案:

答案 0 :(得分:0)

在外面创建会话并在循环中使用它。

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

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

}