无需以管理员身份登录即可以管理员身份运行脚本

无需以管理员身份登录即可以管理员身份运行脚本

我的一个老朋友曾经说过:“任何问题都是愚蠢的。愚蠢就是避免询问。”

我对 Windows 系统管理员还很陌生(只有 3/4 个月),最近我开始使用 powershell 2.0。

我正在管理一组 Windows 服务,其中一个服务将尝试执行“Start-Service”命令作为 powershell 脚本的一部分。此 Windows 服务在域帐户“ATG\Boot”下作为管理员组的一部分运行。

但是,Start-Service / Stop-Service总是会失败,原因如下:

Stop-Service:由于以下错误,无法停止服务“SQL Server Reporting Services (MSSQLSERVER) (ReportServer)”:无法在计算机“。”上打开 ReportServer 服务。第 1 行,字符:13 + Stop-Service <<<< 报告 + CategoryInfo:CloseError:(System.ServiceProcess.ServiceController:ServiceController)[Stop-Service],
ServiceCommandException + FullyQualifiedErrorId:CouldNotStopService,Microsoft.PowerShell.Commands.StopServiceCommand

当我从 shell 执行脚本时会重现此错误,但当我使用“以管理员身份运行”选项运行脚本时可以正常工作。

我想强调的是,用户是本地管理员组的一部分。

有任何想法吗?

答案1

UAC 是否已启用?您可能必须让脚本自行提升权限。这可能意味着您的脚本将显示 UAC 提示。

这是“powershell uac prompt”的第一个搜索结果。

https://stackoverflow.com/questions/1566969/showing-the-uac-prompt-in-powershell-if-the-action-requires-elevation

答案2

这是我用来停止 SQL Server 服务的脚本。通过使用带有 -runas 开关的 start-process,将以管理员身份启动一个单独的 PowerShell 进程。系统将提示您输入 UAC。

Start-Process powershell.exe -argumentlist '-noprofile -command get-service -Name "MSSQL`$R2" | ? {$_.Status -eq "Running"} | Stop-Service -Force' -verb runas

我在这里有关于这个主题的博客文章。

相关内容