我的本地计算机位于与我管理的林不同的林中的域中。因此,我广泛使用 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