使用powershell切换服务运行状态(使用UAC提示)

Switch service running state using powershell (using UAC prompts)


$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 不接受这个参数。

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

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

无法 运行 在非提升的 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>'