
Моя локальная машина находится в домене в отдельном лесу от леса, который я администрирую. В результате я широко использую PSSessions. Хотя мне удалось зашифровать свои учетные данные и сохранить их в своем профиле на локальной машине, я попытался зашифровать свои учетные данные и сохранить их в своем профиле на удаленной машине и использовать их, когда я нахожусь внутри сеанса PowerShell. Ниже приведен пример:
PS C:\WINDOWS\system32> etsn -computer 192.168.1.2 -cr $mycred
[192.168.1.2]: PS C:\Users\challer\Documents> get-aduser -server dc01.domain.local -filter * -cr $mycred
После ввода этой команды я получаю следующее всплывающее окно:
«Предупреждение: Скрипт или приложение на удаленном компьютере 192.168.1.2 запрашивает ваши учетные данные. Вводите свои учетные данные, только если вы доверяете удаленному компьютеру и приложению или скрипту, которые их запрашивают».
Можно ли зашифровать, сохранить, сохранить на удаленном сервере учетные данные и получить к ним доступ из сеанса PSSession? Или можно ли передать зашифрованные учетные данные, хранящиеся локально, в сеанс PSSession?
решение1
Проблема в том, что удаленная сессия не может прочитать вашу локальную переменную. Вы можете легко определить переменные до вас Enter-PSSession
и использовать их позже в удаленной сессии:
$Session = New-PSSession -ComputerName dc01.domain.local -Credential $mycred
Invoke-Command -Session $Session -ScriptBlock {
$mycredRemote = $args[0]
} -ArgumentList $mycred
Enter-PSSession -Session $Session
С этого момента $mycredRemote
содержит ваши учетные данные.
решение2
Попробуйте это, это заменит SecureString на чистый текст, локально и удаленно:
$mycred=Get-Credential
$remote = ($env:LOGONSERVER).Replace('\\','')
echo $mycred.Username
echo ([System.Runtime.InteropServices.marshal]::PtrToStringAuto(
[System.Runtime.InteropServices.marshal]::SecureStringToBSTR(($mycred.Password))))
$Session = New-PSSession -ComputerName $remote -Credential $mycred
Invoke-Command -Session $Session -ScriptBlock {
$mycredRemote = $args[0]
echo $mycredRemote.Username
echo ([System.Runtime.InteropServices.marshal]::PtrToStringAuto(
[System.Runtime.InteropServices.marshal]::SecureStringToBSTR(($mycredRemote.Password))))
} -ArgumentList $mycred
Enter-PSSession -Session $Session