在iSeries共享上使用Powershell FileSystemWatcher

时间:2013-09-04 08:57:52

标签: windows powershell security ibm-midrange

我正在使用以下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"

但首先我需要手动运行脚本时才能使用它!

2 个答案:

答案 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,我会确保你得到它。