我有一个简单的PowerShell脚本来停止进程:
$p = get-process $args
if ( $p -ne $null )
{
$p | stop-process
$p | select ProcessName, ID, HasExited, CPU, Handles
}
else { "No such process" }
如果我尝试停止当前用户未启动的进程;它适用于Windows Server 2003.但是,在Windows Server 2008(以及其他带有用户帐户控制的Windows版本)上,我收到以下错误:
Stop-Process : Cannot stop process "w3wp (5312)" because of the following error: Access is denied
如果没有使用提升权限运行PowerShell,有没有办法解决这个问题?如果用户在尝试执行需要提升的操作时,只是出现了UAC提示,那就没问题了。
答案 0 :(得分:17)
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();
}
}
答案 1 :(得分:3)
首先通过PowerShell Community Extensions安装Chocolatey choco install pscx
(您可能需要重新启动shell环境)
然后启用pscx
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser #allows scripts to run from the interwebs, such as pcsx
然后使用Invoke-Elevated
,例如
Invoke-Elevated {Add-PathVariable $args[0] -Target Machine} -ArgumentList $MY_NEW_DIR
答案 2 :(得分:0)
此脚本会检查中等强制级别令牌(非提升管理员)并重新启动提升的脚本。
if ($Mygroups -match ".*Mandatory Label\\Medium Mandatory Level") {
#non elevated admin: elevating
write-host "Elevate"
start-process powershell -Argumentlist "$PSCommandPath -Yourargument $Youragumentvalue" -verb runas -Wait
exit
}