web-dev-qa-db-ja.com

スケジュールされたタスクから実行されているPowerShellスクリプト:アクションを開始できませんでした。ディレクトリ名が無効です

3つのアクションでスケジュールされたタスクを実行しているWindowsServer 2012 R2サーバーがあり、それぞれがPowerShellスクリプトを実行しています。

actions

これらの各アクションは、関連する(そして正しい)ディレクトリで「開始」します。

single action

元々、3番目のアクション-ApplyABPs-は、他の2つとまったく同じ方法で設定されました。単純な「startin」フォルダ、次に引数として_.\ApplyABPs.ps1_。これは意図したとおりに機能しました。

後者のスクリプトにログを追加したかったので、次のコードを追加して、共有_FunctionsLibrary.ps1_ファイルをドットソース化し、ログファイルを作成して書き込みます。

_# Call functions file...
. (Join-Path "C:\scripts\" FunctionLibrary.ps1)

# Create a log file
$LogFile = Create-Log -Location $LogfileLocation

Write-Log -Important -Text "==== ApplyABPs.ps1 ====="
_

ApplyABPsスクリプトとこの_FunctionLibrary.ps1_スクリプトへの追加は、他のファイルで機能します。

この_ApplyABPs.ps1_スクリプトをPowerShell ISEから実行すると、意図したとおりに機能します。ログファイルを作成して書き込みます。

ただし、次にスケジュールされたタスクを実行しようとすると、最初の2つのアクションは通常どおり実行されますが、3番目のアクションは失敗します。

task failure

そのコードは私に多くの詳細を与えませんが、タスクスケジューラの上部にある_Last Run Result_はThe directory name is invalid. (0x8007010B)と言っています。

したがって、テストの目的で、同じ_FunctionLibrary.ps1_とスクリプト内のコード修正を他の2つのアクションに追加してみました。その後、タスクスケジューラはすぐに失敗し、最初のアクションで同じエラーを返しました。

その後、コードを元に戻すと、アクションが機能します。

スケジュールされたタスクがPowerShellを呼び出す方法を変更しようとしました(したがって、上のスクリーンショットの_-executionpolicy bypass_、_-noprofile_、および_-file_パラメーター)が、違いはありません。

_directory invalid_エラーメッセージに基づいて、PowerShellが(スケジュールされたタスクによって呼び出されたときに)ドットソースファイルにアクセスできないのか、それともそれらの行に沿ったものにアクセスできないのか疑問に思います。

誰かがこの特定のエラーに光を当てたり、タスクスケジューラがPowerShellを呼び出す方法(およびそれが使用するディレクトリ/相対性理論)について洞察を与えることができれば、それは理想的です。

1
dunc

次の構文を使用して、タスクスケジューラでPowerShellスクリプトを実行します。

プログラム/スクリプト: C:\ Windows\System32\WindowsPowerShell\v1.0\powershell.exe

引数を追加: -NoLogo -Noninteractive -Noprofile -Command "&{C:\ ScriptFolder\get-LicensingInputFromAD.ps1}"

また、タスク引数フィールドで各.ps1ファイルの絶対パス\ファイル名を使用します。

4
SturdyErde