我需要一些PowerShell脚本帮助。我有一个文件watcher.ps1,它监视sms.txt中的文件更改并触发moma.ps1。所以这就是我现在所拥有的:
$File = "C:\Users\Ray\Desktop\sms.txt"
$Action = 'C:\Users\Ray\Desktop\moma.ps1'
$global:FileChanged = $false
function Wait-FileChange {
param(
[string]$File,
[string]$Action
)
$FilePath = Split-Path $File -Parent
$FileName = Split-Path $File -Leaf
$ScriptBlock = [scriptblock]::Create($Action)
$Watcher = New-Object IO.FileSystemWatcher $FilePath, $FileName -Property @{
IncludeSubdirectories = $false
EnableRaisingEvents = $true
}
$onChange = Register-ObjectEvent $Watcher Changed -Action {$global:FileChanged = $true}
while ($global:FileChanged -eq $false){
Start-Sleep -Milliseconds 100
}
& $ScriptBlock
Unregister-Event -SubscriptionId $onChange.Id
}
Wait-FileChange -File $File -Action $Action
问题是文件需要每15秒左右持续监控一次。使用此脚本,它会在文件发生更改后结束监视。 此外,我更喜欢这个脚本作为服务运行,并在Windows运行时自动启动。 有人可以指导我正确的方向吗?
新的。干杯
答案 0 :(得分:1)
while($True)
{
$global:FileChanged = $false
Wait-FileChange -File $File -Action $Action
}
这对我有用。可能有一种“更好”的方式。
您还需要确保$ Action引用的.ps1脚本以return
要使其一直运行,请创建一个在启动时运行的计划任务。