Questão Script Powershell não disparando


Eu sou muito novo no powershell, mas estou executando o seguinte script no 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\
}

Então, basicamente, deve-se ouvir um arquivo a ser adicionado na pasta MyFolderB \ Reports e movê-lo para a pasta Destination. Tudo parece perfeito e eu clico no botão "Run Script" no PS ISE e tudo funciona perfeitamente, mas nada acontece. Quando coloco um arquivo na pasta base ele não o move.

Alguma idéia de qual passo está faltando aqui?


1


origem




Respostas:


Você apenas assinou o evento Changed - isso ocorre quando o conteúdo de um arquivo é alterado ou é copiado. Isso não inclui arquivos criados ou movidos.

Pode querer mexer para obter a saída como você quer, mas o seguinte deve funcionar:

$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
    }
}

Isso está se registrando nos eventos Criado e Renomeado, além do evento Alterado, portanto, deve cobrir todas as suas bases. Olhando para $fsw | GM mostra que há adicionalmente Deleted, Disposed e Error eventos, mas para o seu propósito eu não acho que eles são obrigatórios.


0



Apenas uma nota, se você estiver tentando clicar com o botão direito> novo arquivo, ele será movido antes que você tenha a chance de nomeá-lo. - Deadly-Bagel