我想监视一个文件夹并移动符合特定条件的文件,所以我正在尝试使用FileSystemWatcher。
我有一个将用每个新文件调用的函数:
function ProcessFile()
{
param ([string]$filename)
Write-Host "Processing file '$filename' to $destination"
}
然后我设置了一个FSW:
Write-Host "Watching $source for new files..."
$fsw = New-Object IO.FileSystemWatcher $source, $filter -Property @{IncludeSubdirectories = $false; NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action
{
ProcessFile $Event.SourceEventArgs.FullPath
}
当我从ISE运行它时工作正常,我放入监视文件夹的任何文件都被正确跟踪,但如果我启动PowerShell窗口并使用。\ FileWatch.ps1运行脚本,则没有任何反应。
我看到“正在观看...”的消息,但从未看到“处理...”消息
这是在ISE中有效但不在shell中的完整脚本......
$source = 'D:\Dev\PowerShell\FileWatch\Test\Source'
$filter = '*.*'
$destination = 'D:\Dev\PowerShell\FileWatch\Test\Found\'
function ProcessFile()
{
param ([string]$filename)
Write-Host "Processing file '$filename' to $destination"
}
Write-Host "Watching $source for new files..."
$fsw = New-Object IO.FileSystemWatcher $source, $filter -Property @{IncludeSubdirectories = $false; NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
ProcessFile $Event.SourceEventArgs.FullPath
}
答案 0 :(得分:5)
问题是您的函数ProcessFile
未在powershell会话中加载。
尝试以这种方式加载脚本:
. .\myscript.ps1
这样你的系统中的代码就可以了!
在powershell中阅读Dot Sourcing
脚本。