gpt4 book ai didi

powershell - 如何限制 Get-ChildItem 搜索的文件(或限制递归深度)?

转载 作者:行者123 更新时间:2023-12-01 03:59:06 25 4
gpt4 key购买 nike

背景

有一个目录全天自动填充 MSI 文件。我计划利用 Task Scheduler 每 15 分钟运行一次如下所示的脚本。该脚本将搜索目录并将过去 15 分钟内创建的任何新 MSI 复制到网络共享。

在此文件夹中 C:\ProgramData\flx\Output\<APP-NAME>\_<TIME_STAMP>\<APP-NAME>\还有另外两个文件夹:RepackagedMSI 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 已被复制时,我不想浪费时间深入查看文件夹。

  • 任何有关如何使该脚本整体更高效的其他建议也将不胜感激。

    脚本

    可以找到我当前的脚本 here .我不断收到:“您的帖子似乎包含未正确格式化为代码的代码”,并在第四次尝试重新格式化后放弃了。

    最佳答案

    你可以试试这个

    dir C:\ProgramData\flx\Output\*\*\*\*\* -filter *.msi 

    此搜索所有 .msi此级别的文件
    C:\ProgramData\flx\Output\<APP-NAME>\_<TIME_STAMP>\<APP-NAME>\Repackaged or 'MSI Package' or whatever else present folder

    没有递归,这避免了给你错误的太深的文件夹。

    将结果通过管道传输到:
    Where {$_.LastAccessTime -gt (Get-Date).AddMinutes(-15)} #be sure no action on file is taken before the dir command

    或者
    Where {$_.LastWriteTime -gt (Get-Date).AddMinutes(-15)} #some file can be re-copied maybe

    关于powershell - 如何限制 Get-ChildItem 搜索的文件(或限制递归深度)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14741403/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com