首页 > 解决方案 > 使用powershell切换服务运行状态(使用UAC提示)

问题描述


$serviceName = "wsearch"
$isRunning = Get-Service | Where-Object {$_.Status -eq "Running" -and $_.Name -eq $serviceName}
$isStopped = Get-Service | Where-Object {$_.Status -eq "Stopped" -and $_.Name -eq $serviceName}

if ($isStopped) {
   Start-Service -InputObject $isStopped
   Start-Sleep -s 10
}

if ($isRunning) {
   Stop-Service -InputObject $isRunning
   Start-Sleep -s 10
}

我想运行这个脚本,但我不想设置管理员执行策略(设置为最大限制),而常规用户策略是松懈的。

我想以普通用户身份运行脚本并为每个命令触发 UAC 提示符(类似于-Verb RunAs),但是 Start-Service 不接受此参数。

我想我可以运行 aStart-Process "sc"但这违背了 powershell 的目的。

该脚本的最终目标是根据当前运行状态来切换服务的状态。

标签: powershellservicecredentials

解决方案


无法在非提升的 powershell 会话中运行提升(作为管理员)的一次性命令。这类似于 Linux 中的“sudo”,而 Windows 世界中并不存在。相反,您可以使用以下内容以管理员身份启动 powershell 会话并在那里运行命令。您不仅限于调用“sc”

Start-Process -Verb RunAs -FilePath 'powershell' -Arguments '-Command <your commands>' 

要运行具有提升权限的 powershell 脚本,您可以替代-Command-File-Command <path to file>也可以)

Start-Process -Verb RunAs -FilePath 'powershell' -Arguments '-File <path to script>' 

推荐阅读