我正在使用以下powershell脚本来监控即将发布的新文件 在IBM iSeries共享文件夹中。
# variables
#$folder = "\\10.10.0.120\transform\BE\FORM"
#$folder = "C:\Users\Administrator.ALI\Desktop\AS400"
#$folder = "\\nb091002\Temp"
$folder = "I:\"
$filter = "*.txt"
$aswform = "C:\ASWFORM\aswform.exe"
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $folder
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $false
$watcher.NotifyFilter = [System.IO.NotifyFilters]::LastWrite -bor [System.IO.NotifyFilters]::FileName
while($TRUE){
$result = $watcher.WaitForChanged([System.IO.WatcherChangeTypes]::Changed -bor [System.IO.WatcherChangeTypes]::Renamed -bOr [System.IO.WatcherChangeTypes]::Created, 2000);
if($result.TimedOut){
continue;
}
Write-Host $result.Name
#$aswform $folder
}
这似乎适用于本地文件夹或域名共享 我已经尝试将iSeries共享文件夹映射到网络驱动器但它不起作用 (10.10.0.120是AS400)
我很确定它必须用凭证做点什么.... 奇怪的是我可以完全从Windows中访问共享文件夹。
有人对我有任何线索或提示吗?
PS:细节很少,我将通过任务sheduler使用此触发器运行此脚本
powershell -NoExit -WindowStyle Hidden -File "C:\ASWFORM\watcher.ps1"
但首先我需要手动运行脚本时才能使用它!
答案 0 :(得分:0)
除非目标目录是Windows NTFS驱动器,否则我无法使FileSystemWatcher工作。如果我指定映射目录的驱动器号,我得
Exception setting "Path": "The directory name W:\ is invalid."
如果我使用UNC,我会
Exception calling "WaitForChanged" with "2" argument(s): "Error reading the \\\\path.to.my.ibm.i\\root\ directory."
对于Novell文件服务器,如果我使用驱动器号,则会得到目录名无效。如果我对Novell驱动器使用UNC它会运行,但不检测文件系统的任何更改。适用于本地驱动器以及网络上的Windows文件服务器。
答案 1 :(得分:0)
我通过编写一个小的C#控制台应用程序来轮询文件夹来解决问题
而不是使用.Net FileSystemWatcher对象
我手动(instsrv.exe)将此程序作为服务安装,它似乎运行正常。
如果你想要代码,请发给我一个PM,我会确保你得到它。