如何定义需要提升的 PowerShell 函数?

如何定义需要提升的 PowerShell 函数?

因为我找不到 Linux 的替代品sudo海拔命令,我有以下问题:

如何定义需要提升权限的 PowerShell 函数?我的意思是 UAC 提示。

假设这样的函数如下:

function system-check {
    SFC /ScanNow
}

系统:

Windows 8.1 专业版 64 位

电源外壳:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  117

编辑1:

为了能够 100% 理解,让我重新表述一下:

  1. 我以用户身份运行 PowerShell
  2. 我运行上述函数system-check
  3. 我希望提升该函数权限以便能够执行该命令;请注意,我希望出现 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

来源:使用提升的权限运行

相关内容