PowerShellスクリプト(動作する)があります。 Windowsタスクスケジューラで、"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
を実行する新しいタスクを作成し、PS1スクリプトとして引数を渡しました。タスクを実行すると、0x1
の最終実行結果が得られます。
スクリプトが更新されたときにログファイルに書き込むようにスクリプトを更新しましたが、それは起こりません。タスクがPowershell.exeを開くことさえできないようです。
この音は正確ですか?問題は何ですか、またはどのように回避しますか?
発生している問題が実行ポリシーにある場合は、PowerShellの特定の呼び出しの実行ポリシーを設定することもできます。これは、スケジュールされたタスクを介してPowerShellを実行するときに通常行うことです。
powershell.exe -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File \\path\to\script.ps1
これにより、 ユーザーのPowerShellプロファイルにあるものに依存しない が保証され、その追加コードを実行するオーバーヘッドが回避されます。
これはほとんど問題ではありません。スクリプトの出力をキャプチャしている場合は、おそらくそうなります。ほとんどの場合、気分が良くなります。
スクリプト内の何かがユーザーに予期せずプロンプトを表示した場合に、タスクが無期限に待機しないようにします。このスイッチを使用すると、代わりにスクリプトが終了します。少なくとも、ハングするスクリプトの代わりにエラーコードが表示されます。
ここでUnrestricted
を使用するか、任意の実行ポリシーを使用できます。 これがおそらく最も必要なものです。
タスクをグローバルなデフォルト以外の設定に依存させたくないので、将来変更する他の理由があるかもしれません。他のプロセスが別の実行ポリシーに依存している場合、この方法でタスクと対立することはありません。
さらに、デフォルトを変更する必要がないことは常に素晴らしいことです。覚える/ドキュメント/テストする必要が少なくなります。
タスクスケジューラによって呼び出されたPowerShellスクリプトがコード0x1
で完了するには、いくつかの原因が考えられます。
Run with highest privileges
フラグ(タスクの[全般]タブのチェックボックス)は有効になっていません。*-File ".\MyScript.ps1" -Parameter1 'Demo'
などのアプローチを使用している場合は、代わりに-Command "& .\MyScript.ps1 -Parameter1 'Demo'"
を試してください。* Benはコメントで指摘しているように、Run with highest privileges
を有効にする必要はありません。スクリプトに管理者権限が必要かどうかによって異なります(たとえば、Set-ExecutionPolicy
やStop-Process
などのコマンドがこれらを必要とする場合)。よくわからない場合は、オプションをチェックして、問題が解決するかどうかを確認してください。違いがないようであれば、チェックしないでください。
私は以前にこれをやったことがあり、同様の問題がありました。ほとんどの場合、PowerShellのセキュリティ設定です。最も明らかに、私はあなたの実行ポリシーを再確認します(あなたがそれを設定したと仮定して)。
タスクはどのユーザーとして実行されますか?そのユーザーは以前にPowerShellスクリプトを実行しましたか?正しいことを覚えていれば、各ユーザーは(実行ポリシーに関係なく)初めてスクリプトを実行するときに、PowerShellスクリプトの実行を許可するように求められます(Y/N)。それは前に私をかみました。試してください:
最初の実行後、再度心配する必要はなく、タスクスケジューラから正常に実行する必要があります。
ドメインセキュリティによっては、グループ実行ポリシーを設定する必要がある場合もあります。これを行う方法の詳細と、確認するその他のいくつかの項目を次に示します。PowerShell Security。
前の回答は非常に価値があります。 Add Argumentsフィールドに以下の値を追加しました。
-noninteractive -nologo -command "&{path\to\script.ps1}"
アンパサンドを追加し、パスを中括弧で囲むようにしてください。アンパサンドの前と中括弧を閉じた後に二重引用符を付けることを忘れないでください。
エラーメッセージがなく、問題がわからない場合-PowerShellスクリプトがスケジュールされたタスクから開始したくない理由がわからない場合は、次の手順を実行して回答を取得します。
すべてのエラー通知を表示できるはずです。
私のスクリプトの1つでは、次のとおりでした。
タイプ[System.ServiceProcess.ServiceController]が見つかりません。このタイプを含むアセンブリがロードされていることを確認してください。
この場合、不足しているアセンブリを読み込むために、スクリプトの先頭に追加の行を追加する必要があります。
Add-Type -AssemblyName "System.ServiceProcess"
そして次のエラー:
「1」引数で「GetServices」を呼び出す例外:「コンピューター ''でサービスコントロールマネージャーを開けません。この操作には他の特権が必要な場合があります。」
select:プロパティ「データベース名」が既に存在するため、プロパティを処理できません