Моя локальная машина существует в домене в отдельном лесу от леса, которым я управляю. В результате я широко использую PSSessions. Хотя мне удалось зашифровать свои учетные данные и сохранить их в моем профиле на моем локальном компьютере, я попытался зашифровать свои учетные данные и сохранить их в своем профиле на удаленном компьютере и использовать их, когда я нахожусь внутри сеанса PowerShell. Ниже приведен пример:
PS C: \ WINDOWS \ system32> etsn -компьютер 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?
Попробуйте это, он меняет 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
Проблема в том, что удаленный сеанс не может прочитать вашу локальную переменную. Вы можете легко определить переменные, прежде чем вы 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
содержит ваши учетные данные.