PowerShellを使ってアプリの自動実行(その3)

※この記事の前準備として2020年8月3日の記事も読んでね。

先ず、CrenaHtml2jpg.exe って云うサイトサムネイル作成アプリと使用されるバッチプログラムやスクリプトは全部、C:\work\CrenaHtml2jpg-v1.20 にある想定。

 そこで、PowerShellのスクリプト:capture.ps1 は、こんな感じ。

$process = Start-Process -FilePath “C:\work\CrenaHtml2jpg-v1.20\CrenaHtml2jpg.exe” -PassThru
$window = Get-UiaWindow -ProcessId
$process.Id $window | Get-UiaEdit -AutomationId ‘1010’ -Class ‘Edit’ -Name ‘http://www.yahoo.co.jp’ | `
Set-UIAControlText -Text $args[0];
$window | Get-UiaButton -Name ‘実行’ | Invoke-UiaButtonClick | Out-Null
$window | Get-UiaButton -Name ‘終了’ | Invoke-UiaButtonClick | Out-Null

 このスクリプトはコマンドライン引数を1つ(キャプチャーするサイトのURL)を持つんスよ。

PS >cd C:\work\CrenaHtml2jpg-v1.20
PS >.\capture.ps1 http://www.wowow.co.jp/detail/017949

 次にこのスクリプトを昨日(4月26日)の記事の通りに、PowerShellのスクリプト実行権限を緩めてスクリプトを実行し、また実行権限を戻すというバッチ処理を管理者権限で行うって云う話っすねぇ。それはこんなスクリプトを書くんスよ。

REM — 管理者権限があるかどうかチェック —————–
whoami /PRIV | find “SeLoadDriverPrivilege” >NUL
if not errorlevel 1 goto START
REM — ない場合は powershell 経由で自分自身を実行
powershell.exe -Command Start-Process “%~0 %~1” -Verb Runas goto :EOF
:START REM — ここからバッチ本来の処理 ——————————
cd “C:\work\CrenaHtml2jpg-v1.20”
powershell Set-ExecutionPolicy RemoteSigned
powershell .\capture.ps1 %1
powershell Set-ExecutionPolicy Restricted

 1行目で管理者権限の有無をチェックし、なければPowershellコマンドを使って管理者権限でバッチプログラムを開き直す。管理者権限があればSTARTラベルに飛んで、バッチ処理本来のお仕事をするってぇ感じっすかねぇ。

 次回はその4で、CrenaHtml2jpg.exeのInternet Explorerのエミュレーションモードをレジストリで最新のEdgeと同様に設定する方法についてっすよ。

ソフトウェア開発の素直研究所です。お仕事のご依頼はこちらからどうぞ!

PowerShellを使ってアプリの自動実行(その2)


以前のブログ「PowerShellを使ってアプリの自動実行」という記事を書いたんだが、実はUI Automationのdllをインポートするという前準備が必要なことを書くのを忘れてました。以下の手順ッスねぇ。


 前準備として、http://uiautomation.codeplex.com/ に行き、Downloadボタンを押してzipをダウンロード、 Documents\WindowsPowerShell\Modules\UIAutomation に展開する。
 次にPowerShellを開いて、上記のディレクトリに移動し、下のコマンドを実行。

PS > Import-Module .\UIAutomation.dll

 Get-Moduleして以下のようにでてくればOK。

PS > Get-Module UIA* ModuleType Version Name ExportedCommands ————————————- Binary 0.8.7.79 UIAutomation {Add-UiaBannerText…

 そこで、前回の記事の通り、テキストエディタでスクリプトを書いて保存し、実行するんだが、保存されたスクリプトを実行するとセキュリティ警告が出て実行できない。そこいら辺の話はコチラに詳しく載ってるんで譲るとして、実際スクリプトを実行するには…

  1. スクリプト実行のポリシーを変更し、権限を緩める。
  2. 目的のスクリプトを実行する。
  3. スクリプト実行のポリシーを元に戻す。

スクリプト実行権限を元に戻すのは、セキュリティ上の穴を開けないためねぇ。
 で、これをバッチプログラムにすると以下の様になる。

echo off
powershell Set-ExecutionPolicy RemoteSigned
powershell .\目的のスクリプト.ps1
powershell Set-ExecutionPolicy Restricted

 で、このバッチプログラムを管理者権限で行わなきゃならないんだが、実はこのバッチプログラムをPython等の別のプログラムからコールしようと思ってるんだが、それがけっこう厄介なんだなぁ。  とりあえず今日はここまで。次回は管理者権限でバッチプログラムを他のPythonやphpなんかの別のプログラムから呼び出すにはどうするかについて書いてみる。 ソフトウェア開発の素直研究所です。お仕事のご依頼はこちらからどうぞ!