【发布时间】:2019-06-04 09:48:19
【问题描述】:
我有一个脚本(如下),它监视 .ps1 脚本所在的文件夹。 创建文件时,它会触发一个 .bat 文件来完成一项工作。
最初它会立即运行并关闭。 所以我加了'''Start-Sleep -s 50'''
它有效,但仅在 PowerShell 窗口关闭时触发 .bat 启动。
(因为我不知道文件夹中出现文件需要多长时间,所以这有点没用。
理想情况下,我可以在创建新文件后立即启动 .bat 文件,然后关闭 PowerShell 窗口
$configFilePath = $PSScriptRoot
$filter = '*.*'
$fsw = New-Object IO.FileSystemWatcher $configFilePath, $filter -Property @{IncludeSubdirectories = $true;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
Out-File -FilePath c:\temp\log\Filelog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"
Set-Location "$PSScriptRoot"
Start-Process "$PSScriptRoot\PS_Run.bat"
}
Start-Sleep -s 50
【问题讨论】:
-
docs.microsoft.com/en-us/powershell/module/…: "当订阅的事件被引发时,它会被添加到您会话中的事件队列中。要在事件队列中获取事件,请使用 Get-Event cmdlet。"
-
谢谢,“Get-Event”会取代“Register-ObjectEvent”吗?
-
不,它不会取代它。
标签: powershell filesystemwatcher