使用远程文件服务器上的Copy-Item的UnauthorizedAccessException

mas*_*asi 9 powershell powershell-3.0

我正在尝试将大约10个文件夹复制到远程文件共享上,每个文件夹包含一个〜3KB .txt文件,延迟时间为几秒.我正在使用Copy-Item像这样的Powershells :

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

运行脚本的用户对文件服务器共享和本地源具有读,写和执行权限.

首次运行时,目标文件夹为空.一切正常.第二次运行时,文件和文件夹已存在.因此,在运行上面的代码之前,我首先运行检查Test-Path,如果文件夹存在使用Remove-Item这样的删除:

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

没有其他人编辑这些文件.但是,当运行脚本时,偶尔会出现一些我不明白的原因,我在复制时突然收到某些文件夹的UnauthorizedAccessException错误.确切的错误是:

System.UnauthorizedAccessException:access denied ---> System.ComponentModel.Win32Exception:System.Management.Automation.SessionStateInternal.IsItemContainer(CmdletProvider providerInstance,String path,CmdletProviderContext)中的Microsoft.PowerShell.Commands.FileSystemProvider.NativeDirectoryExists(String path)中的访问被拒绝上下文

请注意:在远程文件服务器上的旧文件删除成功完成后,我收到了这些错误.

小智 -3

Masi,Powershell 复制项目功能在我看来并不是那么好。为什么不在这里使用 robocopy/Powershell 混合呢?

例子:

$source = "C:\temp"

$destination ="\\\RemoteServer\Temp"

robocopy $source $destination /s /mt:8
Run Code Online (Sandbox Code Playgroud)

  • 好吧,只是因为这不是一个好的设计。您将非面向对象的代码与简单的文本生成命令混合在一起。这有很多缺点,比如错误处理。使用 cmdlet 将返回我稍后可以使用的对象。这就像在获得*测试连接*时使用*ping*。 (2认同)