9

アプリケーションの一部として PowerShell を使用してスケジュールされたジョブを作成するスクリプトがいくつかあります。最近それらをテストしたとき、それらのいくつかは常にすぐに失敗し、出力が生成されないことに気付きました (それらはGet-Jobリストにも表示されません)。

何日にもわたる微調整の後、毎週実行するように設定されているすべてのジョブにそれを分離することができました。以下は、まったく同じことを行う 2 つのジョブを作成するスクリプトです。これをドメインで実行し、ドメイン ユーザーの資格情報を提供してから、タスク スケジューラ GUI で両方のジョブを強制的に実行すると (右クリック -> [実行])、毎日のジョブは正常に実行され (0x0 結果)、毎週のジョブは失敗します。 (0x41306)。

注: -Credential パラメータを指定しない場合、両方のジョブが正常に機能します。タスクが毎週実行され、このドメイン ユーザーとして実行されている場合にのみ、ジョブは失敗します。

なぜこれが起こっているのかについての情報を見つけることも、毎週の仕事で異なる動作をする理由についても考えられません. タスク スケジューラの [履歴] タブには有用な情報がほとんどなく、「ユーザーの要求によりタスクが停止しています」と「タスクが終了しました」だけで、どちらにも有用な情報はありません。

タスク スケジューラは、「\Microsoft\Windows\PowerShell\ScheduledJobs\Test1」タスクの「{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}」インスタンスを終了しました。タスク スケジューラは、ユーザー "MyDomain\SomeUser" による要求として、タスク "\Microsoft\Windows\PowerShell\ScheduledJobs\Test1" のインスタンス "{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}" を停止しました。

これどうしたの?毎週のタスクの実行方法が異なるのはなぜですか? また、この問題をどのように診断できますか?

これは、Windows Server 2008 R2 上の PowerShell v3 です。これをローカルで再現することはできませんでしたが、本番ドメインと同じようにユーザーを設定していません (私はこれに取り組んでいますが、誰かが何が起こっているか知っています!)。

Import-Module PSScheduledJob

$Action =
{
    "Executing job!"
}

$cred = Get-Credential "MyDomain\SomeUser"

# Remove previous versions (to allow re-running this script)
Get-ScheduledJob Test1 | Unregister-ScheduledJob
Get-ScheduledJob Test2 | Unregister-ScheduledJob

# Create two identical jobs, with different triggers
Register-ScheduledJob "Test1" -ScriptBlock $Action -Credential $cred -Trigger (New-JobTrigger -Weekly -At 1:25am -DaysOfWeek Sunday)
Register-ScheduledJob "Test2" -ScriptBlock $Action -Credential $cred -Trigger (New-JobTrigger -Daily -At 1:25am)

編集:snoverの提案に従ってConnectに追加:

https://connect.microsoft.com/PowerShell/feedback/details/776801/weekly-tasks-created-via-powershell-using-a-different-user-immediately-fail-with-error-0x41306

編集: Jeff Hicks からの追加情報

あなたのコードを使用して、PS v3 を実行している 2008 R2 ボックスで同じジョブを作成しました。どちらのジョブも、Start-Job を使用して PowerShell から正常に実行されました。しかし、GUI では、毎週のジョブで同じエラーが発生しました。

Windows 8 でも同じ結果が得られます。何かがタスク サービスに中止を指示しています。他の設定をいくつかテストしましたが、効果はありませんでした。考えられるすべてのログを調べたところ、ジョブの開始、PowerShell の読み込み、タスク スケジューラのキャンセルが表示されます。

少し前に毎週のタスクを今日実行するようにリセットしましたが、それでも失敗しました。また、PowerShell 以外のことを行う毎週のタスクをテストしたところ、問題なく実行されました。

現在のユーザーと同じアカウントを使用するように毎週のジョブを変更したところ、問題なく実行されました。他のアカウントに戻しましたが、再び失敗しました。トリガーとアカウントの相関関係についてはわかりません。

4

5 に答える 5

1

スケジュールされたタスクを作成するときに同様の問題が発生しましたが、それが日のスケジュールに基づいていたかどうかは覚えていません。スケジュールされたタスクを実行するために gMSA アカウントに切り替えましたか? これにより、ユーザーがログオンしているかどうかに関係なくタスクを実行するように設定できました。そうしないと、ユーザー名とパスワードを入力する必要があり、ユーザーがログオンするかどうかを選択できません。

于 2016-05-28T20:27:45.253 に答える
0

デフォルトのジョブ オプションがヒントになる場合があります。ジョブの実行を妨げるデフォルト値が多数あります。これらのいくつかは、ご使用の環境に固有のものである可能性があります。詳細はこちら: http://technet.microsoft.com/en-us/library/hh849674.aspx

そうでない場合は、お知らせください。このトピックに従って、このシナリオをそのトラブルシューティング ガイドに取り入れたいと思います。

ありがとう、June Blender (juneb) Microsoft シニア プログラミング ライター

于 2013-01-17T18:52:32.780 に答える
-1

そのため、スケジュールされたジョブはタスク スケジューラで実行されますが、実際には緊密な統合はありません。スケジュールされたジョブを登録すると、スケジュールされたジョブの定義が作成され、できれば Windows のスケジュールされたタスク オプションが作成されます。Windowsのスケジュールされたタスクが1)そのスケジュールされたジョブを正常にトリガーし、2その実行が十分に成功してインスタンスが作成されるまで、スケジュールされたジョブインスタンスジョブは作成されません。

スケジュールされたジョブが失敗した場合、PowerShell は少なくともスケジュールされたタスク エンジンにクエリを実行し、インスタンスが開始されて失敗し、エラーが発生したことなどを確認することをお勧めします。

したがって、基本的には登録時にトリガーを登録しますが、これは発生する場合と発生しない場合があり、PS が実行される前に、失敗した場所でさまざまなことが発生する可能性があります。

たとえば、特定の資格情報の下で実行するように指定し、資格情報に問題があるか、登録後に権限が変更されたとします。トリガーが発生すると、Windows はスケジュールされたタスクを開始できなくなります。したがって、スケジュールされたジョブ コードは PS に何も伝えません。

いくつかのデモを行っていたときに、1 つの興味深いケースが発生しました。テストでは、ラップトップでそれを登録し、4 秒後にトリガーすると、ジョブ インスタンスが表示され、終了して結果を取得できました。

ただし、デモを行うと、常に失敗します。それは、デフォルトでは、オプションのスケジュールされたタスクは、電源に接続されているのではなく、バッテリで実行されている場合には実行されず、デモを行っているときにラップトップを持って人に見せに行ったのですが、電源に接続されていなかったからです。

スケジュールされたタスク エンジンに関する限り、特定のエラー コードとメッセージのために実行しようとして失敗したという履歴がある場合、PS 側からは何も起こらなかったように見えるため、悲しいことです。

次のバージョンでステータスと理由が失敗したジョブを表示できるようにしたい場合は、接続時に私のバグに投票してください

https://connect.microsoft.com/PowerShell/feedback/details/737587/psv3-scheduledjobs-if-a-trigger-fails-there-is-no-failed-instance-example-uses-multiple-triggers-to-これを行う

于 2013-01-17T19:09:42.887 に答える