Mit FileSystemWatcher 2 Dateierweiterungen in einem Verzeichnis abfragen

Mit FileSystemWatcher 2 Dateierweiterungen in einem Verzeichnis abfragen

Ich möchte nur PDF- und RTF-Dateien abrufen, erhalte aber beim Echo der Variable das Ergebnis „true“

$watcher = New-Object System.IO.FileSystemWatcher 
Write-Host "First line of the script, getting the watcher folder " $watcher -ForegroundColor white
$watcher.Path = "C:\Users\Demo Site"
Write-Host "This is the current path " $watcher.Path -ForegroundColor white
$watcher.Filter = "*.rtf" -or "*.pdf" 
Write-Host "Filtering by: " $watcher.Filter -ForegroundColor white
$watcher.IncludeSubdirectories = $true
Write-Host "Including Subdirectories" -ForegroundColor white
$watcher.EnableRaisingEvents = $true  

$action = {
    $path = $Event.SourceEventArgs.FullPath
    $path2 = $path.replace("C:\Users\", "")
    $path2 = $path2.replace("\","/")
    $changeType = $Event.SourceEventArgs.ChangeType
    $logline = "$(Get-Date -Format F) , File was $changeType in:  $path"
    $logFile = "D:\MoveLog.txt"

    Add-content -Path $logFile -value $logline  
    # moves the file captured by the watcher
    Start-Sleep -s 2
    Move-PnPFile -ServerRelativeUrl "/sites/1/$path2" 
        -TargetUrl "/sites/2" -OverwriteIfAlreadyExists 
        -Force -Confirm:$True 
        -ErrorAction SilentlyContinue -ErrorVariable ProcessError
    # added to make sure that the larger files finish uploading
    If ($ProcessError)
    {
        Write-Warning -Message "File not copied!"
        Write-Warning -Message "Waiting 5 seconds and trying again"
        Start-Sleep -s 5
        $logFile = "D:\MoveLog.txt"
        Add-content -Path $logFile -value " $(Get-Date -Format F),  Error while Copying file - Let's try this again!"
        Move-PnPFile -ServerRelativeUrl "/sites/1/$path2" 
            -TargetUrl "/sites/1/$path2" -Force -Confirm:$False 
            -ErrorAction SilentlyContinue -ErrorVariable ProcessError
        If ($ProcessError)
        {
            Write-Warning -Message "File not copied!"
            Write-Warning -Message $error[0].Exception.Message
            $errorLog = " $(Get-Date -Format F),  $error[0].Exception.Message"
            Write-Host  "12. Writing to Log" -ForegroundColor red
            $logFile = "D:\MoveLog.txt"
            Add-content -Path $logFile -value $errorLog
                $to_mail = ""
                $fr_mail = ""
                $subject = "An error has occured when moving in SharePoint"
                $serverDetails = ""
                $port = 
            Send-MailMessage -To $to_mail -From $fr_mail -Subject $subject -Body $errorLog 
                -Priority High -SmtpServer $serverDetails -Port $port
        }
        else
        {
            Write-Host  "n 8. After 1 error, Succesfully moved newly created file to different sharepoint library" -ForegroundColor green
        }
    }
    else
    {
        Write-Host  "n 8. Successfully moved newly created file to different sharepoint library with no errors" -ForegroundColor green
    }
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
Register-ObjectEvent $watcher "Created" -Action $action
# Register-ObjectEvent $watcher "Changed" -Action $action
while($true){
    sleep 5
}

Wie kann ich die Änderung vornehmen $watcher.Filter = "*.rtf" -or "*.pdf", um nur die beiden Dateien abzurufen?

Wenn ich alle Dateierweiterungen abhole, wird auch .tmp abgeholt, aber bis ich etwas damit machen kann, wird es gelöscht und es wird eine FAIL-Meldung ausgegeben.

Ich habe auch versuchtdir .\* -include ('*.xsl', '*.xslt') -recurse

Ich bekomme keinen Fehler, aber wenn ich das $watcher.Filtermit 2 Erweiterungen wiedergebe, bekomme ichtrue

Antwort1

Nach einigen Fehlern habe ich es geschafft, es zum Laufen zu bringen,

Ich habe dieses Skript erstellt, um Dateien zwischen SharePoint-Bibliotheken zu verschieben, damit Dokumente keinen Speicherplatz auf dem Server beanspruchen.

Grundsätzlich:

  1. Dateien werden über ein ERP in einen synchronisierten OneDrive-Ordner auf dem Server geschrieben.

  2. Lassen Sie sich von FileSystemWatcher abholen

  3. Wird in die Archivbibliothek verschoben, wo Benutzer darauf zugreifen können.

Du wirst brauchenSharePointPnP

Connect-PnpOnline -Url https://site.sharepoint.com/sites/ -UseWebLogin
#disconects from Sharepoint
#disconnect-PnpOnline 

$logFile = "D:\SharePointMoveLog.txt"
#for debugging 
start-transcript

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
Write-Host "First line of the script, getting the watcher folder " $watcher -ForegroundColor white
    $watcher.Path = "C:\Users\Demo Site - Staging"
Write-Host "This is the current path " $watcher.Path -ForegroundColor white
    $watcher.Filter = "*.*" 
Write-Host "Filtering by: " $watcher.Filter -ForegroundColor white
    $watcher.IncludeSubdirectories = $true
Write-Host "Including Subdirectories" -ForegroundColor white
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED

$action = 
    {
    $fileName = Split-Path $Event.SourceEventArgs.FullPath -leaf
Write-Host $fileName
        If ($fileName -like '*.pdf')
            {
                 $path = $Event.SourceEventArgs.FullPath
###PDF
                Write-Host "1. New File has been Created in: " $path -ForegroundColor green
                                $path2 = $path.replace("C:\Users\Demo Site - Staging\", "")
                Write-Host "`n 2. Removing the begining of directory from Path: " $path2 -ForegroundColor green
                                $path2 = $path2.replace("\","/")
                Write-Host "`n 3. Replacing \ with / in order to get file to copy to SP: " $path2 -ForegroundColor green
                                $changeType = $Event.SourceEventArgs.ChangeType
                Write-Host "`n 4. File was changed - Type: " $changeType -ForegroundColor green
                                $logline = "$(Get-Date -Format F) , `r`n File was $changeType in: `r`n $path"
                Write-Host "`n 5. Creating a line for the logs: " $logline -ForegroundColor green
                $logFile = "D:\SharePointMoveLog.txt"
                            Add-content -Path $logFile -value $logline  
                Write-Host "`n New line added to the log ${logline}"  -ForegroundColor green
                                #moves the file captured by the watcher
                Write-Host "`n 6. Waiting 2 seconds before moving to ensure file uploads succesfuly" -ForegroundColor green
                                Start-Sleep -s 2
                                Move-PnPFile -ServerRelativeUrl "/sites/test1/Staging/$path2" `
                                        -TargetUrl "/sites/test1/Archive/$path2" -OverwriteIfAlreadyExists `
                                        -Force -Confirm:$True `
                                        -ErrorAction SilentlyContinue -ErrorVariable ProcessError
                                        #added to make sure that the larger files finish uploading
                                    If ($ProcessError)
                                        {
                                            Write-Warning -Message "File not copied!"
                                            Write-Warning -Message "Waiting 5 seconds and trying again"
                                            Start-Sleep -s 5
                $logFile = "D:\SharePointMoveLog.txt"
                                            Add-content -Path $logFile -value "`r`n $(Get-Date -Format F), `r`n Error while Copying file - Let's try this again!"
                                            Move-PnPFile -ServerRelativeUrl "/sites/test1/Staging/$path2" `
                                        -TargetUrl "/sites/test1/Archive/$path2" -Force -Confirm:$False `
                                        -ErrorAction SilentlyContinue -ErrorVariable ProcessError
                                            If ($ProcessError)
                                                {
                                                    Write-Warning -Message "File not copied!"
                                                    Write-Warning -Message $error[0].Exception.Message
                                                    $errorLog = "`r`n $(Get-Date -Format F), `r`n $error[0].Exception.Message"
                                                    Write-Host  "12. Writing to Log" -ForegroundColor red
                $logFile = "D:\SharePointMoveLog.txt"
                                                    Add-content -Path $logFile -value $errorLog
                                                        $to_mail = ""
                                                        $fr_mail = ""
                                                        $subject = "An error has occured when moving in SharePoint Test Site"
                                                        $serverDetails = ""
                                                        $port = 
                                                    Send-MailMessage -To $to_mail -From $fr_mail -Subject $subject -Body $errorLog `
                                                                        -Priority High -SmtpServer $serverDetails -Port $port
                                                }
                                            else
                                                {
                        Write-Host  "`n 7. After 1 error, Succesfully moved newly created file to different sharepoint library" -ForegroundColor green
                                                    $logFile = "D:\SharePointMoveLog.txt"
                                                    Add-content -Path $logFile -value "`r`n $(Get-Date -Format F), `r`n After 1 error, Succesfully moved newly created file to different sharepoint library"
                                                }
                                        }
                                    else
                                        {
                Write-Host  "`n 7. Succesfully moved newly created file to different sharepoint library with no errors" -ForegroundColor green
                                            $logFile = "D:\SharePointMoveLog.txt"
                                            Add-content -Path $logFile -value "`r`n $(Get-Date -Format F), `r`n Succesfully moved newly created file to different sharepoint library with no errors"
                                        }
            }



        elseif ($fileName -like '*.rtf')
            {
###RTF

                $path = $Event.SourceEventArgs.FullPath
                Write-Host "1. New File has been Created in: " $path -ForegroundColor green
                                $path2 = $path.replace("C:\Users\Demo Site - Staging\", "")
                Write-Host "`n 2. Removing the begining of directory from Path: " $path2 -ForegroundColor green
                                $path2 = $path2.replace("\","/")
                Write-Host "`n 3. Replacing \ with / in order to get file to copy to SP: " $path2 -ForegroundColor green
                                $changeType = $Event.SourceEventArgs.ChangeType
                Write-Host "`n 4. File was changed - Type: " $changeType -ForegroundColor green
                                $logline = "$(Get-Date -Format F) , `r`n File was $changeType in: `r`n $path"
                Write-Host "`n 5. Creating a line for the logs: " $logline -ForegroundColor green
                $logFile = "D:\SharePointMoveLog.txt"
                            Add-content -Path $logFile -value $logline  
                Write-Host "`n New line added to the log ${logline}"  -ForegroundColor green
                                #moves the file captured by the watcher
                Write-Host "`n 6. Waiting 2 seconds before moving to ensure file uploads succesfuly" -ForegroundColor green
                                Start-Sleep -s 2
                                Move-PnPFile -ServerRelativeUrl "/sites/test1/Staging/$path2" `
                                        -TargetUrl "/sites/test1/Archive/$path2" -OverwriteIfAlreadyExists `
                                        -Force -Confirm:$True `
                                        -ErrorAction SilentlyContinue -ErrorVariable ProcessError
                                        #added to make sure that the larger files finish uploading
                                    If ($ProcessError)
                                        {
                                            Write-Warning -Message "File not copied!"
                                            Write-Warning -Message "Waiting 5 seconds and trying again"
                                            Start-Sleep -s 5
                $logFile = "D:\ManagementGateway\SharePointLogs\USA\SharePointMoveLog.txt"
                                            Add-content -Path $logFile -value "`r`n $(Get-Date -Format F), `r`n Error while Copying file - Let's try this again!"
                                            Move-PnPFile -ServerRelativeUrl "/sites/test1/Staging/$path2" `
                                        -TargetUrl "/sites/test1/Archive/$path2" -Force -Confirm:$False `
                                        -ErrorAction SilentlyContinue -ErrorVariable ProcessError
                                            If ($ProcessError)
                                                {
                                                    Write-Warning -Message "File not copied!"
                                                    Write-Warning -Message $error[0].Exception.Message
                                                    $errorLog = "`r`n $(Get-Date -Format F), `r`n $error[0].Exception.Message"
                                                    Write-Host  "12. Writing to Log" -ForegroundColor red
                $logFile = "D:\SharePointMoveLog.txt"
                                                    Add-content -Path $logFile -value $errorLog
                                                        $to_mail = ""
                                                        $fr_mail = ""
                                                        $subject = "An error has occured when moving in SharePoint"
                                                        $serverDetails = ""
                                                        $port = 
                                                    Send-MailMessage -To $to_mail -From $fr_mail -Subject $subject -Body $errorLog `
                                                                        -Priority High -SmtpServer $serverDetails -Port $port
                                                }
                                            else
                                                {
                        Write-Host  "`n 7. After 1 error, Succesfully moved newly created file to different sharepoint library" -ForegroundColor green
                                                    $logFile = "D:\SharePointMoveLog.txt"
                                                    Add-content -Path $logFile -value "`r`n $(Get-Date -Format F), `r`n After 1 error, Succesfully moved newly created file to different sharepoint library"
                                                }
                                        }
                                    else
                                        {
                Write-Host  "`n 7. Succesfully moved newly created file to different sharepoint library with no errors" -ForegroundColor green
                                            $logFile = "D:\SharePointMoveLog.txt"
                                            Add-content -Path $logFile -value "`r`n $(Get-Date -Format F), `r`n Succesfully moved newly created file to different sharepoint library with no errors"
                                        }
            }
    }
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
    Register-ObjectEvent $watcher "Created" -Action $action
#    Register-ObjectEvent $watcher "Changed" -Action $action
    while ($true) {sleep 5}

Momentan tritt manchmal ein kleiner Fehler auf. Ich sehe nur, dass er bei RTFs fehlschlägt. Es wird folgender Fehler angezeigt:

Server relative urls must start with SPWeb.ServerRelativeUrl Cannot open "Doc12345.rtf": no such file or folder.

Mir ist nicht klar, warum dieser Fehler auftritt, denn wenn ich die Datei manuell einfüge, funktioniert es.

Ich hatte zuvor einen ähnlichen Fehler, der jedoch durch eine andere Ordnerstruktur in den SharePoint-Bibliotheken verursacht wurde. Das Problem ließ sich lösen, indem ich sichergestellt habe, dass sie genau gleich waren.

verwandte Informationen