1

У меня есть сценарий PowerShell StartWatching.ps1, который контролирует папку с помощью FileSystemWatcher:PowerShell FileSystemWatcher не работает, если запланированная задача

### 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} 

Скрипт запускает .bat-файл planUpdate.bat всякий раз, когда в папке создается файл .sql. .bat-файл выполняет содержимое .sql-файл на определенном сервере SQL (база данных указываются в .sql-файл), а затем перемещает файл в подпапку «Старый»:

for %%f in (.\*.sql) do sqlcmd -S <server> -i %%f & move "%%f" .\Old 

Скрипт PowerShell работает безупречно, когда я запускаю его, щелкнув правой кнопкой мыши и выбрав «Запустить с помощью PowerShell».

Мне нужно, чтобы сценарий работал при выполнении из cmd, прежде чем он может работать как запланированная задача. Но это не работает, когда я запускаю его из ЦМДА:

powershell -noexit -file C:\ScheduledTasks\PlanUpdates\StartWatching.ps1 

Это открывает командное окно, если скрипт работает, но FileSystemWatcher не регистрирует какое-либо события It opens a command-window as if the script is running, but FileSystemWatcher doesn't register any events

Я надеюсь, вы можете помочь, поскольку я пытался решить этот весь день.

Вот задача 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> 
+0

Вы должны дать вам определение задачи. Экспортируйте его и дайте XML здесь или предоставите эквивалентную команду 'schtasks.exe'. – majkinetor

+0

Я добавил задачу xml. – KHH

+0

@KHH Здравствуйте, вы когда-нибудь находили решение? – Bassie

ответ

0

я наткнулся на такой же проблемой.

Я не знаю, почему это работает, но попробуйте изменить

powershell -noexit -file C:\ScheduledTasks\PlanUpdates\StartWatching.ps1 

в

powershell -noexit -file ". C:\ScheduledTasks\PlanUpdates\StartWatching.ps1"