Как зарегистрировать событие в Powershell, чтобы оно оставалось постоянным? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть скрипт ниже, который просто должен отслеживать папку, и когда создается файл .xlsx, он должен преобразовать его в файл .csv в другой папке.Он работает с первым созданным файлом, но не работает со следующим файлом, создаваемым в папке.Как я могу получить событие, чтобы остаться постоянным?

$ErrorActionPreference = 'Stop'
$folder = 'c:\Users\exgtcl\hotfolder'
$destination = 'c:\Users\exgtcl\targetfolder'
$filter = '*.xlsx'                

Function Convert-Csv
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true)][String]$FullPath
    )
    $ExcelFiles = Get-ChildItem $FullPath
    Write-Host "Working on file '$FullPath' "
    $excelApp = New-Object -ComObject Excel.Application
    $excelApp.DisplayAlerts = $false
    $excelApp.Visible = $false
    $workbook = $excelApp.Workbooks.Open($ExcelFiles.FullName)
    $newName = "$destination\output.csv"
    $workbook.SaveAs($newName, [Microsoft.Office.Interop.Excel.XlFileFormat]::xlCSV)

    $workbook.Close()
    # Release Excel Com Object resource
    $excelApp.Workbooks.Close()
    Start-Sleep 2
    $excelApp.Quit()
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excelApp) | Out-Null
}

$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
 IncludeSubdirectories = $false              
 NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}

$action = {
 $path = $Event.SourceEventArgs.FullPath
 $name = $Event.SourceEventArgs.Name
 $changeType = $Event.SourceEventArgs.ChangeType
 $timeStamp = $Event.TimeGenerated
 Convert-Csv -FullPath $path
 Start-Sleep 3
 Write-Host "moving files"
 Move-Item $path -Destination $destination -Force -Verbose 
}

$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action $action 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...