如何使用 PowerShell 远程重置 WinRM 服务?

问题描述 投票:0回答:1

使用与之前相同的名称重新注册已配置的 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
设置注册会话,以防止任何管理员访问它。

powershell powershell-remoting winrm
1个回答
0
投票

好吧,

Scheduled Tasks
就是要走的路......
为了使代码更具可读性,我只提供了一些参数来使用 PowerShell 设置计划任务。

您将无法直接运行此示例。

$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'
}
© www.soinside.com 2019 - 2024. All rights reserved.