【问题标题】:Powershell Get-ChildItem seems to sometimes skip filesPowershell Get-ChildItem 似乎有时会跳过文件
【发布时间】:2021-05-02 09:29:34
【问题描述】:

我编写了一个 powershell 脚本,通过 Add-PnPFile 将在本地文件夹中创建的文件上传到 SharePoint。

我每 20 秒循环一次脚本以检查文件夹中是否有新文件,如果文件尚未在 SharePoint 上,则上传。我使用 Where-object 仅选择最后 5 分钟以在循环中没有太多文件。 (需要快速上传,因为流程是 ERP->本地文件夹-> SharePoint 和用户正在等待)

这在 95% 的情况下都有效,但有时它会跳过现有的文件。

$Localfolder = "D:\DATA"
$A_Files = Get-ChildItem -Path $Localfolder -Include @("*.pdf", "*.csv") | Where-Object {$_.LastWriteTime -gt (Get-Date).AddMinutes(-5)}

如果我停止脚本并在同一个 Powershell 会话中运行,它不会显示该文件。 如果我打开另一个 powershell 会话并运行命令,它会显示该文件。

有人知道是缓存还是我遗漏了什么吗?

PS C:\Users\rob_admin> $PSVersionTable

名称值


PSVersion 5.1.14409.1018
PSEdition 桌面版
PSCompatibleVersions {1.0、2.0、3.0、4.0...}
构建版本 10.0.14409.1018
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
序列化版本 1.1.0.1

【问题讨论】:

  • $Localfolder = "D:\DATA" = $Localfolder = "D:\DATA*" 因为我测试了它是否不是 -Recurse 设置
  • 是……有问题吗? 20秒后再次运行脚本,文件不会被拾取吗?
  • 不要投票。曾经。而是响应事件。突然之间,您有了一个不会不必要地消耗 CPU 周期的解决方案。并且恰好是可靠的。
  • 所以即使你在没有过滤器的情况下单独运行Get-ChildItem -Path $Localfolder -Include @("*.pdf", "*.csv"),文件也会丢失?
  • 这些文件是如何创建的?当您的脚本运行时,它们是否仍有可能在另一个应用程序中打开?在这种情况下,您甚至可能会上传不完整的文件!

标签: windows powershell get-childitem


【解决方案1】:

在 IInspectable 发表评论后,我开始使用一种成功率 100% 的不同方法: $watcher = 新对象 System.IO.FileSystemWatcher

所以现在的触发器是: Register-ObjectEvent $watcher 'Created' -Action $action

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-26
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多