带PowerShell的Robocopy:错误3(0x00000003)系统找不到指定的路径

带PowerShell的Robocopy:错误3(0x00000003)系统找不到指定的路径,powershell,powershell-4.0,robocopy,Powershell,Powershell 4.0,Robocopy,我有一个用于备份的PowerShell脚本,我在Windows 2003 Server上使用了很长时间,现在在Windows Server 2012R2上遇到了问题。我尝试执行时收到以下消息: 2019/09/18 08:40:25创建目标目录Z:\BACKUP\D\时出现错误3(0x00000003)。系统找不到指定的路径 我以管理员或具有最高权限的计划任务的身份在PowerShell ISE中运行PowerShell脚本。脚本正在具有源驱动器的域(DOMAIN1)上的服务器上执行,而目标位于

我有一个用于备份的PowerShell脚本,我在Windows 2003 Server上使用了很长时间,现在在Windows Server 2012R2上遇到了问题。我尝试执行时收到以下消息:

2019/09/18 08:40:25创建目标目录Z:\BACKUP\D\时出现错误3(0x00000003)。系统找不到指定的路径

我以管理员或具有最高权限的计划任务的身份在PowerShell ISE中运行PowerShell脚本。脚本正在具有源驱动器的域(DOMAIN1)上的服务器上执行,而目标位于另一个域(DOMAIN2)上的另一台服务器上。域之间没有信任

当我使用
net use
命令时,它可以与PowerShell ISE一起正常工作,但不能通过计划任务。当我使用
New PSDrive
时,它在任何地方都不工作。我插入
GCI
语句以确保驱动器已连接,并列出目标目录的内容

我简化了调试代码:

$strNetDrvPath   = '\\server.domain2.local\BkpDrv'
$strNetDrvUser   = 'DOMAIN2\BkpUser'
$strNetDrvPwd    = 'ABCD1234'

#net use Z: $strNetDrvPath /user:$strNetDrvUser $strNetDrvPwd
$objCredential = New-Object System.Management.Automation.PsCredential -ArgumentList $strNetDrvUser, ($strNetDrvPwd|ConvertTo-SecureString -AsPlainText -Force)
New-PSDrive –Name Z –PSProvider FileSystem –Root $strNetDrvPath -Credential $objCredential

gci Z: -Name

$strCmd = "robocopy D:\. Z:\BACKUP\D /B /MIR /NP /R:0 /LOG:D:\RC_Log.txt"
Invoke-Expression $strCmd
#cmd /c $strCmd

#net use Z: /delete /y
Remove-PSDrive Z

我用
netuse
命令留下了一条注释,以显示我的尝试。有什么问题吗?是否有其他方法可以使用?

当您想使用
新建PSDrive
映射Windows网络驱动器时,需要添加参数
-Persist
。从:

-持续

指示此cmdlet创建Windows映射的网络驱动器。映射的网络驱动器保存在本地计算机上的Windows中。它们是持久的,不是特定于会话的,可以在文件资源管理器和其他工具中查看和管理

由于您提供了明确的凭证
net use
,因此从计划任务开始,它应该可以正常工作。如果没有,则会出现其他问题(用于调试计划任务)

另外,
robocopy
可以直接从PowerShell运行

$params = '/B', '/MIR', '/NP', '/R:0', '/LOG:D:\RC_Log.txt'
& robocopy D:\. Z:\BACKUP\D @params

如果要使用
New PSDrive
映射Windows网络驱动器,则需要添加参数
-Persist
。从:

-持续

指示此cmdlet创建Windows映射的网络驱动器。映射的网络驱动器保存在本地计算机上的Windows中。它们是持久的,不是特定于会话的,可以在文件资源管理器和其他工具中查看和管理

由于您提供了明确的凭证
net use
,因此从计划任务开始,它应该可以正常工作。如果没有,则会出现其他问题(用于调试计划任务)

另外,
robocopy
可以直接从PowerShell运行

$params = '/B', '/MIR', '/NP', '/R:0', '/LOG:D:\RC_Log.txt'
& robocopy D:\. Z:\BACKUP\D @params

非常感谢。它在任何情况下都有效。我没有使用NET USE测试它,但可能我们必须使用/persistent:yes才能使它工作。我发现没有必要指定
-persistent
。相反,请在Robocopy中指定原始UNC目标路径。再见,谢谢!它在任何情况下都有效。我没有使用NET USE测试它,但可能我们必须使用/persistent:yes才能使它工作。我发现没有必要指定
-persistent
。相反,请在Robocopy中指定原始UNC目标路径。看见