如果操作需要提升,则在PowerShell中显示UAC提示

dri*_*iis 15 powershell uac

我有一个简单的PowerShell脚本来停止进程:

$p = get-process $args
if ( $p -ne $null )
{
$p | stop-process
$p | select ProcessName, ID, HasExited, CPU, Handles
}
else { "No such process" }
Run Code Online (Sandbox Code Playgroud)

如果我尝试停止当前用户未启动的进程; 它适用于Windows Server 2003.但是,在Windows Server 2008(和其他带有用户帐户控制的Windows风格)上,我收到以下错误:

Stop-Process : Cannot stop process "w3wp (5312)" because of the following error: Access is denied
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题,而无需使用提升权限运行PowerShell?如果用户在尝试执行需要提升的操作时,只是出现了UAC提示,那就没问题.

Jar*_*Par 18

AFAIK,在你似乎想要的意义上没有办法做到这一点.这是运行指定的.exe并期望立即出现提示.

我所做的是我知道必须使用管理权限运行的命令,我使用我称之为Invoke-Admin的函数运行它们.它确保我以管理员身份运行,并且如果我在运行命令之前没有提示,则会提示用户使用UAC对话框.

这里是

function Invoke-Admin() {
    param ( [string]$program = $(throw "Please specify a program" ),
            [string]$argumentString = "",
            [switch]$waitForExit )

    $psi = new-object "Diagnostics.ProcessStartInfo"
    $psi.FileName = $program 
    $psi.Arguments = $argumentString
    $psi.Verb = "runas"
    $proc = [Diagnostics.Process]::Start($psi)
    if ( $waitForExit ) {
        $proc.WaitForExit();
    }
}
Run Code Online (Sandbox Code Playgroud)