我想持续监控文件夹中的任何新文件...如果有任何新文件,我的脚本应该选择该文件并开始处理它。
谷歌搜索后,我找到了这个解决方案,它对我来说很好..
$folder = 'G:\localexcelfiles\Logistics\logistics automation'
$filter = '*.*' # <-- Takes only files that has xlsx extension
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
IncludeSubdirectories = $false
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$path = $Event.SourceEventArgs.FullPath
$Filename = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
}
为了运行这个脚本,我打开windows powershell ISE并运行以下命令
./scriptname
这会启动我的脚本并为我的文件夹创建一个观察者..如果我试图再次运行该脚本,则会抛出错误,说“订阅者已经存在”
但问题是......如果我关闭PowerShell ISE,我运行脚本......我的脚本也停止了,观察者也被删除了
如何确保此FileSytemWatcher应该24X7运行?
如果我使用任务计划程序运行我的脚本,可以这样做吗?
答案 0 :(得分:1)
使用以下建议的设置从任务计划程序调用PowerShell脚本。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -noprofile
-executionpolicy bypass -file C:\YourPowerShellScript.ps1
注意:我将此命令添加到批处理文件中,然后从计划任务中调用该批处理文件,这是不必要的额外步骤,但我发现从计划任务中以这种方式运行它更干净,更容易任务。
-NoExit
停止关闭窗口,以便它继续在后台运行FileSystemWatcher。
-NoProfile
无需加载用户配置文件也可以运行此脚本,这意味着它效率更高,因为它不会加载配置文件中设置的所有用户脚本。
-Executionpolicy bypass
确保将允许运行脚本。