我是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...")
}
}
}
這似乎是工作好,雖然我仍然不知道爲什麼這種安排應產生不同的結果。爲了學習,任何見解都將不勝感激......
我有一個類似的錯誤(PSv3)的文件夾。我有一種預感,那就是維持鎖定的腳本本身。您的原始腳本將文件存儲在變量中(創建鎖?)。第二個在存入變量之前刪除文件。我很難重新排列我的腳本來證明這一點。 –