web-dev-qa-db-ja.com

タスクスケジューラのPowerShellタスクは、別の-Credentialでプロセスを開始できません

PowerShellスクリプトであるスケジュールされたタスクがあります。スクリプトは、統合されたセキュリティを介してアクセスが制御されるSQLデータベースに対していくつかのアクションを実行します。したがって、これらの各アクションは、適切なWindows AD資格情報の下で実行されているプロセスによって実行される必要があり、使用する必要のある資格情報のセットが複数あります。

詳細:

PowerShellタスクは、次のようにタスクスケジューラで呼び出されます。

_cmd.exe /C ""powershell.exe" -Noninteractive "C:\someDir\SomeScript.ps1" >"C:\logDir\SomeScript.log" 2>&1"
_

つまり、_cmd.exe_は呼び出された_Program/script_であり、行の残りの部分はAdd arguments (optional):の部分です。 (当面の質問とは関係のない理由でこの方法を呼び出します。その一部は、開発したスクリプトライブラリへのロギングを設計した方法です。).

スケジュールされたタスク設定(General)で、_Run whether user is logged in or not_と_Run with highest privileges_を選択します。タスクを実行しているユーザーIDは、_ad\admin1_と呼び、ローカル管理者権限を持っています。

スクリプト_SomeScript.ps1_内で、異なる資格情報の下で他のスクリプトを呼び出します。

_Start-Process $explicitPowershellExe -NonInteractive -Credential $credential -Wait -ArgumentList @( '-file', $scriptForSqlOperations )
_

資格情報_$credential_は、_ad\admin1_とは異なるユーザー用です。エラーは生成されませんが、この呼び出しはPowerShellの起動にサイレントに失敗します。 PowerShellの起動に失敗する唯一の手がかりは、「Windowsログ」=>システムのイベントです。

アプリケーションポップアップ:powershell.exe-アプリケーションエラー:アプリケーションを正しく起動できませんでした(0xc0000142)。 [OK]をクリックしてアプリケーションを閉じます。

スケジュールされたタスクの外部で実行する場合、スクリプトを問題なく実行できることに注意してください。ユーザー_SomeScript.ps1_のログオンセッションでスクリプト_ad\admin1_を実行すると、どのように実行しても成功します。たとえば、_cmd.exe_コンソール(adminで実行)では、exact行を実行できます。

_cmd.exe /C ""powershell.exe" -Noninteractive "C:\someDir\SomeScript.ps1" >"C:\logDir\SomeScript.log" 2>&1"
_

成功するか、もっと簡単に実行できます

_powershell -Noninteractive "C:\someDir\SomeScript.ps1"
_

コマンドプロンプトで、すべてうまくいきます。したがって、問題は明らかに、TaskSchedulerが実行する_cmd.exe_プロセスを設定する方法に問題があります。

誰かが問題が何であるか、そしてそれを回避する方法を知っていますか?スケジュールされたタスクでのなりすましに対するセキュリティ上の制限があるのではないかと思いますか????

ありがとう。

2

実行しようとしている各ユーザーが「バッチジョブとしてログオン」する権利を持っていることを確認してください。

  1. gpedit.mscを開き、Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignmentに移動します
  2. 各ユーザーをLog on as a batch job右に追加します。
  3. gpupdateを実行します
  4. タスクを再試行してください。

https://docs.Microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/log-on-as-a-batch-job

1
Appleoddity