如何在不同域的服务器之间传输文件?

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)并指定凭据参数:

  • 以 contoso\user 身份登录,凭据 = contoso\user,Start-BitsTransfer = 错误:找不到路径
  • 预期。 contoso\user 没有访问权限。
  • 以 contoso\user 身份登录,凭据 = contoso\admin,Start-BitsTransfer = 错误:找不到路径
  • 这是您收到的错误消息。基本上它没有按预期使用 Credential 参数。
  • 以 contoso\admin 身份登录,凭据 = contoso\admin,Start-BitsTransfer = 成功。
  • 这是意料之中的。甚至不需要凭据参数。
  • 以 contoso\admin 身份登录,凭据 = contoso\user,Start-BitsTransfer = 成功。
  • 真的被这个弄糊涂了,还查了安全日志,果然是EventID 4624,它使用当前登录的用户contoso\admin登录远程机器访问文件,而不是credential参数。

  • 现在尝试一些 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 的方法已经不多了……但是还有一个 runas 参数——netonly:
  • 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/

    10-11 08:37