【経緯】
Windowsタスクスケジューラを使ってPowerShellスクリプトファイルを定期実行する
バッチ処理を作成していました。
今回、下記の【改修依頼】によって、バッチ処理を追加することとなり、
[改修①]を実施後、動作確認を行ったが想定通りの動作にはなりませんでした。
そこで、想定通り動かなかった2か所について、原因とどう修正したか、共有します。
【改修依頼】
・既存のバッチ処理を別のグループでも利用したい
・バッチ処理によって出来上がるファイル名をグループごとに分けて出力してほしい
(ファイル名で判断できるようにしたい)
【改修内容】
[改修前]
■既存バッチ処理:AAグループ(Groupcode:001)のデータを取得して、
dataフォルダに「data_YYYYMMDD.csv」を作成

[改修①:NG動作]
■既存バッチ処理:AAグループ(Groupcode:001)のデータを取得して、
dataフォルダに「data_001_YYYYMMDD.csv」を作成

■追加バッチ処理:BBグループ(Groupcode:002)のデータを取得して、
dataフォルダに「data_002_YYYYMMDD.csv」を作成

[改修②:OK動作]
■既存バッチ処理:AAグループ(Groupcode:001)のデータを取得して、
dataフォルダに「data_001_YYYYMMDD.csv」を作成

■追加バッチ処理:BBグループ(Groupcode:002)のデータを取得して、
dataフォルダに「data_002_YYYYMMDD.csv」を作成

【まとめ】
1.タスクスケジューラーの操作のプログラム開始コマンドについて
■-Command の場合
・コマンドラインで直接コマンドを実行する方式。
スクリプトファイルのパスをコマンドとして扱うため、
正しく動作しない可能性がある
・スクリプトパスにスペースや特殊文字が入っていると壊れやすい
・引数付きで実行したい場合面倒になる
・Powershellのバージョンアップやポリシー変更で動作が不安定になる可能性がある
■-NoProfile -ExecutionPolicy Bypass -File の場合
・スクリプトファイルを実行する標準的な方法。
ファイルパスで指定されたスクリプトをそのまま実行
・-NoProfile:ユーザープロファイルを読み込まず、環境の影響を受けない
・-ExecutionPolicy Bypass:スクリプトの実行制限を回避
・-File:指定した .ps1 スクリプトを ファイルとして実行
※ -NoProfile と -ExecutionPolicy Bypass はセキュリティや安定性のためにほぼ必須
2.powershellコマンドでファイル名を変数を使って指定する方法について
■変数の展開は範囲を明確にするために${変数名}と記載することが安全
・特に変数の後ろに数字や英字が続く場合は、
{}で囲まないと意図した文字列とならない可能性が高い

