背景
有一个目录会全天自动填充 MSI 文件。我计划利用任务计划程序每 15 分钟运行一次如下所示的脚本。该脚本将搜索目录并将过去 15 分钟内创建的所有新 MSI 复制到网络共享。
在此文件夹C:\ProgramData\flx\Output\<APP-NAME>\_<TIME_STAMP>\<APP-NAME>\
中还有另外两个文件夹: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
- 我无法控制源位置的目录结构
更新:
- 我不知道应用程序名称或时间戳是什么。那是我无法控制的另一件事。
目前的计划
我已经阅读了有关使用-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 已被复制时,我不想浪费时间深入文件夹。
任何关于如何使这个脚本整体更有效率的额外建议也将不胜感激。
脚本
我当前的脚本可以在这里找到。我不断收到:“您的帖子似乎包含未正确格式化为代码的代码”并在第四次尝试重新格式化后放弃了。