2013-01-06 111 views
8

我想每個包含〜3KB .txt文件約10個文件夾複製到一些秒的延遲的遠程文件共享。我使用Powershells Copy-Item這樣的:UnauthorizedAccessException使用複製,項目上的遠程文件服務器

try 
{ 
    Copy-Item -Path $source -Destination $destination -Recurse -ErrorAction Stop 
} 
catch 
{ 
    Write-Error $_.Exception.ToString() 
} 

運行該腳本的用戶已讀,寫和文件服務器共享和本地源執行權限。

在第一次運行時,目標文件夾爲空。一切正常。 在第二次運行中已經存在的文件和文件夾。所以在運行代碼之前,上述我第一次運行使用Test-Path並且如果該文件夾存在刪除使用Remove-Item這樣的檢查:

try 
{ 
    if(Test-Path -Path $path -ErrorAction Stop) 
    { 
     Remove-Item -Recurse -Path $path -ErrorAction Stop 
    } 
} 
catch 
{ 
    Write-Error $_.Exception.ToString() 
} 

沒有其他人編輯這些文件。然而,運行腳本dozent時候,曾經在一段時間,是有原因的,我不明白,我突然得到UnauthorizedAccessException錯誤,對一些在複製過程中的文件夾。確切的錯誤是:

System.UnauthorizedAccessException的:拒絕訪問 ---> System.ComponentModel.Win32Exception:訪問被拒絕在Microsoft.PowerShell.Commands.FileSystemProvider.NativeDirectoryExists (字符串 路徑) 系統。 Management.Automation.SessionStateInternal.IsItemContainer(CmdletProvider providerInstance,絃樂路徑,CmdletProviderContext方面

請注意:我發現了這些錯誤的舊文件刪除遙控器上的AFTER文件服務器已成功完成。

回答

-3

罵死,Powershell的複製項功能是不是真的那麼偉大海事組織。爲什麼不在這裏使用robocopy/Powershell混合?

例子:

$source = "C:\temp" 

$destination ="\\\RemoteServer\Temp" 

robocopy $source $destination /s /mt:8 
+2

很好,只是因爲它不是一個好的設計。您將非面向對象的代碼與簡單的文本生成命令混合在一起。這種類似的錯誤處理有許多缺點。使用cmdlet將返回對象,然後我可以稍後使用它。這就像在* test-connection *時使用* ping *。 – masi

相關問題