我正在制作一个脚本,将供应商软件部署到大型环境中。第一步是停止有问题的服务。该脚本在我们的测试环境中运行良好,但我不是生产环境中的管理员,因此我确信这是一个权限问题。我无法获得prod环境的管理员权限,因此我需要尝试找出我可能需要设置的任何内容以授予远程停止服务的权限。我发出以下命令来停止服务:
Stop-Service -InputObject $(Get-Service -Computer $destination.Server -Name ("moca."+$destEnv))
当我运行脚本时,我得到:
Cannot find any service with service name 'moca.WMSPRD'.
+ CategoryInfo : ObjectNotFound: (moca.WMSPRD:String) [Get-Service], ServiceCommandException
+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
Cannot validate argument on parameter 'InputObject'. The argument is null or empty. Supply an argument that is not null or empty and then try the command again.
+ CategoryInfo : InvalidData: (:) [Stop-Service], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.StopServiceCommand
服务肯定存在,如果我进入目标框并在本地发出stop-service命令,它将执行。所以有些东西阻止我远程停止服务。有什么想法吗?
编辑: 同事建议使用WMI,因此尝试用以下方法替换停止服务线:
(Get-WmiObject -computer $destination.Server Win32_Service -Filter ("Name='moca."+$destEnv+"'")).InvokeMethod("StopService",$null)
我得到了:
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
+ CategoryInfo : NotSpecified: (:) [Get-WmiObject], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
答案 0 :(得分:0)
如果您知道确切的服务名称,可以尝试使用
(Get-WmiObject -computerName $_.name Win32_Service -Filter "Name='moca'").StopService()
这里我假设服务名称是moca
答案 1 :(得分:0)
DCOM是否在远程计算机上工作?我知道如何使用远程Powershell做到这一点:
invoke-command comp001 { stop-service adobearmservice }