バックグラウンド
1 日を通して MSI ファイルが自動的に入力されるディレクトリがあります。タスク スケジューラを利用して、以下に示すスクリプトを 15 分ごとに実行する予定です。スクリプトはディレクトリを検索し、過去 15 分間に作成された新しい MSI をネットワーク共有にコピーします。
このフォルダ内C:\ProgramData\flx\Output\<APP-NAME>\_<TIME_STAMP>\<APP-NAME>\
には、他に と の 2 つのフォルダがありRepackaged
ますMSI Package
。このRepackaged
フォルダーには MSI が含まれていないため、フォルダーを検索する必要はありません。また、このエラーを防ぐために何らかの方法で除外する必要があることもわかりました。
Get-ChildItem : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:14 char:32
+$listofFiles=(Get-ChildItem <<<< -Recurse -Path $outputPath -Include "*.msi" -Exclude "*.Context.msi" | where {$_.LastAccessTime -gt $time.AddMinutes($minutes)})
+ CategoryInfo : ReadError: C:\ProgramData\...xcellence\Leg 1:String) [Get-ChildItem], PathTooLongException
+ FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand
制限事項
- Powershell v1.0 の使用に行き詰まっています
- ソースの場所のディレクトリ構造を制御できません
更新しました:
- アプリ名やタイムスタンプがわかりません。それは私の手に負えない別のものです。
現在の計画
using について読んだこと-Filter
があり、関数に似たフィルターを認識していますが、それらの使用方法についてのアイデアを思いつくことができませんでした。現時点での私の唯一の考えは、次のようなことをすることです:
$searchList=Get-ChildItem "all instances of the MSI Package folder"
foreach($folder in $searchList){
$listofFiles=Get-ChildItem "search for *.msi"
foreach($file in $listofFiles){"Logic to copy MSI from source to destination"}
}
しかし...もっと効率的な方法があるのではないかと思いました。
質問
- Get-ChildItem が検索する深さを制限するにはどうすればよいですか?
- Get-ChildItem 検索を制限するにはどうすればよいですか
C:\ProgramData\flx\Output\<APP-NAME>_<TIME_STAMP>\<APP-NAME>\MSI Package
- 過去 15 分間にアクセスされたフォルダのみを検索するにはどうすればよいですか? MSI が既にコピーされていることがわかっているときに、フォルダーをドリルダウンするのに時間を無駄にしたくありません。
このスクリプトを全体的により効率的にする方法についての追加のアドバイスも大歓迎です。
脚本
私の現在のスクリプトはここにあります。「あなたの投稿には、コードとして適切にフォーマットされていないコードが含まれているようです」というメッセージが表示され続け、4回目の再フォーマットを試みた後、あきらめました。