在我们的环境中,我经常需要重新启动计算机,然后通过Invoke-Command
向它发送命令。为此,我显然需要在目标机器上启用PSRemoting。
默认情况下,它在我们所有的计算机上都启用,但重启后需要一段时间才能启动。
我正在使用Invoke-WmiMethod
强制启用它,只要电脑ping而不是等待。
这样做效果很好,但有时需要30-40秒才能完成。如果我让它自己启动,它仍然比2-5分钟更快。
我正在使用的命令是:
Invoke-WmiMethod -ComputerName $poste -Path Win32_Process -Name create -ArgumentList "powershell.exe -command Enable-PSRemoting -SkipNetworkProfileCheck -Force"
我的问题是:
tldr;
在运行Enable-PSRemoting
时,你所做的就是启动WinRM
服务,所有其他命令都会被跳过,因为你已经配置了它。
WinRM
服务设置为Automatic Delayed Start
- 使其开始更快将此更改为Automatic
。
你所指的'延迟'是Windows启动WinRM
服务的延迟。
启动时启动的服务有两个选项:
Automatic
将在Windows自身加载后尽快启动服务Automatic Delayed Start
将在短暂延迟后开始服务这两种类型的原因是资源争用 - 让每个服务同时启动将使用大量资源,最终用户会注意到这是一个减速。
有效管理资源对Windows必不可少的服务将设置为Automatic
并同时启动。这会消耗大量系统资源,但用户别无选择,因为Windows通常需要这些服务才能正常工作。
但对于不重要的服务,Delayed Start
是更好的选择。当所有Automatic
服务开始时,这些开始“在启动后不久”。这些通常是次要功能的服务 - 例如更新程序服务。
WinRM
服务设置为Automatic Delayed Start
- 使其开始更快将此更改为Automatic
。您将在此时获得性能影响,以便在进行大规模更改之前对其进行测试。
IMO - 不要改变服务启动,使用代码来处理这个延迟......
例如,带有Restart-Computer
param的Wait
将重新启动远程计算机并等待连接,然后继续:
Restart-Computer -ComputerName "Server01" -Wait -For PowerShell -Timeout 300 -Delay 2