Решение для копирования файлов между компьютерами Windows с использованием разных учетных данных

Я работаю над приложением службы Windows, которое может запускать сценарии на целевой машине. Одна из вещей, которые мне нужно сделать, это скопировать файлы с моего хост-компьютера на целевую машину для разных пользователей. Я изучил несколько решений, но пока не нашел хорошего. Я перечисляю все, что я пробовал. Был бы признателен, если бы у кого-то было другое/лучшее решение

  • start-bitstransfer: эта служба работает под системной учетной записью. Таким образом, его могут использовать только службы под системной учетной записью.
  • get-content/set-content: установите pssession для цели и используйте set-content в рамках сеанса. Этот подход потребляет много памяти и требует времени. Для файла размером 1,02 МБ потребовалось более 2 минут.

    команда измерения {$ outp = icm -Session $s -ScriptBlock {получить содержимое C:\Programdata\karan\bigfile.txt}; $outp > bfile.txt}

    TotalMinutes      : 2.20191604
    TotalSeconds      : 132.1149624
    TotalMilliseconds : 132114.9624
    

    Для больших файлов файл должен быть загружен кусками и скопирован, что может занять еще больше времени.

  • С Powershell 3.0 вы можете использовать Copy-Item после сопоставления сетевого диска с другими учетными данными. Но вы не можете использовать несколько пользователей одновременно, что превосходит цель автоматизации сетевые диски с помощью New-PSDrive

  • Запустите веб-сервер и выполните http get/post. Это самый быстрый и надежный способ, но мы займемся открытием портов и проблемами с брандмауэром.

person Madhulika    schedule 10.05.2015    source источник
comment
С Robocopy вы также можете копировать права доступа к файлам и папкам, если хотите. Кроме того, он имеет переключатель MT (многопоточность), который значительно ускоряет передачу файлов.   -  person DarkLite1    schedule 11.05.2015
comment
@DarkLite1 при использовании другой robocopy с учетными данными также потребует от нас сопоставления с целевым диском (сетевое использование). Это определенно не вариант во время автоматизации, учитывая ограничение на буквы дисков и тот факт, что Windows не любит, когда один и тот же пользователь подключается к цели более одного раза, используя разные учетные данные.   -  person Madhulika    schedule 14.05.2015


Ответы (1)


Robocopy — самый быстрый способ, запускайте Robocopy под разными учетными данными с помощью команды Start-Process.

 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 должен работать, но, возможно, его лучше решить, предоставив одной учетной записи правильный доступ к обоим местоположениям.

person beehaus    schedule 18.05.2015
comment
Это требование к продукту автоматизации. Решение может работать, если на хост-компьютере и на целевом компьютере существуют одни и те же учетные данные. Если кредиты не существуют на хост-компьютере, вы не сможете запустить сам процесс powershell. - person Madhulika; 21.05.2015