[PowerShell] The process cannot access the file because it is being used (...)

crashbandicot

Commander
Registriert
Dez. 2013
Beiträge
2.983
Hi,

ich arbeite gerade an einem PowerShell Script. U.a. werden Verzeichnisse ausgelesen (Get-Childitem) und das Ausgelesene wird in div. Variablen geschrieben. Am Ende des Scripts sollen einzelne Dateien verschoben bzw. gelöscht werden.

Jetzt werden mir für ein paar Dateien Fehlermeldung rausgeschmissen.

PHP:
Move-Item : The process cannot access the file because it is being used by another process.

PHP:
Remove-Item : Cannot remove item C:\***: The process cannot access the file 'C:\***' because it is being used by another process.

Mit ProcExplorer kann ich sehen dass die Datei noch von PowerShell in Nutzung ist, ich weiß nur nicht warum. Es gibt mMn keinen Grund dass PowerShell die Datei länger als nötig festhält. Hat jemand ne schnelle Idee ohne dass ich das gesamte Script hier ausbreiten muss? ;)
 
Hi,

bist du dir den sicher das powershell das in dem Moment blockt? Ggf. mal mit überprüfen:

$lockedFile="Dein File bei Catch"
Get-Process | foreach{$processVar = $_;$_.Modules | foreach{if($_.FileName -eq $lockedFile){$processVar.Name + " PID:" + $processVar.id}}}

Sonst ggf. mit -force es ausprobieren? Da du ja keinen StreamReader öffnest kann es auch nicht daran liegen.....
 
Die Datei ist mit der PowerShell ISE geöffnet - das sagt zumindest der ProcExplorer. Teste morgen noch etwas und nehme auf deine Idee mal mit auf. Melde mich wieder. :)
Ergänzung ()

So, habe deine Idee mal durchgespielt. Bringt leider keine Ausgabe. Über das Script kann ich die Datei jedoch weiterhin nicht löschen.

Remove-Item : Cannot remove item \\share\zugross.jpg: The process cannot access the file '\\share\zugross.jpg' because it is being used by another process.

ProcExplorer
asd.png

Die Datei liegt jetzt auf einem Netzwerkshare. Aber auch lokal funktioniert es nicht (gestern versucht).
Ergänzung ()

Kann es sein dass die Datei durch ein 'New-Object' von PS festgehalten wird?

Ein Part des Scriptes
PHP:
Function Get-Image
{
    begin{        
         [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") |Out-Null 
    } 
     process{
          $fi=[System.IO.FileInfo]$_           
          if( $fi.Exists){
               $img = [System.Drawing.Image]::FromFile($_)
               $img.Clone()
               $img.Dispose()       
          }else{
               Write-Host "File not found: $_" -fore yellow       
          }   
     }    
    end{}
}
PHP:
$image = $bild.FullName | Get-Image
New-Object PSObject -Property @{ 
File = $bild
Fullname = $bild.FullName
Height = $image.Height
Width = $image.Width
}
Source: https://social.technet.microsoft.co...ages-in-a-folder-using-power-shell?forum=ITCG
 
Zurück
Oben