Write-Verbose 'Temp Ordner erstellen ...' -Verbose
$tempDir = New-Item -Path 'C:\temp' -ItemType Directory -Force -Verbose
Write-Verbose ('-' * 75) -Verbose
Write-Verbose 'Nicht existierenden Temp-Datei-Pfad erzeugen ...' -Verbose
do {
} while (Test-Path -LiteralPath ($tempFilePath = Join-Path -Path $tempDir -ChildPath ([System.IO.Path]::GetRandomFileName())))
Write-Verbose ('Temp Datei: "{0}"' -f $tempFilePath) -Verbose
Write-Verbose ('-' * 75) -Verbose
Write-Verbose 'Temp-Datei exklusiv öffnen und andere Prozesse oder Datei-Operationen keinen Zugriff gewähren ...' -Verbose
$fileStreamWithFileHandle = [System.IO.File]::Open($tempFilePath, [System.IO.FileMode]::OpenOrCreate, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)
Write-Verbose ('-' * 75) -Verbose
Write-Verbose 'Mit unserem File Handle ''This is a test!'' in die Datei schreiben ...' -Verbose
$textBytes = [System.Text.UTF8Encoding]::new().GetBytes('This is a test!')
$fileStreamWithFileHandle.Write($textBytes, 0, $textBytes.Count)
Write-Verbose ('-' * 75) -Verbose
Write-Verbose 'Erster Versuch die Datei zu kopieren, ohne unseren File Stream mit File Handle von oben zu verwenden. ...' -Verbose
Write-Verbose ' (Simuliert auch den Zugriff eines anderen Prozesses)' -Verbose
do {
} while (Test-Path -LiteralPath ($destinationFilePath = Join-Path -Path $tempDir -ChildPath ([System.IO.Path]::GetRandomFileName())))
Copy-Item -LiteralPath $tempFilePath -Destination $destinationFilePath -Verbose
Write-Verbose ('-' * 75) -Verbose
Write-Verbose 'File Stream + File handle schließen ...' -Verbose
Write-Verbose ' (Dadurch ist die Datei wieder für andere Prozess les- und beschreibbar)' -Verbose
$fileStreamWithFileHandle.Dispose()
Write-Verbose ('-' * 75) -Verbose
Write-Verbose 'Zweiter Versuch die Datei zu kopieren, ohne unseren File Handle von oben zu verwenden. ...' -Verbose
Copy-Item -LiteralPath $tempFilePath -Destination $destinationFilePath -Verbose