web-dev-qa-db-ja.com

PSCredentialをファイルに保存します

私はファイルにパスワードを保存できることを知っています:

Read-Host "Enter Password" -AsSecureString |  ConvertFrom-SecureString | Out-File $passwordfile

そしてファイルからそれを読む:

$secpasswd = (Get-Content $passwordfile | ConvertTo-SecureString)

次に、PSCredentialオブジェクトを作成します。

$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd)

しかし、ファイルに$ credentialを保存して、ユーザー名とパスワードを一緒に保存できますか?

15
Alexan

暗号化された資格情報を簡単に保存および取得するには、PowerShellの組み込みXMLシリアル化(Clixml)を使用します。

$credential = Get-Credential

$credential | Export-CliXml -Path 'C:\My\Path\cred.xml'

再インポートするには:

$credential = Import-CliXml -Path 'C:\My\Path\cred.xml'

覚えておくべき重要なことは、デフォルトでこれはWindowsデータ保護APIを使用し、パスワードの暗号化に使用されるキーは、コードが実行されているユーザーとマシンの両方に固有であることです。

その結果、暗号化された資格情報は、別のユーザーや別のコンピューターの同じユーザーがインポートすることはできません。

異なる実行中のユーザーおよび異なるコンピューター上で同じ資格情報の複数のバージョンを暗号化することにより、複数のユーザーが同じシークレットを使用できるようになります。

ユーザー名とコンピューター名をファイル名に含めることにより、暗号化されたすべての秘密を、同じコードでハードコーディングせずに使用できるように保存できます。

暗号化

# run as each user, and on each computer

$credential = Get-Credential

$credential | Export-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"

保存された資格情報を使用するコード:

$credential = Import-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"

実行中のユーザーの正しいバージョンのファイルが自動的に読み込まれます(または、ファイルが存在しないために失敗します)。

29
briantist

Briantist&Grahamでの構築:これにより、クレデンシャルが要求され、初回実行時に資格情報が保存されます。その後、同じコードからの後続の実行で再利用されます。私の場合、ドライブHはユーザーのホームディレクトリであり、セキュリティではなく、整頓のために使用されます。

# the path to stored credential
$credPath = "H:\Secrets\Cred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
# check for stored credential
if ( Test-Path $credPath ) {
    #crendetial is stored, load it 
    $cred = Import-CliXml -Path $credPath
} else {
    # no stored credential: create store, get credential and save it
    $parent = split-path $credpath -parent
    if ( -not test-Path $parent) {
        New-Item -ItemType Directory -Force -Path $parent
    }
    $cred = get-credential
    $cred | Export-CliXml -Path $credPath
}

このコードブロックは、それを必要とする任意のスクリプトに組み込むことができ、それ以降、問題は多かれ少なかれ解決されます。

アプリケーションで許可されている場合、書き込む前に成功した資格情報を確認することもできます。パスワードが変更された場合、ユーザーはファイルを削除する必要があることに注意してください。

0
jim birch