БИТЫ Передача файла с несколькими доменами

Как я могу передавать файлы между серверами в разных доменах?

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"), но я хочу избежать этого.

Спасибо

1 ответ

Из того, что я узнал, я думаю, что проблема в том, как работает BitsTransfer. Он работает только в интерактивном режиме (то есть как зарегистрированный и активный пользователь). Из документации Microsoft:

При использовании командлетов *-BitsTransfer из процесса, который выполняется в неинтерактивном контексте, например в службе Windows, вы не сможете добавлять файлы в задания BITS, что может привести к приостановленному состоянию. Чтобы продолжить выполнение задания, необходимо войти в систему с идентификатором, который использовался для создания задания передачи. Например, при создании задания BITS в сценарии PowerShell, который был выполнен как задание планировщика задач, передача BITS никогда не завершится, если не включен параметр задачи "Запустить планировщик заданий", только когда пользователь вошел в систему ". - Использование Windows PowerShell для создания заданий передачи BITS

После того, как я провел некоторое тестирование, это означает, что проблема не в междоменной аутентификации (которая, как я полагаю, у вас работают правильные трасты и т. Д.), А в том, что биты используют логин для аутентификации.

Таким образом, мы получаем следующие виды проблем (используя contoso\user, у которого нет доступа, и contoso/admin, который имеет) и указывая параметр credential:

  • Войдите в систему как contoso\user, Credential = contoso\user, Start-BitsTransfer = Ошибка: не удается найти путь
    • Ожидаемое. У contoso\user нет доступа.
  • Войдите в систему как contoso\user, Credential = contoso\admin, Start-BitsTransfer = Ошибка: не удается найти путь
    • Это сообщение об ошибке, которое вы получаете. По сути, он не использует параметр Credential, как ожидалось.
  • Войдите в систему как contoso\admin, Credential = contoso\admin, Start-BitsTransfer = Success.
    • Это ожидается. Параметр учетных данных даже не требуется.
  • Войдите в систему как contoso\admin, Credential = contoso\user, Start-BitsTransfer = Success.
    • Он был действительно озадачен этим, даже проверил журналы безопасности и обнаружил, что достаточно EventID 4624, он использовал текущего вошедшего в систему пользователя 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 /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 с альтернативными учетными данными

По сути, похоже, что есть ошибка с передачей битов, и она не обрабатывает -Credential собственность, как и ожидалось. Вместо этого кажется, что по умолчанию всегда будет использоваться текущий авторизованный пользователь для аутентификации, за исключением того, что вы вручную выполняете команду net use, чтобы вручную сформировать соединение самостоятельно.

Другие вопросы по тегам