БИТЫ Передача файла с несколькими доменами
Как я могу передавать файлы между серверами в разных доменах?
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, чтобы вручную сформировать соединение самостоятельно.