2014-04-08 94 views
3

我是PowerShell的新手。刪除項目錯誤:無法刪除項目[項目路徑和名稱]:訪問路徑'[項目路徑和名稱]'被拒絕

我試圖自動將dll組件從源服務器上的文件夾部署到目標服務器上的多個文件夾。這似乎應該足夠簡單:將源服務器上的源(部署)文件夾中的組件複製到目標服務器上的文件夾,驗證副本並最終從源服務器上的部署文件夾中刪除組件。

將文件從源服務器複製到目標服務器的過程毫無問題。 但是,當腳本繼續從源服務器刪除組件時,我會間歇性地遇到以下錯誤: 「Remove-Item error:Can not remove item [item path & name]:access to the path'[item路徑&名稱]'被拒絕。「

我已經運行了這個腳本幾次;有時它完成沒有問題,有時會出現錯誤。對於每個要刪除的文件都不會發生此錯誤,並且每次出現時似乎都會發生在不同的組件上。

下面是我寫的刪除組件和驗證缺失的功能:

function DeleteSourceFiles($srcPath) { 
    # Announce delete 
    OutputToHostAndLog ("Files will be removed from "+$srcPath+"...") 
    OutputToHostAndLog "Removing files..." 

    # Deletes all file items (i.e. all except folders) in source folder 
    $filesToDelete=Get-ChildItem $srcPath | Where-Object {$_ -is [IO.FileInfo]} 
    ForEach($item in $filesToDelete) { 
     Remove-Item $srcPath\$item -force 

     # Verify deletions  
     if(Test-Path($srcPath+"\"+$item)) { 
      OutputToHostAndLog ("Delete failed: "+$item.Name)   
      $fail++ 
     } 
     else { 
      OutputToHostAndLog ($item.Name+" deleted successfully...") 
     } 
    } 
} 

使用與刪除,項目cmdlet的強制參數並不似乎對這個問題有什麼影響。無論如何,這些文件(同樣,每個失敗的不同文件)看起來並不是isReadOnly。

同樣,以管理員身份運行PowerShell似乎沒有效果,但源文件夾的Get-Acl表明管理員應該擁有FullControl。

這是我失蹤的權限問題嗎? 任何建議非常讚賞...

編輯: 我更新了這樣我的腳本:

function DeleteSourceFiles($srcPath) { 
    # Announce delete 
    OutputToHostAndLog ("Files will be removed from "+$srcPath+"...") 
    OutputToHostAndLog "Removing files..." 
    OutputToHostAndLog $gap 

    # Delete all file items (i.e. all except folders) in source folder 
    $filesToDelete=Get-ChildItem $srcPath | Where-Object {$_ -is [IO.FileInfo]} | ForEach { 
     Remove-Item $_.FullName -Force 

     # Verify deletions 
     if(Test-Path($srcPath+"\"+$_)) { 
      OutputToHostAndLog ("Delete failed: "+$_.Name)   
      $fail++ 
     } 
     else { 
      OutputToHostAndLog ($_.Name+" deleted successfully...") 
     } 
    } 
} 

這似乎是工作好,雖然我仍然不知道爲什麼這種安排應產生不同的結果。爲了學習,任何見解都將不勝感激......

+0

我有一個類似的錯誤(PSv3)的文件夾。我有一種預感,那就是維持鎖定的腳本本身。您的原始腳本將文件存儲在變量中(創建鎖?)。第二個在存入變量之前刪除文件。我很難重新排列我的腳本來證明這一點。 –

回答

7

間歇性訪問被拒絕錯誤可能表明您嘗試刪除的一個或多個文件已被另一個應用程序鎖定。當您嘗試清理日誌目錄時,這是一個非常常見的問題。

我建議要做的唯一事情就是等待帶鎖的應用程序釋放文件。

+0

我曾經考慮過有問題的文件可能被另一個應用程序使用的可能性,但儘管這些文件是實際應用程序.dll的副本,但我在每臺服務器上創建了用於腳本測試的測試文件夾。這不意味着這些副本不能被使用嗎? –

+0

這肯定意味着它們沒有被使用。你是說你的腳本更新版本沒有任何問題嗎? –

+1

到目前爲止,傑森如此出色。似乎很奇怪,只要語法結構略有變化,當原始文件呈現間歇性錯誤時,腳本就會始終如一地運行。 –

1

我固定通過設置安全權限的用戶這個問題有「修改」和「完全控制」增加了對我試圖刪除