gpt4 book ai didi

powershell - Windows 服务和 Stop-Process cmdlet 的有趣问题

转载 作者:行者123 更新时间:2023-12-02 23:05:19 24 4
gpt4 key购买 nike

我们这里有一些自制的 Windows 服务。其中之一是有问题的,因为它不会总是在被询问时停止。它有时会卡在“停止”状态。

我们使用 powershell 检索其 PID 并使用 Stop-Process cmdlet 终止相关进程,但这也不起作用。

相反,我们收到一条关于名为 System.ServiceProcess.ServiceController.Name 的服务的消息,这显然不是我们的服务,但它引用的 PID 是。

以下是我们为停止服务所做的工作。首先,我们使用 Get-Service cmdlet:

$ServiceNamePID = Get-Service -ComputerName $Computer | where { ($_.Status -eq 'StopPending' -or $_.Status -eq 'Stopping') -and $_.Name -eq $ServiceName}

然后,使用该 ServiceNamePID,我们获取 PID 并在 Stop-Process cmdlet 中使用它

$ServicePID = (get-wmiobject win32_Service -ComputerName $Computer | Where { $_.Name -eq $ServiceNamePID.Name }).ProcessID
Stop-Process $ServicePID -force

那是 Stop-Process cmdlet 提示无法找到进程标识符为 XYZ 的进程 的时候,而实际上 PID XYZ 服务的正确进程 ID,根据任务管理器。以前有人遇到过这样的问题吗?

最佳答案

为了停止远程机器上的进程,使用远程处理,例如

 Invoke-Command -cn $compName {param($pid) Stop-Process -Id $pid -force } -Arg $ServicePID

这需要在远程 PC 上启用远程处理,并且本地帐户在远程 PC 上具有管理员价格。

当然,一旦您使用了远程处理,您就可以使用远程处理来执行脚本,例如:

Invoke-Command -cn $compName {
$ServiceName = '...'
$ServiceNamePID = Get-Service | Where {($_.Status -eq 'StopPending' -or $_.Status -eq 'Stopping') -and $_.Name -eq $ServiceName}
$ServicePID = (Get-WmiObject Win32_Service | Where {$_.Name -eq $ServiceNamePID.Name}).ProcessID
Stop-Process $ServicePID -Force
}

关于powershell - Windows 服务和 Stop-Process cmdlet 的有趣问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12698377/

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