1

機能していない私は、FileSystemWatcherを使用して、フォルダを監視PowerShellスクリプトStartWatching.ps1を持っている: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

を登録しません:しかし、それは私がCMDからそれを起動したときに動作しません。私はこれを一日中解決しようとしているように、あなたを助けることができます。

ここでは、タスクの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

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

を変更しようとしないでください。それをエクスポートし、XMLをここに与えるか、同等の 'schtasks.exe'コマンドを提供してください。 – majkinetor

+0

タスクxmlを追加しました。 – KHH

+0

@KHHこんにちはこれまでの解決策を見つけましたか? – Bassie

答えて

0

は、私は同じ問題に出くわしました。

私はこの作品、なぜ知っているが、あなたはあなたのタスク定義を与える必要があり

powershell -noexit -file ". C:\ScheduledTasks\PlanUpdates\StartWatching.ps1" 
関連する問題