PowerShell でセキュア文字列をプレーンテキストに変換する方法
-
PowerShell で
Marshal
クラスを使用して Secure String をプレーンテキストに変換する -
PowerShell で
ConvertFrom-SecureString
コマンドレットを使用して Secure String をプレーンテキストに変換する -
PowerShell で
NetworkCredential
クラスを使用して Secure String をプレーンテキストに変換する -
PowerShell で
GetNetworkCredential
メソッドを使用して Secure String をプレーンテキストに変換する - 結論

PowerShell は、メモリ内の機密情報を保護するために設計された SecureString
オブジェクトを処理するためのさまざまな方法を提供します。しかし、セキュリティリスクにもかかわらず、SecureString
をプレーンテキストに変換する必要があるシナリオもあります。
この記事では、Marshal
クラス、ConvertFrom-SecureString
コマンドレット、NetworkCredential
クラス、GetNetworkCredential()
メソッドを使用するなど、この変換を達成するためのさまざまな方法を探ります。各メソッドは、それぞれの利点と考慮事項を提供し、PowerShell スクリプト内での機密データの安全な取り扱いに柔軟性を提供します。
PowerShell で Marshal
クラスを使用して Secure String をプレーンテキストに変換する
PowerShell では、[System.Runtime.InteropServices.Marshal]
クラスが、アンマネージドコードとの相互運用を促進し、メモリを操作するためのメソッドを提供します。そのメソッドのうち、SecureStringToBSTR
と PtrToStringAuto()
は、SecureString
をプレーンテキストに変換する際に重要な役割を果たします。
例:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$secureStringPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
$plainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr)
$plainText
この例では、まず ConvertTo-SecureString
コマンドレットを使用して、パスワード"MyPassword"
を含む SecureString
オブジェクト $secureString
を作成します。次に、[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
を使用して、SecureString
を BSTR(基本文字列)表現に変換します。
最後に、[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr)
を使用して、BSTR 表現をプレーンテキストに変換し、$plainText
変数に格納します。
出力:
PowerShell で ConvertFrom-SecureString
コマンドレットを使用して Secure String をプレーンテキストに変換する
ConvertFrom-SecureString
コマンドレットは、セキュアな文字列を暗号化された標準文字列に変換します。PowerShell 7.0 からは、セキュアな文字列をプレーンテキスト文字列に変換する新しいパラメーター-AsPlainText
が追加されました。
次の例は、PowerShell のバージョン 7.0 以降を必要とします。
例:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$plainText = ConvertFrom-SecureString -SecureString $secureString -AsPlainText
$plainText
この例では、まず ConvertTo-SecureString
コマンドレットを使用して、パスワード"MyPassword"
を含む SecureString
オブジェクト $secureString
を作成します。次に、ConvertFrom-SecureString
コマンドレットを利用して、$secureString
をそのプレーンテキスト表現に変換し、結果を $plainText
変数に格納します。
出力:
PowerShell で NetworkCredential
クラスを使用して Secure String をプレーンテキストに変換する
PowerShell では、[System.Net.NetworkCredential]
クラスは .NET
フレームワークの System.Net
名前空間の一部です。主に Web サービス、FTP サーバー、またはネットワーク共有へのアクセスのための資格情報を提供するために使用されます。
主な目的は認証ですが、プレーンテキストの資格情報が必要なシナリオでは、SecureString
を plaintext
に変換するためにも利用できます。
例:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$networkCredential = New-Object System.Net.NetworkCredential("", $secureString)
$plainText = $networkCredential.Password
$plainText
この例では、まず ConvertTo-SecureString
コマンドレットを使用して、パスワード"MyPassword"
を含む SecureString
オブジェクト $secureString
を作成します。次に、空のユーザー名(私たちの目的には必要ないため)とパスワードを含む SecureString
をパラメーターとして、System.Net.NetworkCredential
オブジェクト $networkCredential
をインスタンス化します。
最後に、$networkCredential.Password
からプレーンテキストのパスワードを取得し、$plainText
に格納します。
出力:
PowerShell で GetNetworkCredential
メソッドを使用して Secure String をプレーンテキストに変換する
PowerShell では、GetNetworkCredential()
メソッドは PSCredential
クラスの一部であり、ユーザー資格情報のセットを表すために使用されます。このメソッドは、PSCredential
オブジェクト内に格納されたパスワードのプレーンテキスト表現を抽出するために主に使用されます。
例:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("username", $secureString)
$plainText = $credential.GetNetworkCredential().Password
$plainText
この例では、まず ConvertTo-SecureString
コマンドレットを使用して、パスワード"MyPassword"
を含む SecureString
オブジェクト $secureString
を作成します。次に、ダミーユーザー名と $secureString
をパスワードとして持つ PSCredential
オブジェクト $credential
を作成します。
最後に、$credential.GetNetworkCredential().Password
メソッドを使用して、PSCredential
オブジェクトからプレーンテキストのパスワードを抽出します。
出力:
結論
PowerShell スクリプティングにおいて、SecureString
をプレーンテキストに変換することは、さまざまなシナリオで一般的な要件です。[System.Runtime.InteropServices.Marshal]クラス、ConvertFrom-SecureString
コマンドレット、[System.Net.NetworkCredential]
クラス、または GetNetworkCredential()
メソッドのようなメソッドを活用することで、ユーザーは機密情報を安全に取り扱いながら操作上の要件にも対応できます。
外部システム、レガシーAPI、またはネットワーク操作と相互作用する際、これらのメソッドは柔軟性と便利さを提供します。しかし、機密データを注意深く扱い、関連するセキュリティへの影響を考慮することが重要です。