Сценарий Powershell не работает после включения функции журнала - PullRequest
0 голосов
/ 10 мая 2018

Ниже приведен мой скрипт powershell, который используется для перемещения файлов из одной папки в другую:

    $folder = 'C:\test'
    $filter = '*.*'     
    $directory_source = $directory_source = 'C:\test1\*'                        # <-- set this according to your requirements
    $directory_target_cop = 'C:\Folder1'
    $directory_target_prop = 'C:\Folder2'
    $directory_target_dom = 'C:\Folder3'
    $LogTime = Get-Date -Format "MM-dd-yyyy"
    $dtNow =  Get-Date -Format "MM-dd-yyyy_hh-mm-ss"
    $script:loggingpathpreference = 'C:\PSLogs\'+$LogTime+".log"

    Set-PSBreakpoint -Variable Now -Mode Read -Action {Set-Variable Now (get-date -uformat '%Y\%m\%d %H:%M:%S') -Option ReadOnly, AllScope -Scope Global -Force -ErrorAction SilentlyContinue} -ErrorAction SilentlyContinue

    $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
     IncludeSubdirectories = $true              # <-- set this according to your requirements
     NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
    }
Function Write-Log {
        [cmdletbinding()]
        Param(
            [Parameter(Position = 0, ValueFromPipeline = $true)]
            [ValidateNotNull()]
            $Message,

            [switch]$Warning
        )
        Process{
            if($Message -isnot [string]){
                $Message = $Message | Out-String
            }
            Write-Verbose $message
            Add-Content -Path $script:LoggingPathPreference -Value "`n$($dtNow) : $($Message)"
            if($Warning){
                Write-Warning $Message
            }
        }
    }

    $onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
     $path = $Event.SourceEventArgs.FullPath
     $name = $Event.SourceEventArgs.Name
     $changeType = $Event.SourceEventArgs.ChangeType
     $timeStamp = $Event.TimeGenerated
     Write-Log "The file '$name' was $changeType at $timeStamp"

     try{
        $files = $(ls $directory_source)
        foreach ($file in $files) {
            if ( $(gc $file | Select-String "PROP" -Quiet) ) {
                mv -Path $file.Fullname -Destination $directory_target_prop
            } elseif ( $(gc $file | Select-String "COP" -Quiet) ) {
                mv -Path $file.Fullname -Destination $directory_target_cop 
            } elseif ( $(gc $file | Select-String "DOM" -Quiet) ) {
                mv -Path $file.Fullname -Destination $directory_target_dom 
            }
        }
     }catch{
        $ErrorMessage = $_.Exception.Message
        Write-Log $ErrorMessage 
        }
    }

Теперь, если я удаляю свою функцию записи-записи, вышеприведенный скрипт перемещает файлы из тестовой папки в соответствующие три папки, но когда я включаю функцию записи-записи, приведенный выше код не может перемещать файлы.

Приведенный выше код выполняет регистрацию, но не перемещает файлы.

Что я здесь не так делаю?

Ждем ваших решений и заранее благодарим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...