因为我找不到 Linux 的替代品sudo
海拔命令,我有以下问题:
如何定义需要提升权限的 PowerShell 函数?我的意思是 UAC 提示。
假设这样的函数如下:
function system-check {
SFC /ScanNow
}
系统:
Windows 8.1 专业版 64 位
电源外壳:
Major Minor Build Revision ----- ----- ----- -------- 5 0 10586 117
编辑1:
为了能够 100% 理解,让我重新表述一下:
- 我以用户身份运行 PowerShell
- 我运行上述函数
system-check
- 我希望提升该函数权限以便能够执行该命令;请注意,我希望出现 UAC 提示
答案1
要从提升的窗口运行特定命令:
Start-Process -FilePath powershell.exe -ArgumentList {$ScriptBlock} -verb RunAs
例如:
Start-Process -FilePath powershell.exe -ArgumentList {
SFC /scannow
} -verb RunAs
要从提升的窗口运行特定脚本:
Start-Process powershell -ArgumentList '-noprofile -file MyScript.ps1' -verb RunAs
要运行提示 UAC 的整个 PowerShell 会话:
Start-Process powershell.exe -Verb runAs
如果当前窗口以提升的权限运行,则返回 $True 或 $False 的函数:
function isadmin
{
#Returns true/false
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
}
为了确保脚本仅以管理员身份运行,请将其添加到开头:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Echo "This script needs to be run As Admin"
Break
}
在 PowerShell v4.0 中,可以使用 #Requires 语句简化上述操作:
#Requires -RunAsAdministrator
来源:使用提升的权限运行