使用与之前相同的名称重新注册已配置的 PowerShell 会话时,可能(通常)需要重新启动 WinRM 服务。
我的问题是这需要在我的环境中远程完成。 因此,如果不在本地运行,下面的这一系列命令将会失败...
Invoke-Command 'RemoteServer' {
Unregister-PsSessionConfiguration -Name 'MySession' -Force
Restart-Service WinRM -Force # This will of course kill the current WinRM connection
Register-PsSessionConfiguration -Name 'MySession'
}
有没有一种安全的方法可以稍后使用相同的名称来执行
Unregister-PsSessionConfiguration
,而不需要重新启动 WinRM
服务?
当然,解决方法是将其作为
Scheduled Task
运行,以防止会话被终止。
请注意,您应始终使用选项
-SecurityDescriptorSddl
设置注册会话,以防止任何管理员访问它。
好吧,
Scheduled Tasks
就是要走的路......您将无法直接运行此示例。
$Online = $null
while (!$Online) {# Make sure remote connection is possible
try {$Online = Invoke-Command 'RemoteServer' {$true} -ErrorAction Stop}
catch {$Online = $false}
}
try {
Invoke-Command 'RemoteServer' {# Kill WinRM, also killing this session
Unregister-PsSessionConfiguration -Name 'MySession' -Force
$RestartWinRM = {# Code for restarting WinRM using Scheduled Task}
Register-ScheduledTask `
-TaskPath '.' -TaskName 'Restart WinRM' `
-Action $RestartWinRM
Start-ScheduledTask -TaskPath '.' -TaskName 'Restart WinRM'
}
catch {# The error when this session terminates
}
$Online = $null
while (!$Online) {# Make sure remote connection is possible again
try {$Online = Invoke-Command 'RemoteServer' {$true} -ErrorAction Stop}
catch {$Online = $false}
}
Invoke-Command 'RemoteServer' {# registering the session configuration again
Register-PsSessionConfiguration -Name 'MySession'
}