tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

PowerShellのGet-Credentialプロンプトをコンソールに変更する

PowerShellでの操作ではGet-Credentialが重要な位置づけをしめします。 この時、通常はGUIが表示されますが、GUIがAutomationにおいてはじゃまとなることがあります。 今回は、PowerShellにおけるGet-Credintialでのユーザー名、パスワード入力をGUIからCUIに変更する方法です。 Credential

要件

PowerShell 2.0以上です。 どうやら、Windows7,8,2012,2008 R2は動作するようですが、2008では動作しないようです。

どうやって制御しているのか

GUIとCUIはレジストリキーで制御されています。
HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds #パス
ConsolePrompting #キー
PowershellReg このキーが、$falseだとGUIポップアップ、$trueだとCUIとなります。

PowerShellでレジストリキーを制御

基本的には、PowerShellではレジストリもPSDriveです。 そのため、Set-Itemでの設定が可能ですし、値の名称はGet-ChildItem、値の内容はGet-ItemPropertyでわかります。

PowerShellでレジストリキーを確認

簡単です。 値の名称確認
Get-ChildItem HKLM:\SOFTWARE\Microsoft\PowerShell\1\ | format-List -AutoSize
出力です。
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
Name                     Property                                                    
----                     --------                                      
0409                     Install : 1                                      
0411                     Install : 1                                      
PowerShellEngine         ApplicationBase         : C:\Windows\System32\WindowsPowerShell\v1.0                   
                         PSCompatibleVersion     : 1.0, 2.0
                         RuntimeVersion          : v2.0.50727
                         ConsoleHostAssemblyName : Microsoft.PowerShell.ConsoleHost, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=msil
                         ConsoleHostModuleName   : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell.ConsoleHost.dll
                         PowerShellVersion       : 2.0
PowerShellSnapIns
PSConfigurationProviders
ShellIds                 ConsolePrompting : True
このConsolePromptingが対象のキーです。 もしない場合は、次ステップへ移ってください。 値の内容はGet-ItemPropertyを利用します。
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds
結果です。
ConsolePrompting : false
PSPath           : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds
PSParentPath     : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
PSChildName      : ShellIds
PSDrive          : HKLM
PSProvider       : Microsoft.PowerShell.Core\Registry

PowerShellでレジストリキーを変更

Set-ItemPropertyで$trueに変更します。
$key = "HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds"
Set-ItemProperty -Path $key -Name ConsolePrompting -Value $true
これで、値が変わります。
ConsolePrompting : True
PSPath           : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds
PSParentPath     : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
PSChildName      : ShellIds
PSDrive          : HKLM
PSProvider       : Microsoft.PowerShell.Core\Registry
戻す際は、$falseに設定します。
$key = "HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds"
Set-ItemProperty -Path $key -Name ConsolePrompting -Value $false

変更後の動作

ご覧のとおり、GUIがなくなりCUI上でユーザー情報を聞くようになりました。 CUI 勿論パスワードはマスクされています。 CUI Result

まとめ

GUIポップアップすべきタイミングと、しない方が望ましいタイミングを見極めましょう。