Wpis z mikrobloga

Mam napisany skrypt w Powershellu na Windows Server 2012 R2, który obserwuje dysk udostępniony przez inny serwer i jak wykryje na nim utworzenie pliku nazwa.txt, przenosi go do mojego serwera i wykonuje zapytanie SQL. Wszystko działa ok, ale czasem skrypt się zawiesza :/ potrzebny jest jego restart. Wydaje mi się że tak jakby mój powershell odpytuje zbyt często dysk tamtego serwera i sie zawiesza. Może ktoś podpowiedzieć? Skrypt uruchomiony jest za pomocą Schedulera Windowsowego przy starcie systemu. Nie znam się na Powershellu., czytam i czytam tą dokumentacje MS i nie mogę wpaść na lepszy pomysł. Jest ktoś w stanie podpowiedzieć? Mój skrypt w skrócie:

#Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
Set-ExecutionPolicy Unrestricted -Scope Process -Force
$folder = 'D:\WebApp\Dane_otrzymane\' #folder z ktorego jest kopiowany plik przeslany przez komputer WAGA
$filter = '*.txt'
$destination = 'D:\WebApp\htdocs\mysql' #folder do którego jest kopiowany i zaciagany do naszej bazy danych u nas to

$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
IncludeSubdirectories = $true
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {

#create copy of file
Copy-Item $folder 'D:\WebApp\htdocs\mysql\Kopia' -Recurse -Force

#move file
$path = $Event.SourceEventArgs.Fullpath
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp"
Move-Item $path -Destination $destination -Force -Verbose

#start MySQL Querry
Start-Process -FilePath "D:\Skrypty\LOAD.bat" -Verb runAs -Wait -PassThru;$a.ExitCode
}

$filter2 = '*.jpg'
$destination2 = 'D:\WebApp\htdocs\www\img'
$fsw2 = New-Object IO.FileSystemWatcher $folder, $filter2 -Property @{
IncludeSubdirectories = $true
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$onCreated2 = Register-ObjectEvent $fsw2 Created -SourceIdentifier FileCreated2 -Action {
$path2 = $Event.SourceEventArgs.Fullpath
$name2 = $Event.SourceEventArgs.Name
$changeType2 = $Event.SourceEventArgs.ChangeType
$timeStamp2 = $Event.TimeGenerated
Write-Host "The file '$name2' was $changeType2 at $timeStamp2"
Move-Item $path2 -Destination $destination2 -Force -Verbose
}

#powershell #programowanie
  • 10
@chilling: Nie mam na teraz logów.
Mam taki pomysł może zrobić to w pętli do while? I działać dodatkowo Unregister-Event dla dwóch tych Register-ObjectEvent?
Wtedy będzie występowało odświeżanie Eventu jakby?
@chilling: Jesteś w stanie coś podpowiedzieć? Albo ktoś inny?
Może uruchamiać powershella raz na dobę np o 12 i wtedy byłoby pewniejsze? W taskschedulerze
Jak utworzyłem Register-ObjectEvent na IO.FileSystemWatcher to przenosi mi tlyko pliki które są utworzone podczas jego działania. Dokładnie jeden plik .txt który jest nadpisywany dopóki go nie zabiorę z tamtąd. I w przypadku wyłączenia skryptu na 2 minuty o północy, jeżeli coś powstanie gdy jest nieaktywny to tego