![](/img/trans.png)
[英]Scheduled task created in Powershell doesn't appear in Task Scheduler
[英]PowerShell FileSystemWatcher doesn't function when Scheduled Task
我有一個 PowerShell 腳本StartWatching.ps1 ,它使用 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}
每當在文件夾中創建 .sql 文件時,腳本都會啟動 .bat 文件planUpdate.bat 。 .bat 文件在特定 SQL 服務器上執行 .sql 文件的內容(數據庫在 .sql 文件中說明),然后將文件移動到子文件夾“舊”:
for %%f in (.\*.sql) do sqlcmd -S <server> -i %%f & move "%%f" .\Old
當我通過右鍵單擊並選擇“使用 PowerShell 運行”啟動 PowerShell 腳本時,它可以完美運行。
我需要讓腳本在從 cmd 執行時工作,然后才能作為計划任務工作。 但是當我從 cmd 啟動它時它不起作用:
powershell -noexit -file C:\ScheduledTasks\PlanUpdates\StartWatching.ps1
它打開一個命令窗口,就好像腳本正在運行一樣,但 FileSystemWatcher 不注冊任何事件
我希望你能提供幫助,因為我一整天都在努力解決這個問題。
這是任務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>
我遇到了同樣的問題。
我不知道為什么會這樣,但嘗試改變
powershell -noexit -file C:\ScheduledTasks\PlanUpdates\StartWatching.ps1
到
powershell -noexit -file ". C:\ScheduledTasks\PlanUpdates\StartWatching.ps1"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.