Oto przykład znalazłem w moich rozszerzonych. Mam nadzieję, że jest trochę bardziej wszechstronny.
Najpierw należy utworzyć obserwatora systemu plików, a następnie zasubskrybować wydarzenie, które generuje obserwator. W tym przykładzie nasłuchuje zdarzeń "Utwórz", ale można go łatwo zmodyfikować, aby uważać na "Zmień".
$folder = "C:\Users\LOCAL_~1\AppData\Local\Temp\3"
$filter = "*.LOG"
$Watcher = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
IncludeSubdirectories = $false
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$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
#Move-Item $path -Destination $destination -Force -Verbose
}
postaram się ograniczyć to w dół do Twoich potrzeb.
Jeśli uruchomisz to jako część skryptu "profile.ps1", powinieneś przeczytać The Power of Profiles, który wyjaśnia różne dostępne skrypty profilów i wiele więcej.
Należy również zrozumieć, że oczekiwanie na zmianę w folderze nie może być uruchamiane jako funkcja w skrypcie. Skrypt profilu musi zostać zakończony, aby rozpocząć sesję PowerShell. Możesz jednak użyć funkcji do zarejestrowania wydarzenia.
Co to jest, rejestruje fragment kodu, który zostanie wykonany za każdym razem, gdy zostanie wywołane zdarzenie. Ten kod zostanie wykonany w kontekście bieżącego hosta PowerShell (lub powłoki), podczas gdy sesja pozostanie otwarta. Może wchodzić w interakcje z sesją hosta, ale nie ma wiedzy o oryginalnym skrypcie, który zarejestrował kod. Oryginalny skrypt prawdopodobnie już się zakończył, do czasu wyzwolenia kodu.
Oto kod:
Function Register-Watcher {
param ($folder)
$filter = "*.*" #all files
$watcher = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
IncludeSubdirectories = $false
EnableRaisingEvents = $true
}
$changeAction = [scriptblock]::Create('
# This is the code which will be executed every time a file change is detected
$path = $Event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file $name was $changeType at $timeStamp"
')
Register-ObjectEvent $Watcher "Changed" -Action $changeAction
}
Register-Watcher "c:\temp"
Po uruchomieniu tego kodu, zmienić dowolny plik w katalogu „C: \ temp” katalogu (lub dowolny inny katalog określić). Zobaczysz zdarzenie wyzwalające wykonanie Twojego kodu.
Dostępne są również ważne zdarzenia FileSystemWatcher, które można zarejestrować: "Zmieniono", "Utworzono", "Usunięto" i "Zmieniono nazwę".
Rozszerzyłem moją odpowiedź o rozwiązanie specyficzne dla Twoich wymagań. Czy tego właśnie szukasz? –