
私のローカル マシンは、私が管理しているフォレストとは別のフォレストのドメインに存在します。そのため、私は 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