
Mein lokaler Computer befindet sich in einer Domäne in einem anderen Forest als dem von mir verwalteten Forest. Daher verwende ich PSSessions häufig. Obwohl ich meine Anmeldeinformationen verschlüsseln und in meinem Profil auf meinem lokalen Computer speichern konnte, habe ich versucht, meine Anmeldeinformationen zu verschlüsseln und in meinem Profil auf dem Remotecomputer zu speichern und sie zu verwenden, sobald ich mich in einer PowerShell-Sitzung befinde. Nachfolgend ein Beispiel:
PS C:\WINDOWS\system32> etsn -computer 192.168.1.2 -cr $mycred
[192.168.1.2]: PS C:\Benutzer\challer\Dokumente> get-aduser -server dc01.domain.local -filter * -cr $mycred
Nach Eingabe dieses Befehls erhalte ich das folgende Popup:
„Warnung: Ein Skript oder eine Anwendung auf dem Remotecomputer 192.168.1.2 fordert Ihre Anmeldeinformationen an. Geben Sie Ihre Anmeldeinformationen nur ein, wenn Sie dem Remotecomputer und der Anwendung oder dem Skript, das sie anfordert, vertrauen.“
Können Anmeldeinformationen verschlüsselt, gespeichert und auf einem Remote-Server abgelegt werden und von einer PSSession aus darauf zugegriffen werden? Oder können verschlüsselte Anmeldeinformationen, die lokal gespeichert sind, an eine PSSession weitergegeben werden?
Antwort1
Das Problem besteht darin, dass die Remote-Sitzung Ihre lokale Variable nicht lesen kann. Sie können Variablen ganz einfach vorab definieren Enter-PSSession
und sie später in der Remote-Sitzung verwenden:
$Session = New-PSSession -ComputerName dc01.domain.local -Credential $mycred
Invoke-Command -Session $Session -ScriptBlock {
$mycredRemote = $args[0]
} -ArgumentList $mycred
Enter-PSSession -Session $Session
Ab diesem Punkt $mycredRemote
sind Ihre Anmeldeinformationen enthalten.
Antwort2
Versuchen Sie Folgendes. Dadurch wird der SecureString lokal und remote in Klartext umgewandelt:
$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