我已经成功创建了一个FileSystemWatcher(C#对象)。我在PowerShell会话中运行下面的代码。
# Filters
$filter = "somefile.txt"
$flagfolder = "C:\path\to\some\folder"
# Instantiate Watcher
$Watcher = New-Object IO.FileSystemWatcher $flagfolder, $filter -Property @{
IncludeSubdirectories = $false
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
# EVENT: $filter is created
$onCreated = Register-ObjectEvent $Watcher Created -SourceIdentifier FileCreated -Action {
$path = $Event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp"
Write-Host $path
someglobalfunction $param
}
运行上面的代码后,如果我执行Get-Job
它会报告FileWatcher:
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
74 FileCreated NotStarted False
但是,如果我打开一个新的PowerShell会话并执行Get-Job
它就不会报告任何内容......
我需要在任何人或任何创建文件$pathfolder\somefile.txt
时触发...但目前只有在定义{{1创建文件。
答案 0 :(得分:1)
你需要两件事来完成这项工作。
New-Object System.IO.FileSystemWatcher
Register-ObjectEvent
我认为这是使FileSystemWatcher工作所需的最少代码。
设置FileSystemWatcher对象
$w = New-Object System.IO.FileSystemWatcher
$w.Path = $PWD
$PWD
(当前工作目录)是一个自动变量。
订阅"创建"事件(为简单起见)
Register-ObjectEvent -InputObject $w -EventName Created -SourceIdentifier "File.Created" `
-Action {Write-Host -Object "A file was created" -ForegroundColor Green -BackgroundColor Black}
现在,如果您在当前工作目录中创建一个文件,PowerShell将编写&#34;文件已创建&#34;到屏幕。在当前会话中,在当前会话中,在不同的PowerShell会话中,通过文件资源管理器,使用cmd.exe创建如何并不重要。<无关紧要。< / p>
This answer有更详细的代码。但这里的简化代码直接基于它。