当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell 自动重新启动崩溃或关闭的应用程序/进程?

作者:精品下载站 日期:2024-12-14 23:04:49 浏览:14 分类:玩电脑

如何使用 PowerShell 自动重新启动崩溃或关闭的应用程序/进程?


让我们学习如何使用 PowerShell 来检查特定应用程序或进程是否正在运行;如何在崩溃、用户意外关闭或开始消耗大量内存(内存泄漏)的情况下自动重新启动它。

前面我们展示了如何使用 PowerShell 管理 Windows 进程。要确保 notepad.exe 进程是否正在运行并重新启动它,您可以使用以下脚本:


If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:\Windows\notepad.exe
}

如果进程没有响应(挂起)或者开始使用过多内存(本例中超过 1000 MB),您可以自动重新启动该进程:

$proc = Get-Process -Name notepad| Sort-Object -Property ProcessName -Unique
If (($proc.Responding -eq $false) -or ($proc.WorkingSet -GT 1000000*1024)} {
$proc.Kill()
Start-Sleep -s 10
Invoke-Item C:\Windows\notepad.exe
}

使用 PowerShell

for

循环,您可以创建一个无限循环来启动一个进程,每 60 秒检查一次是否正在运行,并在需要时重新启动它:

for(;;){
try{
If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:\Windows\notepad.exe}
$proc = Get-Process -Name notepad | Sort-Object -Property ProcessName -Unique -ErrorAction SilentlyContinue
If (!$proc -or ($proc.Responding -eq $false) -or ($proc.WorkingSet -GT 200000*1024)) {
$proc.Kill()
Start-Sleep -s 10
Invoke-Item C:\Windows\notepad.exe}
}
catch    {    }
Start-sleep -s 60
}

[玩转系统] 如何使用 PowerShell 自动重新启动崩溃或关闭的应用程序/进程?

如果你想检查远程计算机上进程的状态,可以使用以下命令:

$proc = Get-Process -ComputerName WKS-NYC211 -Name notepad | Sort-Object -Property ProcessName -Unique -ErrorAction SilentlyContinue

要远程启动进程,您可以使用 Invoke-Command cmdlet:

Invoke-Command -ComputerName WKS-NYC211 -Credential $Cred -ScriptBlock {Start-Process C:\Windows\notepad.exe -wait -verb runas;}

您可以在用户登录时将此 PowerShell 脚本作为 GPO 登录脚本运行。

然后将 PowerShell 代码保存到扩展名为 *.PS1 的文件中。您可以使用数字签名对脚本进行签名、更改 PowerShell 执行策略设置或使用

-ExecutionPolicy Bypass

选项。

  • 文件名:

    %windir%\System32\WindowsPowerShell\v1.0\powershell.exe
  • 运行选项:

    -windowstyle hidden -ExecutionPolicy Bypass -Noprofile -file %~dp0CheckProcess.ps1

您还可以使用任务计划程序按计划运行 PS1 脚本。使用相同的运行选项。您还可以指定要运行该进程的用户帐户。

$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-windowstyle hidden -ExecutionPolicy Bypass -file %windir%\CheckProcess.ps1"
$Trigger= New-ScheduledTaskTrigger -AtLogon
$Principal=New-ScheduledTaskPrincipal -UserId "jsmith" -LogonType Interactive
$Task=New-ScheduledTask -Action $Action -Trigger $Trigger -Principal $Principal
Register-ScheduledTask -TaskName "Check Notepad Process" -InputObject $Task

或者您可以将此 PowerShell 脚本作为 Windows 服务运行。

如果正在运行的应用程序不需要与用户交互,最好将其作为服务运行。稍后,您将能够通过标准来管理它

services.msc

控制台或使用 PowerShell。 Windows 有一个内置的重新启动服务的功能,或者您可以按如下方式重新启动挂起的服务。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯