Ich habe ein Powershell-Skript StartWatching.ps1, die einen Ordner mit Filesystemwatcher überwacht:Powershell-Filesystemwatcher funktioniert nicht, wenn geplante Tasks
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\ScheduledTasks\PlanUpdates"
$watcher.Filter = "*.sql"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER A EVENT IS DETECTED
$action = {
$path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$(Get-Date), Processed, $path"
Add-content "C:\ScheduledTasks\PlanUpdates\log.txt" -value $logline
cmd.exe /c 'C:\ScheduledTasks\PlanUpdates\planUpdate.bat'
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED + SET CHECK FREQUENCY
$created = Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 1}
Das Skript startet eine .bat-Datei planUpdate.bat wann immer Eine .sql-Datei wird im Ordner erstellt. Die .bat-Datei führt den Inhalt der .sql-Datei auf einem bestimmten SQL Server (Datenbank wird in .sql-Datei angegeben), und dann verschiebt die Datei in Unterordner „Alt“:
for %%f in (.\*.sql) do sqlcmd -S <server> -i %%f & move "%%f" .\Old
Das PowerShell-Skript funktioniert einwandfrei, wenn ich es starte, indem ich mit der rechten Maustaste klicke und "Mit PowerShell ausführen" auswähle.
Ich muss das Skript arbeiten, wenn es von cmd ausgeführt wird, bevor es als geplante Aufgabe arbeiten kann. Aber es funktioniert nicht, wenn ich es von cmd starten mit:
powershell -noexit -file C:\ScheduledTasks\PlanUpdates\StartWatching.ps1
Es öffnet sich ein Eingabefenster, als ob das Skript ausgeführt wird, aber Filesystemwatcher nicht registriert alle Ereignisse
Ich hoffe, Sie können mir helfen, da ich versucht habe, dies den ganzen Tag zu lösen.
Hier ist die Aufgabe xml:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2016-04-25T12:57:08.5588603</Date>
<Author>CRB\IUSR</Author>
</RegistrationInfo>
<Triggers>
<BootTrigger>
<Enabled>true</Enabled>
</BootTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>CBB\IUSR</UserId>
<LogonType>Password</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>Queue</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Command>
<Arguments>-Noexit -File C:\ScheduledTasks\PlanUpdates\StartWatching.ps1</Arguments>
</Exec>
</Actions>
</Task>
Sie müssen Ändern Sie Aufgabendefinition geben. Exportieren Sie es und geben Sie XML hier ein oder stellen Sie den entsprechenden 'schtasks.exe' Befehl bereit. – majkinetor
Ich habe die Aufgabe xml hinzugefügt. – KHH
@KHH Hallo, hast du jemals eine Lösung gefunden? – Bassie