打ち倒される前に、タスクをスケジュールする方法、powershellでサービスを再起動する方法、またはサービスを再起動するための特権を管理者以外のアカウントに与える方法を知っています。それは問題ではありません。ただし、問題はこれら3つのタスクすべてを組み合わせた組み合わせです。
ネットワークフォルダー上のファイルを処理する必要があるWindowsサービスがあります。したがって、実際には単なる通常のドメインアカウントである「サービスアカウント」でログオンします。このドメインアカウントは管理者ではありませんが、上記のフォルダーへのアクセス権があります。サービスは正常に実行され、仕事をします。
ただし、ファイルの1つにエラーがあり、他のファイルの処理を妨げることがあります。通常、誰かが気付くまでに時間がかかり、いくつかのバックログがあります。
そこで、Powershellでこれらのエラーファイルのネットワークフォルダーをポーリングする監視スクリプトを作成しました。ファイルが見つかった場合、ファイルはレビューのために一時フォルダーに移動され、サービスを再起動する必要があります。
サービスを開始および停止するために、グループポリシーを通じてサービスアカウントの特権を与えました。
サービスアカウントでサーバーにログオンすると、サービスMMCを使用してサービスを手動で再起動できます。また、PowerShellスクリプトを実行することもできます。これは、フォルダーのポーリング、ファイルの移動、サービスの再起動など、本来の動作を正確に実行します。すごい!
次のフェーズでは、10分ごとに実行されるスケジュールされたタスクを作成しました。タスクは、サービスと同じサービスアカウントを使用して、powershellスクリプトを実行します。「最高の特権で実行する」ボックスがチェックされています。先ほど言ったように、powershellスクリプトはネットワークドライブにアクセスする必要があるため、ローカルサーバー管理者として実行することはできません。(できる限り最小限の特権の原則を実装しようとします。)
ローカルセキュリティポリシーMMCを使用して、サービスアカウントにローカルサーバーの「バッチジョブとしてログオン」権限を与えました。
今、私が理解できない部分について:スケジュールされた時間に、スケジュールされたタスクが正常に完了し、powershellスクリプトが実行されています。スクリプトはフォルダをポーリングし、エラーファイルは移動されます。動作しないのは、サービスを再起動することだけです...?!繰り返しますが、同じユーザーとしてスクリプトを手動で実行すると完全に機能しました。
イベントビューアーにはあまり表示されませんが、スクリプトのログにこのエラーが表示されます。
TerminatingError(Stop-Service): "コンピューター '。'でサービスコントロールマネージャーを開けません。この操作には他の特権が必要な場合があります。"
サービスを再起動するために使用するコマンドは次のとおりです。
Stop-Service -Verbose -DisplayName $($service[1])
...
Start-Service -Verbose -DisplayName $($service[1])
(Windows Server 2012 R2およびPowerShellバージョン4を2008 R2ドメインで使用しています。)
更新: subinaclを使用してユーザーのサービス権限を設定し(ここで説明)、SDDL文字列を手動で設定(ここで説明)したため、制御フラグは次のようになりました(A ;; CCLCSWRPWPDTLOCRRC ;;; S-1- X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX)。また、GPOでサービスの特権をフルコントロールに設定しようとしました。これらのいずれも問題を解決しませんでした。これは、権限を持つ私に問題がなければなりませんどこかに私は、サーバー上のローカル管理者であるドメインアカウントを使用してタスクをスケジュールするとき、それはうまく動作しますので、私はまだ、見下ろすだということ。
Set-Service $($service[1]) -status stopped -ComputerName . -Verbose ....
代わりに試してStop-Service
みませんか?この回答によると、Stop-ServiceとStart-Serviceは明らかにリモート対応ではありません。リモートコンピューターでGet-Service –ComputerNameを使用することはできません。エラーメッセージは、「リモート」localhost '。' (<==それはドットです。)