如何在不同域的服务器之间传输文件?
i.e
PS C:\Users\Desktop> Import-Module bitstransfer
PS C:\Users\Desktop> $c=get-credential
PS C:\Users\Desktop> start-bitstransfer -Credential $c -source \\server\c$\test.txt -destination .
输出是:
Start-BitsTransfer : Cannot find path '\\server\c$\test.txt' because it does not exist.
我有权探索该服务器,但我不能使用 BitsTransfer。
它仅在我将\server\c$ 安装为共享(即使用“net use”命令)时才有效,但我想避免这种情况。
最佳答案
根据我的发现,我认为问题在于 BitsTransfer 的工作方式。它仅以交互方式工作(即作为登录和事件用户)。来自微软的文档:
在我做了一些测试之后,这意味着问题不在于跨域身份验证(我假设您具有正确的信任等),而在于 Bits 使用登录进行身份验证。
因此,我们会遇到以下类型的问题(使用没有访问权限的 contoso\user 和有访问权限的 contoso/admin)并指定凭据参数:
现在尝试一些 runas 解决方法。以 contoso\user 身份登录时:
runas /user:contoso\admin powershell.exe
运行 Start-BitsTransfer = Error: Start-BitsTransfer : The operation being requested was not performed because the user has not logged on to the network. The specified service does not exist. (Exception from HRESULT: 0x800704DD)
-Credential
,结果相同。执行 runas 就像您以其他用户身份登录一样,但我想您可能需要一个配置文件...让我们接下来尝试。 runas /profile /user:contoso\admin powershell.exe
运行 Start-BitsTransfer = Error: Start-BitsTransfer : The operation being requested was not performed because the user has not logged on to the network. The specified service does not exist. (Exception from HRESULT: 0x800704DD)
runas /netonly /user:contoso\admin powershell.exe
运行 Start-BitsTransfer = Error: Start-BitsTransfer : Access is denied.
最后,到解决方法。运行以下内容:
$c = Get-Credential -UserName 'consoso\admin'
net use \\server\c$
Start-BitsTransfer -Credential $c -source \\server\c$\test.txt -destination .
#Success
net use \\server\c$ /delete
#Error: Cannot find path
(当然使用 contoso\admin 作为 net use 命令)
原因是 net use 命令实际上将您登录到服务器上。一旦您拥有该 kerberos 票证,它就可以工作,因为它已缓存管理员凭据,并使用这些凭据访问该文件。有关类似的解决方案,请参阅:copy-item With Alternate Credentials
基本上,看起来 Bits 传输存在错误,并且它没有按预期处理
-Credential
属性。相反,它似乎总是默认使用当前登录的用户进行身份验证,除了您手动执行 net use 命令以自己手动形成连接。关于powershell - BITS 多域传输文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22457548/