3つのアクションでスケジュールされたタスクを実行しているWindowsServer 2012 R2サーバーがあり、それぞれがPowerShellスクリプトを実行しています。
これらの各アクションは、関連する(そして正しい)ディレクトリで「開始」します。
元々、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番目のアクションは失敗します。
そのコードは私に多くの詳細を与えませんが、タスクスケジューラの上部にある_Last Run Result
_はThe directory name is invalid. (0x8007010B)
と言っています。
したがって、テストの目的で、同じ_FunctionLibrary.ps1
_とスクリプト内のコード修正を他の2つのアクションに追加してみました。その後、タスクスケジューラはすぐに失敗し、最初のアクションで同じエラーを返しました。
その後、コードを元に戻すと、アクションが機能します。
スケジュールされたタスクがPowerShellを呼び出す方法を変更しようとしました(したがって、上のスクリーンショットの_-executionpolicy bypass
_、_-noprofile
_、および_-file
_パラメーター)が、違いはありません。
_directory invalid
_エラーメッセージに基づいて、PowerShellが(スケジュールされたタスクによって呼び出されたときに)ドットソースファイルにアクセスできないのか、それともそれらの行に沿ったものにアクセスできないのか疑問に思います。
誰かがこの特定のエラーに光を当てたり、タスクスケジューラがPowerShellを呼び出す方法(およびそれが使用するディレクトリ/相対性理論)について洞察を与えることができれば、それは理想的です。
次の構文を使用して、タスクスケジューラでPowerShellスクリプトを実行します。
プログラム/スクリプト: C:\ Windows\System32\WindowsPowerShell\v1.0\powershell.exe
引数を追加: -NoLogo -Noninteractive -Noprofile -Command "&{C:\ ScriptFolder\get-LicensingInputFromAD.ps1}"
また、タスク引数フィールドで各.ps1ファイルの絶対パス\ファイル名を使用します。