1

我正在使用以下 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:小细节,我将使用这个触发器通过任务调度器运行这个脚本

powershell -NoExit -WindowStyle Hidden -File "C:\ASWFORM\watcher.ps1"

但首先我需要它在手动运行脚本时工作!

4

2 回答 2

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 文件服务器。

于 2013-09-06T19:45:31.657 回答
0

我通过编写一个小型 C# 控制台应用程序来轮询文件夹
而不是使用 .Net FileSystemWatcher 对象解决了这个问题。
我手动(instsrv.exe)将此程序安装为服务,它似乎运行正常。
如果你想要代码,请给我一个 PM,我会确保你得到它。

于 2013-09-16T12:19:54.210 回答