用于检查应用程序是不是以提升的权限运行的 PowerShell 命令

Posted

技术标签:

【中文标题】用于检查应用程序是不是以提升的权限运行的 PowerShell 命令【英文标题】:PowerShell command to check whether an application is running with elevated privileges用于检查应用程序是否以提升的权限运行的 PowerShell 命令 【发布时间】:2022-01-15 01:36:10 【问题描述】:

我需要一个 PowerShell 命令或脚本来检查我的控制台应用程序是否以管理员身份运行。如果它没有以管理员身份运行,我将停止它并使用脚本再次运行。

如果 PowerShell 命令不可用,还有其他方法可以检查吗?

提前致谢。

【问题讨论】:

这能回答你的问题吗? Check if logged on user is an administrator when non-elevated 另见Running a command as Administrator using PowerShell? 不完全是。我将仅以管理员身份运行脚本。所以不需要检查登录用户。我只是想检查一下应用程序是否以提升的方式运行 scriptimus.wordpress.com/2015/07/19/powershell-test-isadmin 有用吗? @jeff Zeitlin 我想检查特定的应用程序。 【参考方案1】:

你可以用我的Test-ProcessElevated cmdlet(太长了,我已经发到GitHub gist了)。

例如:

# from pipeline:
Get-Process notepad | Test-ProcessElevated

# from parameter:
Test-ProcessElevated $(Get-Process notepad)

# it returns boolean
if (ps notepad | Test-ProcessElevated)

    Write-Host 'notepad is running elevated.'


# dwm.exe is running in a different session:
ps dwm | Test-ProcessElevated

我已经在 Windows PowerShell 5 和 PowerShell 7 中对其进行了测试。

【讨论】:

嘿,它正在工作并给出预期的结果。谢谢? 我遇到了一个异常。你能帮帮我吗...使用“1”参数调用“IsProcessElevated”的异常:“OperProcessToken failed”在第 161 行 char:16 返回 [SecurityUtils.Win32]::IsProcessElevated($Process) : NotSpecified : (:) , MethodInvocationException + FullyQualifiedErrorId: Win32Exception + Category Info 记事本没有运行提升。 我刚刚注意到,当我的应用程序以提升的方式运行时,它会抛出此异常。并且在 if 条件下,它仍然给出进程没有以提升的方式运行。 事实证明,即使您是管理员,打开在不同会话中运行的进程也不是一项简单的任务。需要额外的权限。我会调查一下。 @ShivaniG 我已经解决了这个问题。查看更新的脚本:gist.github.com/0xfeeddeadbeef/ce341bbca071099fd6952abab896aaac

以上是关于用于检查应用程序是不是以提升的权限运行的 PowerShell 命令的主要内容,如果未能解决你的问题,请参考以下文章

我的windows无法打开文件,运行了chkdsk后提示没有权限,必须调以提升模式运行

Delphi 以不同的用户身份运行

批处理文件:删除提升的权限(以原始用户身份运行命令)

在运行时提升权限 (Windows API C/C++)

如何在 Windows 上以提升的权限运行脚本

以提升的权限运行时如何正确检测网络驱动器