~UI Automationって動くの?その2~ UI Automation with PowerShell 奮戦記 2日目

UI Automation*1で遊ぼう!

むむ、タブが出てこなかった。

今回、Windows 10 Home Editionを使用しているのですがその関係でしょうか?
とりあえずタブは操作出来ないことがあることを考慮します。
では、「コンピュータ名」のとこの画面を直接表示してみましょう。

f:id:amon52280:20181203235718p:plain
システムのプロパティ(コンピュータ名)

システムのプロパティ画面(コンピュータ名)の構成を表示してみましょう。
PowerShell ISEで実行してみる。

# UI Automation を組み込む
Add-Type -AssemblyName UIAutomationClient
Add-Type -AssemblyName UIAutomationTypes

# システムのプロパティ(コンピュータ名)を表示
SystemPropertiesComputerName.exe

# ルートエレメント
$re = [System.Windows.Automation.AutomationElement]::RootElement

$subtree = [System.Windows.Automation.TreeScope]::Subtree
$condition_true = [System.Windows.Automation.Condition]::TrueCondition

# システムのプロパティ画面(コンピュータ名)の構成
$syse = $re.FindAll($subtree,$condition_true) | ?{($_.current.name -match "システムのプロパティ")}
$syse | %{$_.FindAll($subtree,$condition_true)} | %{$_.current} | select name

実行結果

Name
 ----
システムのプロパティ                                                 
コンピューター名                                                   
コンピューターの説明(D):                                             
                                                           
例: "キッチンのコンピューター"、"仕事用コンピューター"                             
フル コンピューター名:                                               
DESKTOP-CSQKB17                                            
ワークグループ:                                                   
WORKGROUP                                                  
ドメインまたはワークグループに参加するためのウィザードを使用するには [ネットワーク ID] をクリックしてください。
ネットワーク ID(N)...                                            
このコンピューターの名前を変更するには、[変更] をクリックしてください。                      
変更(C)...                                                   
                                                           
                                                           
次の情報は、このコンピューターをネットワーク上で識別するために使われます。                      
OK                                                         
キャンセル                                                      
適用(A)                                                      

「コンピュータ名」のとこの画面構成の表示が出来ました。

*1:ここでのUI AutomationはSystem.Windows.Automationのことです

~UI Automationって動くの?その1~ UI Automation with PowerShell 奮戦記 1日目

UI Automation*1で遊ぼう!

ちまたで議論されてるPowerShellUI Automationが動かない?
について検証していきましょう。

では、「コンピュータ名」のとこの画面を表示してみましょう。

f:id:amon52280:20181203235901p:plainf:id:amon52280:20181203235718p:plain
システムのプロパティで「コンピュータ名」タブをクリック

まず、システムのプロパティ画面の構成を表示してみましょう。
PowerShell ISEで実行してみる。

# UI Automation を組み込む
Add-Type -AssemblyName UIAutomationClient
Add-Type -AssemblyName UIAutomationTypes

# システムのプロパティを表示
SystemPropertiesAdvanced.exe

# ルートエレメント
$re = [System.Windows.Automation.AutomationElement]::RootElement

$subtree = [System.Windows.Automation.TreeScope]::Subtree
$condition_true = [System.Windows.Automation.Condition]::TrueCondition

# システムのプロパティ画面の構成
$syse = $re.FindAll($subtree,$condition_true) | ?{($_.current.name -match "システムのプロパティ")}
$syse | %{$_.FindAll($subtree,$condition_true)} | %{$_.current} | select name

実行結果

Name 
 ----                                                                
システムのプロパティ
詳細設定
Administrator としてログオンしない場合は、これらのほとんどは変更できません。
パフォーマンス 
視覚効果、プロセッサのスケジュール、メモリ使用、および仮想メモリ 
設定(S)...                  
ユーザー プロファイル
サインインに関連したデスクトップ設定 
設定(E)...
起動と回復
システム起動、システム障害、およびデバッグ情報
設定(T)
環境変数(N)...
OK
キャンセル
適用(A)
...
Editor Selection

むむ タブが出てこない・・・

*1:ここでのUI AutomationはSystem.Windows.Automationのことです

UI Automation with PowerShell 奮戦記 はじめるにあたって

UI Automation*1で遊びます。

 

UI Automationでは以下の事が容易に実現出来るようになります。

 

  • 画面情報の取得
  • 画面操作の自動化
  • 画面操作の捕捉

 

UI Automationが登場する前は,上の事を実現させるには

ゴリゴリ、プログラムを書く必要がありました。

便利な世の中になったものです♪

バッチも進化してPowerShellに! .Net frameworkもWin32APIも使えるし!

 

ということでPowerShell上でUI Automationを動作させることを目指します

 

ちまたではPowerShellUI Automationは動かない?

という情報もあるのでそれを検証しつつ

以下の機能を実現してみようかと。

1.画面ハードコピーの自動化

 Windowsで標準提供されている「ステップ記録ツール」がありますがこれと同等、それ以上の機能を実現しよう! UI Automation画面操作の捕捉で出来るんじゃない?

 自動画面ハードコピーはフリーや有料でソフトが提供されていますが、別途インストールが必要な為、敷居が高くなっています。

 それをPowerShellで作ってWindowsの標準機能だけで実現しちゃおう。

2.設定書自動生成

 OSの設定書って作成するのめんどいよね。

 画面から設定書を自動生成しちゃう? UI Automation画面情報の取得で出来るんじゃない?

 とりあえず「コンピュータ名」設定のとこの画面で設定書の自動生成を実現しちゃおう。

3.自動設定

 OSを自動設定をするのにWindowsではDSC,ちまたではAnsibleが使われてる。

 でもDSCにしろAnsibleにしろ現在標準?で提供されているモジュール?だけでは全ての設定は網羅されていません。新しい設定モジュールを作るにはレジストリ、コマンド等、方法を調査する必要があり手間!!。

 それならそのまんま画面を操作して設定すればいいんじゃない? UI Automation画面操作の自動化で出来るんじゃない? OSの設定書の入力からOSの自動設定を画面操作の自動化で実現しちゃおう。

 1000台とかディスプレイ上で画面が自動操作されてる様は圧巻じゃない?

 

では、皆さんいっしょにあそびましょう!

*1:ここでのUI AutomationはSystem.Windows.Automationのことです