PowerShellでの操作ではGet-Credentialが重要な位置づけをしめします。 この時、通常はGUIが表示されますが、GUIがAutomationにおいてはじゃまとなることがあります。 今回は、PowerShellにおけるGet-Credintialでのユーザー名、パスワード入力をGUIからCUIに変更する方法です。
要件
PowerShell 2.0以上です。 どうやらWindows 7,8,2012,2008 R2は動作するようですが、2008では動作しないようです。
どうやって制御しているのか
GUIとCUIはレジストリキーで制御されています。
- パス:
HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds - キー:
ConsolePrompting
このキーが、$falseだとGUIポップアップ、$trueだとCUIとなります。
PowerShellでレジストリキーを制御
基本的には、PowerShellではレジストリもPSDriveです。 そのため、Set-Itemでの設定が可能ですし、値の名称はGet-ChildItem、値の内容はGet-ItemPropertyでわかります。
PowerShellでレジストリキーを確認
簡単です。
PS> 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を利用します。
PS> 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に変更します。
PS> $key = "HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds" PS> 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上でユーザー情報を聞くようになりました。 もちろんパスワードはマスクされています。
まとめ
GUIポップアップすべきタイミングと、しない方が望ましいタイミングを見極めましょう。