【发布时间】: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