#1 楼
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
(来自命令行安全提示)
评论
$ currentPrincipal =新对象Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity] :: GetCurrent())&{if($ currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole] :: Administrator)){( host).UI.RawUI.Backgroundcolor =“ DarkRed” clear-host写主机“警告:PowerShell以管理员身份运行。`n“}
– davey
09年12月17日在20:16
第一行:最后一个大括号)丢失。我无法解决此问题,因为它少于6个字符。
– Xavier Nicollet
17年8月28日在11:14
#2 楼
在Powershell 4.0中,您可以在脚本顶部使用require:#Requires -RunAsAdministrator
输出:
脚本'MyScript.ps1'无法运行,因为它包含一个“ #requires “
以管理员身份运行的声明。当前的Windows PowerShell会话未以管理员身份运行。使用“以管理员身份运行”选项启动Windows
PowerShell,然后尝试再次运行脚本。
评论
并非我一直在寻找,但仍然非常有用。谢谢埃迪!
– Michael Kelley
15年3月19日在17:31
这应该是公认的答案
–科洛布峡谷
20-2-12在23:28
更正链接:docs.microsoft.com/en-us/powershell/module/…
–夏令时
20 Mar 30 '20 at 8:21
#3 楼
function Test-Administrator
{
$user = [Security.Principal.WindowsIdentity]::GetCurrent();
(New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
执行上述功能。如果结果为True,则该用户具有管理员权限。
评论
这仅确定运行脚本的用户是否是计算机上的管理员,而不是当前是否以管理权限执行脚本。换句话说,即使用户未使用“以管理员身份运行”来启动命令外壳程序,这仍将返回true。
–整体开发人员
14-10-17在19:34
@HolisticDeveloper,那是不正确的。如果您没有被提升,它将返回false
–charleswj81
2015年1月8日在16:33
截至目前,@ charleswj81我观察到Holistic Developer描述的行为。
–zneak
16年5月7日,0:01
我不认为您需要使用半冒号...但这表示我也不认为这会引发错误
–科洛布峡谷
18年8月4日在18:52
从2018年开始,这在Win10上对我有效。如果当前用户帐户未提升,则返回False;如果powershell运行提升,则返回True。
–arberg
18-10-16在8:03
#4 楼
作为上述答案的组合,您可以在脚本开头使用以下内容: # todo: put this in a dedicated file for reuse and dot-source the file
function Test-Administrator
{
[OutputType([bool])]
param()
process {
[Security.Principal.WindowsPrincipal]$user = [Security.Principal.WindowsIdentity]::GetCurrent();
return $user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator);
}
}
if(-not (Test-Administrator))
{
# TODO: define proper exit codes for the given errors
Write-Error "This script must be executed as Administrator.";
exit 1;
}
$ErrorActionPreference = "Stop";
# do something
另一种方法是用此行启动脚本,这将在不以管理员权限启动时阻止其执行。
#Requires -RunAsAdministrator
评论
不幸的是,这行不通。如果脚本不是以提升的权限运行的,那么它甚至都不会加载,并且您也不会看到自定义错误消息。
–JamesQMurphy
19年5月2日在17:27
谢谢。我已经更正了上面的答案。
–MovGP0
19年5月20日在22:49
#5 楼
这将检查您是否是管理员,如果不是,则它将以PowerShell管理员身份在PowerShell ISE中重新打开。这会有所帮助!
$ver = $host | select version
if ($ver.Version.Major -gt 1) {$Host.Runspace.ThreadOptions = "ReuseThread"}
# Verify that user running script is an administrator
$IsAdmin=[Security.Principal.WindowsIdentity]::GetCurrent()
If ((New-Object Security.Principal.WindowsPrincipal $IsAdmin).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) -eq $FALSE)
{
"`nERROR: You are NOT a local administrator. Run this script after logging on with a local administrator account."
# We are not running "as Administrator" - so relaunch as administrator
# Create a new process object that starts PowerShell
$newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell_ise";
# Specify the current script path and name as a parameter
$newProcess.Arguments = $myInvocation.MyCommand.Definition;
# Indicate that the process should be elevated
$newProcess.Verb = "runas";
# Start the new process
[System.Diagnostics.Process]::Start($newProcess);
# Exit from the current, unelevated, process
exit
}
评论
在PowerShell脚本中检查管理员凭据