1

Я довольно новичок в 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, а затем переместить его в папку назначения. Все выглядит отлично, и я нажимаю кнопку "Run Script" в PS ISE, и все работает отлично, но ничего не происходит. Когда я помещаю файл в базовую папку, он не перемещается.

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

1 ответ1

0

Вы подписаны только на событие 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 , но и для ваших целей я не думаю , что они необходимы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .