请菜鸟帮忙。我正在尝试编写一个脚本来检查进程是否正在运行,如果没有,则启动它。如果进程正在运行,它应该什么都不做。到目前为止,我已经提出了以下内容,但它正在启动该进程的一个新实例,无论它是否已经在运行。任何帮助表示赞赏。

$Prog = "C:\utilities\prog.exe"
$Running = Get-Process prog -ErrorAction SilentlyContinue
$Start = ([wmiclass]"win32_process").Create($Prog)
if($Running -eq $null)
{$Start}
else
{}

最佳答案

$path = "C:\utilities\prog.exe"        
$list = get-process | where-object {$_.Path -eq $path }     
if ($list -eq $null) { start-process -filepath $path }

或者

$path = "C:\utilities\prog.exe"
get-process | where-object {$_.Path -eq $path } | measure-object | where-object { $_.Count -eq 0} | foreach-object {start-process -filepath $path }

这将为您节省 if 语句和一个变量声明。它也可以是一行命令:
获取进程
选择你感兴趣的路径
使用 measure 对象获取有关您拥有的列表的统计信息
仅当 stats 的计数值为 0
时才继续管道
启动进程

文档更新时间: 2023-08-30 02:07   作者:月影鹏鹏
IT运维支持-AIWALY-月影工作室