9

我正在尝试将大约 10 个文件夹复制到一个远程文件共享上,每个文件夹都包含一个 ~3KB .txt 文件,并有几秒钟的延迟。我正在使用Copy-Item这样的 Powershell:

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()
}

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

System.UnauthorizedAccessException:访问被拒绝 ---> System.ComponentModel.Win32Exception:访问被拒绝在 Microsoft.PowerShell.Commands.FileSystemProvider.NativeDirectoryExists(字符串路径)中的 System.Management.Automation.SessionStateInternal.IsItemContainer(CmdletProvider providerInstance,字符串路径,CmdletProviderContext语境

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

4

3 回答 3

1

这是一篇已有多年历史的帖子,但也许可以从中受益。您不必事先删除。您可以只使用-Force覆盖现有文件。

try
{
    Copy-Item -Path $source -Destination $destination -Recurse -ErrorAction Stop -Force
}
catch
{
    Write-Error $_.Exception.ToString()
}
于 2019-10-10T09:44:54.967 回答
-1

您可能需要尝试以管理员身份运行命令行。

于 2021-07-14T04:50:34.390 回答
-3

Masi,Powershell 复制项功能并不是真正的 IMO。为什么不在这里使用 robocopy/Powershell 混合?

例子:

$source = "C:\temp"

$destination ="\\\RemoteServer\Temp"

robocopy $source $destination /s /mt:8
于 2013-02-11T19:32:18.450 回答