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


20

由于找不到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提示

请注意,许多内置的powershell命令和Microsoft模块添加的命令(例如MSOL命令)通常需要提升,但绝不提供特权提升方面的帮助。它们只是失败,并显示错误的错误消息。如果您在脚本中构建了一个海拔提示,则将提供比Microsoft本身更多的用户友好性。
Todd Wilcox

Answers:


33

要从提升的窗口中运行特定命令:

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

要运行整个PowerShell会话提示输入UAC,请执行以下操作:

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

来源:以提升的权限运行

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.