【问题标题】:Solution for copying files between windows machines using different credentials使用不同凭据在windows机器之间复制文件的解决方案
【发布时间】:2015-05-10 03:08:34
【问题描述】:

我在一个 Windows 服务应用程序上工作,它可以在目标机器上运行脚本。我需要做的一件事是将文件从我的主机复制到不同用户的目标机器。我已经探索了几种解决方案,但还没有找到一个好的解决方案。我列出了我尝试过的所有内容。如果有人有不同/更好的解决方案,将不胜感激

  • start-bitstransfer:此服务在系统帐户下运行。所以只有系统账号下的服务才能使用。
  • get-content/set-content:建立到目标的 pssession 并在会话中使用 set-content。这种方法消耗大量内存并且需要时间。对于 1.02 MB 的文件,需要 2 多分钟。

    measure-command{$outp = icm -Session $s -ScriptBlock {get-content C:\Programdata\karan\bigfile.txt}; $outp > bfile.txt}

    TotalMinutes      : 2.20191604
    TotalSeconds      : 132.1149624
    TotalMilliseconds : 132114.9624
    

    对于较大的文件,文件必须分块加载并复制,这可能需要更长的时间

  • 使用 powershell 3.0,您可以在使用不同的凭据映射网络驱动器后使用 Copy-Item。但是您不能同时使用多个用户,这超出了自动化的目的 Issue with mapping network drives using New-PSDrive

  • 运行网络服务器并执行 http get/post。这是最快和最可靠的,但我们将讨论开放端口和防火墙问题。

【问题讨论】:

  • 使用 Robocopy,您还可以根据需要复制文件和文件夹的权限。最重要的是,它有一个 MT(多线程)开关,可以显着加快文件传输速度。
  • @DarkLite1 在使用不同的凭证 robocopy 时也需要我们映射到目标驱动器(网络使用)。考虑到驱动器号的限制以及 Windows 不喜欢同一个用户使用不同的凭据多次连接到目标这一事实,这在自动化过程中绝对不是一个选项。

标签: windows powershell-3.0 copy-item


【解决方案1】:

Robocopy 是最快的方法,使用 Start-Process 命令在不同的凭据下启动 Robocopy

 Start-Process -FilePath "$env:SystemRoot\system32\WindowsPowerShell\v1.0\powershell.exe" -ErrorAction SilentlyContinue -windowstyle hidden -Credential $credentials -ArgumentList ("-NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy ByPass",“Robocopy <command line options>”)

我不明白为什么您每次都需要使用不同的凭据将文件从您的计算机复制到另一台计算机? PowerShell 中的这种技术应该可以工作,但最好通过授予单个帐户对两个位置的正确访问权限来解决

【讨论】:

  • 这是自动化产品的要求。如果主机计算机和目标计算机上存在相同的凭据,则该解决方案可以工作。如果主机上不存在凭据,则无法启动 powershell 进程本身。
猜你喜欢
  • 2016-01-18
  • 2010-09-10
  • 2020-07-27
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
相关资源
最近更新 更多