Стилизация уведомлений InboxStyle

Я добавлю еще один ответ, потому что мой предыдущий пропустил требования.

Требования

  • Напишите функцию WAIT для изменения определенного файла
  • Когда обнаружено изменение, функция выполнит предопределенную команду и вернется к главному скрипту
  • Путь файла и команда передаются функции как параметры

Уже есть ответ с использованием хэшей файлов. Я хочу выполнить свой предыдущий ответ и показать, как это можно выполнить с помощью FileSystemWatcher.

$File = "C:\temp\log.txt"
$Action = 'Write-Output "The watched file was changed"'
$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
30
задан WarrenFaith 30 January 2013 в 10:43
поделиться