Показать сообщение отдельно

  #14  
Старый 15.03.2010, 03:36
SpangeBoB
Познавший АНТИЧАТ
Регистрация: 12.07.2008
Сообщений: 1,705
С нами: 9384806

Репутация: 1350


По умолчанию

Написал для себя скрипт ,который мониторит папку на события Changed, Created, Deleted и Renamed . Для этого воспользовался классом FileSystemWatcher - класс . Есть одна неприятность если явно не указано свойство SynchronizingObject ,то Powershell завершает свою работу.Поэтому в скрипт пришлось добавить объект Form(спасибо /\/\o\/\/ ).Для остановки скрипта добавим в область уведомления ярлык с единственным возможным действием Exit.

Цитата:
Когда события Changed, Created, Deleted и Renamed обрабатываются компонентом Windows Forms, таким как Button, доступ к данному компоненту через системную группу потоков может не работать или же может возникнуть исключение. Этого можно избежать, задав в свойстве SynchronizingObject компонент Windows Forms, вызывающий методы, обрабатывающие события Changed, Created, Deleted и Renamed, вызванные в том же потоке, в котором был создан данный компонент.
Цитата:
param ([string]$folder,
$Icon = "$env:SystemRoot\system32\appverif.ico"
)

$form = new-object System.Windows.Forms.Form
$ni = new-object System.Windows.Forms.NotifyIcon
$niMenu = new-object System.Windows.Forms.ContextMenu
$watcher = New-Object System.IO.FileSystemWatcher $folder

$ni.Icon = New-object System.Drawing.Icon($Icon)
$ni.ContextMenu = $niMenu

$miExit = new-object System.Windows.Forms.MenuItem
$miExit.Text = "Exit"
$miExit.Add_Click({ $ni.Visible = $False
$form.close() })

$niMenu.MenuItems.AddRange(@($miExit))

$watcher.IncludeSubDirectories = $true
$watcher.SynchronizingObject = $form
$form.ShowInTaskbar = $False
$form.WindowState = "minimized"


$watcher.NotifyFilter = [System.IO.NotifyFilters]::LastAccess , [System.IO.NotifyFilters]::LastWrite, [System.IO.NotifyFilters]::FileName,[System.IO.NotifyFilters]:irectoryName
$watcher.add_Changed({
Write-Host "$((get-date).ToShortTimeString()) : $($_.FullPath) $($_.ChangeType)"
})
$watcher.add_Created(
{Write-Host "$((get-date).ToShortTimeString()) : $($_.FullPath) $($_.ChangeType)"
})
$watcher.add_Deleted({
Write-Host "$((get-date).ToShortTimeString()) : $($_.FullPath) $($_.ChangeType)"
})
$watcher.add_Renamed({
Write-Host "$((get-date).ToShortTimeString()) : $($_.OldFullPath) renamed to $($_.FullPath) $($_.ChangeType)"
})

$watcher.EnableRaisingEvents = $true
$NI.Visible = $True
$form.showdialog()
Вывод:
2:36 : F:\1\3.txt Deleted
2:36 : F:\1\New Text Document.txt Deleted
2:36 : F:\1\2.txt Deleted
2:36 : F:\1\2 (2).txt Deleted

Последний раз редактировалось SpangeBoB; 15.03.2010 в 03:50..
 
Ответить с цитированием