Как сохранить учетные данные на удаленной сессии Powershell?

Я имею Долю Файла Azure и хотел бы использовать это от своей Azure VMs - после сохранения учетных данных на VMs с cmdkey и монтировании с сетевым использованием. Это было протестировано путем выполнения этих команд на локальной сессии Powershell на Windows Server 2012 R2.

Но я должен добавить этот шаг к сценарию развертывания Azure. Сценарий Azure Powershell работает от моего ноутбука, подключений к подписке Azure и создает VMs с нуля, с помощью большого количества переменных.

Вычисленный для использования Вызывать-команды для передачи переменных от сценария Azure Powershell до удаленной сессии Powershell на недавно созданном VM.

$Session = New-PSSession -ConnectionUri $Uri -Credential $DomainCredential

$ScriptBlockContent = { 
Param ($Arg1,$Arg2,$Arg3)
cmdkey /add:$Arg1 /user:$Arg2 /pass:$Arg3}

Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)

И ошибка:

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)
CMDKEY: Credentials cannot be saved from this logon session.

Замененный cmdkey / список для проверки синтаксиса, и нет никакой ошибки.

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent
Currently stored credentials:
* NONE *

Имел подобную проблему (и не мог зафиксировать его) с Модулем PowerShell Windows Update (Вызывают-WUInstall), который работает очень хорошо на локальной сессии Powershell на VM, но не обновляет при запуске через удаленный Powershell.

Какой-либо способ обойти этого?

12
задан 27 March 2015 в 17:49
2 ответа

Из-за того, как Windows обрабатывает аутентификацию, невозможно использовать CMDKEY для установки учетных данных через удаленный сеанс PowerShell, это должно выполняться интерактивно при использовании CMDKEY.

Цитата Дон Джонс из темы ищет ответ, похожий на ваш:

Это ограничение команды Cmdkey, а не PowerShell. предмет. Но это связано с тем, как Remotig обрабатывает учетные данные. В удаленный сеанс на самом деле не получает учетные данные, он получает делегированные билет, так что жетона для сохранения нет. Это все по замыслу, и не то, что вы можете перенастроить.

2
ответ дан 2 December 2019 в 21:40

Вы можете использовать Sysinternal PsExec.exe , если вы не хотите использовать запланированную задачу. Обычно, когда вы запускаете сеанс PowerShell, он запускается в процессе services (вы можете подтвердить это, запустив команду query session на удаленном компьютере) вместо локального пользователя, который не выполняет cmdkey. .

Чтобы преодолеть это, нам нужно запустить cmdkey.exe в процессе локального пользователя, что можно сделать с помощью флага PsExec.exe -i , который

запускает программу, чтобы она взаимодействовала с рабочий стол указанного сеанса в удаленной системе. Если сеанс не указан, процесс запускается в сеансе консоли.

Теперь задача состоит в том, чтобы получить идентификатор сеанса локального пользователя на удаленной машине. Я добился этого, выполнив команду query session , которая дает список сеансов, активных на машине. Одно из возможных решений -

$processId = Invoke-Command $session -ScriptBlock  {
param($user)
    $sessions = query session $user;
    return $sessions[1].split(" ", [System.StringSplitOptions]::RemoveEmptyEntries)[2];

} -ArgumentList ($user)

Здесь $ user содержит имя локального пользователя на удаленном компьютере.

Как только вы получите идентификатор сеанса, вы можете просто выполнить

PsExec \\<computer_name> -u <local_user_name> -p <password> -h -i $processId cmdkey.exe /generic:testtt /user:userr /pass:pass

Примечание:

  1. Могут быть лучшие способы получить идентификатор сеанса пользователя на удаленном компьютере.
  2. Прямо сейчас, при запуске PsExec, Я снова устанавливаю соединение с удаленной системой, чего можно избежать (я не тестировал).
  3. Пользователь, выполняющий команду, должен иметь доступ администратора на удаленном компьютере.
2
ответ дан 2 December 2019 в 21:40

Теги

Похожие вопросы