Скрипт Powershell не стреляет

539
Matt

Я довольно новичок в powershell, но я выполняю следующий скрипт в PS ISE:

$source = "E:\MEX_Websites\Customer_Hosting\MyFolderB\Reports\" $filter = "*.*"  $fsw = New-Object System.IO.FileSystemWatcher $source, $filter -Property @{ IncludeSubDirectories=$false NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite' }  $onCreated = Register-ObjectEvent $fsw Changed -SourceIdentifier MyFolderBReports -Action { $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 E:\MEX_Websites\Customer_Hosting\MyFolderB\Reports\*.* -Destination M:\MyFolderB\Reports\ } 

Таким образом, в основном он должен прослушать файл, который будет добавлен в папку MyFolderB \ Reports, а затем переместить его в папку Destination. Все выглядит отлично, и я нажимаю кнопку «Run Script» в PS ISE, и все работает отлично, но ничего не происходит. Когда я помещаю файл в базовую папку, он не перемещается.

Есть идеи, какой шаг мне здесь не хватает?

1

1 ответ на вопрос

0
Deadly-Bagel

Вы подписаны только на событие Changed - это происходит, когда содержимое файла изменяется или копируется. Это не включает файлы, которые созданы или перемещены.

Может потребоваться повозиться, чтобы получить вывод так, как вы хотите, но следующее должно работать:

$source = "C:\Ops" $filter = "*.*"  $fsw = New-Object System.IO.FileSystemWatcher $source, $filter -Property @{ IncludeSubDirectories=$false NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite' }  $onCreated = @()  @( "Changed", "Created", "Renamed" ) | Foreach-Object { $onCreated += Register-ObjectEvent $fsw -EventName $_ -SourceIdentifier "MyFolderBReports_$_" -Action { $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 C:\Ops\*.* -Destination C:\Ops\Test } } 

Это регистрация в событиях Created и Renamed в дополнение к событию Changed, поэтому должна охватывать все ваши базы. Глядя на $fsw | GMшоу есть дополнительно Deleted, Disposedи Errorсобытие, но и для ваших целей я не думаю, что они необходимы.

Просто примечание: если вы пытаетесь щелкнуть правой кнопкой мыши> новый файл, он переместит его, прежде чем вы получите возможность назвать его Deadly-Bagel 8 лет назад 0

Похожие вопросы