我有一个实用程序,它使用提升的特权运行一个进程(有效地允许我们运行需要脚本管理员权限的东西)。
我需要检查这个实用程序是否正常工作,我这样做的方法是打开一个带有admin权限的命令提示符,检测它是否已打开(如果该实用程序不工作,它将无法打开命令提示符)然后再次关闭命令提示符。
我可以做得很好,但我想通过识别最近打开的进程来处理用户已经打开命令提示符的情况。
我目前的代码是:
C:\myutility.exe cmd
$proc = Get-CimInstance Win32_Process -Filter "name='cmd.exe'"
$isnull = ($proc -eq $null)
if (!$isnull) { #Process did not start
$latest = $proc[$proc.Length-1]
$owner = Invoke-CimMethod -InputObject $latest -MethodName GetOwner
foreach ($p in $proc) {
$command = "powershell stop-process -id " + $p.Handle
c:\myutility.exe powershell stop-process -force -id $p.Handle
}
if ($owner.User -eq "Administrator") {
write-output $true
} else { # User is not Admin userx`
write-output $false
}
} else { #Failed to start administrator cmd prompt
write-host $false
}
我想补充一下这个过程是否是最新的过程。我想知道使用流程句柄是否足够,但我不是100%最高句柄ID是最新流程。
有更可靠的方法吗?