2013-01-06 108 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

相关问题