
我的本機電腦位於與我管理的林不同的林中的網域中。因此,我廣泛使用 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