gpt4 book ai didi

powershell - 为什么 Windows 远程管理服务坚持为 "delayed start"?

转载 作者:行者123 更新时间:2023-12-04 01:54:16 31 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

8年前关闭。




Improve this question




我遇到了 WinRM 服务的一些问题。它不断坚持成为“延迟启动(自动)”服务,而不仅仅是“自动”。

为什么?这导致我的虚拟机(在 Hyper-V 上)出现问题。我通过 PowerShell 以编程方式还原它们,然后需要通过 PowerShell 远程访问它们,但有时当我第一次将虚拟机联机时 WinRM 服务尚未启动(它们已“完全启动”,因为我可以登录它们)。

如果我将服务设置为自动,请运行 PowerShell 命令 winrm quickconfig表示该服务未设置为远程处理,并坚持将服务设置回延迟启动。

在尝试打开远程 PowerShell session 之前,如何确保 Windows RM 服务正在运行?

最佳答案

关于为什么在引导过程(延迟启动)之后可能会加载某些服务的基本推理是:

  • 改善boot performance服务器,并具有一些安全优势。
  • 某些服务依赖于其他服务来启动。在 Windows 远程管理服务的情况下,它依赖于以下服务
    一种。 HTTP 服务
    湾。远程过程调用 (RPC)(自动)
    一世。 DCOM 服务器进程启动器(自动)
    ii. RPC 端点映射器(自动)

  • How can I ensure that the Windows RM service is running before I attempt to open a remote PowerShell session?



    看看我为做你想做的事情而编写的以下选项和函数。

    一个 ) 您可以使用 Test-Connection 来检查计算机是否在线。
    Test-Connection -ComputerName $Computer -Count 1 -Quiet

    ) 我创建了函数 StartWinRMIfStopped这将使用 WMI 启动“WinRM”服务。

    中号 ) 第二个函数是 TryToCreateNewPSSession将尝试创建一个新的 PSSession或者应该给你异常对象
    param([string]$server)
    Get-PSSession | Remove-PSSession
    $newsession = $null
    function StartWinRMIfStopped
    {
    param([string]$ComputerName)
    Write-Host $ComputerName
    $WinRMService = Get-WmiObject -Namespace "root\cimv2" -class Win32_Service -Impersonation 3 -ComputerName $ComputerName | Where-Object {$_.Name -match "WinRM"}
    if($WinRMService.State -eq "Stopped" -or $WinRMService.State -eq "Paused"){
    "WinRM Service is" + $WinRMservice.State
    $WinRMService.StartService()
    }
    else{
    "WinRM Service is " + $WinRMservice.State
    }
    }
    function TryToCreateNewPSSession{
    param([string]$computerName)
    Try
    {
    $newsession = New-PSSession -Computer $computerName -ErrorAction Stop
    #Connect-PSSession -Session $newsession
    $newsession
    }
    Catch [System.Management.Automation.RuntimeException]{
    if($error.Exception.Gettype().Name -eq "PSRemotingTransportException"){
    Write-host "WinRM service is not started on the server"
    }
    Write-host "RuntimeException occured in creating new PSSession to the Server"
    }
    Catch [Exception]{
    Write-host "Generic Exception while creating PSSession"
    }
    }

    $error.Clear()
    If (Test-Connection -Computer $server -count 1 -Quiet) {
    #Connection to server successfull
    StartWinRMIfStopped $server
    Start-Sleep -s 4
    #Invoke Command on remote server using trytocreatenewpssession function.
    Invoke-Command -Session (TryToCreateNewPSSession $server) -ScriptBlock { write-host "hello world"}
    }

    您可以将整个脚本调用为
    PS C:\> .\ScriptName.ps1 remotecomputername

    关于powershell - 为什么 Windows 远程管理服务坚持为 "delayed start"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381235/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com