繁体   English   中英

使用内联管理员凭据运行 Powershell 脚本来启动和停止 Windows 服务

[英]Running Powershell script using inline admin credentials to start and stop windows services

我可以在机器上以管理员身份访问,并且必须使用 Powershell 脚本启动、停止和重新启动某些窗口服务。 我们不希望在运行脚本时出现 UAC 提示,因为只有一个用户可以访问该机器。 同样由于某些特定要求,我们必须通过在其中添加管理员凭据来运行该脚本文件。

连同到目前为止我尝试过的其他解决方案,接近我正在寻找的解决方案如下

$username = "Domain\user"
$password = ConvertTo-SecureString "myPassword" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential -ArgumentList ($username, $password)

Set-Service -Name Spooler -Status Running -PassThru -Credential $psCred

但我收到以下错误。

设置服务:找不到与参数名称“凭据”匹配的参数。 在 line:6 char:53 + ... t-Service -Name Spooler -Status Running -PassThru -Credential $psCred + ~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Set-Service ], ParameterBindingException +fullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SetServiceCommand

更新 1 (尝试建议)

Invoke-Command -credential $psCred -command {Set-Service -Name Spooler -Status Running -PassThru} -computername myComputerName

[myComputerName] 连接到远程服务器 myComputerName 失败并显示以下错误消息:客户端无法连接到请求中指定的目标。 验证目标上的服务是否正在运行并且正在接受请求。 查阅在目标上运行的 WS-Management 服务的日志和文档,最常见的是 IIS 或 WinRM。 如果目标是 WinRM 服务,则在目标上运行以下命令来分析和配置 WinRM 服务:“winrm quickconfig”。 有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。 + CategoryInfo : OpenError: (myComputerName:String) [], PSRemotingTransportException +fullyQualifiedErrorId :CannotConnect,PSSessionStateBroken

更新 2

我必须使用命令Enable-PSRemoting -Force -SkipNetworkProfileCheck在机器上Enable-PSRemoting -Force -SkipNetworkProfileCheck以便Invoke-Command可以执行但在重复命令Invoke-Command -credential $psCred -command {Set-Service -Name Spooler -Status Running -PassThru} -computername localhost我收到以下错误

[localhost] 连接到远程服务器 localhost 失败并显示以下错误消息:访问被拒绝。 有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。 + CategoryInfo : OpenError: (localhost:String) [], PSRemotingTransportException +fullyQualifiedErrorId : AccessDenied,PSSessionStateBroken

在提升的 powershell 窗口中运行相同的命令集工作正常。

考虑到我是 Powershell 世界的新手,您能否指导我朝着正确的方向发展。

如Set-Service的官方文档中所述

你可以这样试试吗?

$Cred = Get-Credential
$hostname = "$env:computername.$env:userdnsdomain"
Write-Host $hostname
Invoke-Command -ComputerName $hostname -Credential $Cred -ScriptBlock{ Start-Service -Name Spooler}

此外,如果您不想提示输入凭据,则可以将凭据存储在 Windows 凭据管理器中,并从它们的 PowerShell 脚本中获取。 请参阅此答案以将凭据管理器与 PowerShell 结合使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM