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.Filter
mit 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:
Dateien werden über ein ERP in einen synchronisierten OneDrive-Ordner auf dem Server geschrieben.
Lassen Sie sich von FileSystemWatcher abholen
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.