ベンダー ソフトウェアを大規模な環境に展開するためのスクリプトを作成しています。最初のステップは、問題のサービスを停止することです。スクリプトはテスト環境で正常に実行されますが、私は運用環境の管理者ではないため、権限の問題であると確信しています。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
サービスは確実に存在し、ターゲット ボックスに rdp して stop-service コマンドをローカルで発行すると、サービスが実行されます。そのため、サービスをリモートで停止することを妨げているものがあります。何か案は?
編集: 同僚が WMI の使用を提案したので、Stop-Service 行を次のように置き換えてみました。
(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