PowerShell を使用してクレデンシャルを取得する

Marion Paul Kenneth Mendoza 2023年1月30日
  1. PowerShell で Get-Credential を使用してクレデンシャルを取得する
  2. PowerShell でクレデンシャルを取得するためのプロンプトなしで Get-Credential コマンドレットを使用する
PowerShell を使用してクレデンシャルを取得する

PSCredential オブジェクトは、クレデンシャルを安全に保存してさまざまなサービスに渡すための創造的な方法です。多くのネイティブおよびサードパーティのコマンドレットでは、さまざまなコマンドで PSCredential オブジェクトが必要です。さらに、クレデンシャルは Windows PowerShell の至る所に存在するオブジェクトです。

この記事では、Windows PowerShell の Get-Credential コマンドレットを使用して、プロンプトなしでクレデンシャルを取得する方法について説明します。

PowerShell で Get-Credential を使用してクレデンシャルを取得する

通常、PSCredential オブジェクトを作成するには、Get-Credential コマンドレットを使用します。上記のコマンドレットは、Windows PowerShell が PSCredential オブジェクトを作成するための入力を受け取る最も一般的な方法です。このオブジェクトは、主にユーザー名とパスワードで構成されています。

実行されるたびに、コマンドラインでユーザー名とパスワードの入力を求めるプロンプトが表示されるか、ユーザーのクレデンシャルを尋ねるポップアップダイアログボックスが表示されます。

PowerShell でクレデンシャルを取得するためのプロンプトなしで Get-Credential コマンドレットを使用する

たとえば、スケジュールされたタスクまたはより強力な自動化フレームワークの一部で実行される自動化されたスクリプトに取り組んでいます。この場合、ユーザー名とパスワードを入力するためにコンソールを操作する人は誰もいません。したがって、PSCredential オブジェクトを最初から作成することをお勧めします。

相互作用のない PSCredential オブジェクトを作成するには、暗号化のプロセスが必要です。PSCredential オブジェクトには、プレーンテキストのユーザー名と暗号化されたパスワードが必要です。

パスワードを暗号化するには、標準の文字列を安全な文字列に変換する必要があります。これを行うには、ConvertTo-SecureString コマンドレットを使用します。このコマンドレットにプレーンテキストのパスワードを渡すことができます。これはプレーンテキストであるため、-PlainText および -Force パラメーターを使用する必要があります。両方のパラメーターは、確認の必要がないプレーンテキストの文字列を渡していることを示しています。

$pass = ConvertTo-SecureString 'MySecretPassword' -AsPlainText -Force

安全な文字列が作成されたら、PSCredential オブジェクトを作成します。これを行うには、New-Object コマンドレットを使用して、System.Management.Automation.PSCredential のオブジェクトを定義できます。PSCredential クラスには、プレーンテキストのユーザー名と引数として使用できる安全な文字列パスワードを受け入れるコンストラクターがあります。

$credential = New-Object System.Management.Automation.PSCredential ('user01', $pass)

これで、プレーンテキストのユーザー名と安全な文字列のパスワードが変数に保存された PSCredential オブジェクトができました。これで、$credential 変数を -Credential パラメーターを必要とするいくつかのコマンドに渡すことができます。これはうまく機能します。予想されるユーザー名とパスワードで作成されたかどうかを確認するために、UserName プロパティを参照して、以前に使用したユーザー名を表示できます。

サンプルコード:

$credential.Username

出力:

user01

パスワードは安全な文字列で暗号化されていますが、同じコンピューターでパスワードを読み取り、ユーザーにログインしている場合は、GetNetworkCredential() メソッドを使用してパスワードをプレーンテキストで表示できます。したがって、$credential 変数の最後に GetNetworkCredential() を追加しますが、実行後にコンソールに出力されるパスワードがわからないことに注意してください。

サンプルコード:

$credential.GetNetworkCredential()

出力:

UserName Domain
-------- ------
user01

パスワードを確認するには、GetNetworkCredential() が返すオブジェクトの Password プロパティを使用する必要があります。返されるパスワードは、PSCredential コンストラクターに提供したものと同じである必要があります。

サンプルコード:

$credential.GetNetworkCredential().Password

出力:

MySecretPassword

$credential 変数がユーザー名とパスワードの両方を保持していることを確認したので、Get-Credential コマンドレットのパラメーターとして変数を使用できます。

Get-Credential -Credential $credential
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn