適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話やポイ活など気になったことも載せているブログです。

PowerShellでPersonal Communicationsの操作を自動化してプチRPAする【マクロ】

f:id:shinmai_papa:20211006123508p:plain

PowerShellを使ってPersonal Communications(以下PCOMM)の操作を自動化するサンプルを紹介します。

Windowsに標準で入っているPoweShellとPCOMMの標準機能を使うので、RPAソフト無しで実行することができます。毎日定例的に行っている業務や、機械的に処理できる業務などを自動化してVBAでPCOMMの自動化するときのサンプルはこちらをご覧頂ければ幸いです。

www.tekizai.net

検証した環境

Windows10
PowerShell5.1(x86)
PCOMM Version 13.0

PCOMMをプチRPAする

PCOMMで使用するProfileはお使いいただく環境に合わせて設定をしてください。デフォルトだと、C:\Users\ユーザー名\AppData\Roaming\IBM\Personal Communicationsフォルダに作成されるWSファイルです。〇〇.WSの〇〇の部分を設定します。

また、64bit版のPowerShellでは動きませんので、32bit版のPowerShellをお使いください(ここ重要)。

PCOMMの起動、すでに起動しているかのチェック、文字の入力、キーの入力、文字の取得と一通り基本的な処理のサンプルになります。文字の入力以外はコメントアウトしています。必要に応じてコメントアウトを外して動作を確認してみてください。これらの処理を組み合わせれば、PCOMMを通したAS400の操作は、ほぼ自動化できると思います。

 
$conMgr=New-Object -ComObject 'PCOMM.autECLConnMgr'
$conList =New-Object -ComObject 'PCOMM.autECLConnList'   
$oia =New-Object -ComObject 'PCOMM.autECLOIA'
$ps = New-Object -ComObject 'PCOMM.autECLPS'

$conList.Refresh()|Out-Null
if($conList.Count -eq 0)
{
    #PCOMMの起動(〇〇にはプロファイル名を入れます)
    $conMgr.StartConnection('profile=〇〇')|Out-Null

    #起動待ち
    While($conList.Count -eq 0)
    {
        Start-Sleep 1
        $conList.Refresh()|Out-Null
    }
}

#セッションの一覧を表示する
for($i=1;$i -le $conList.Count;$i++)
{
    $conList[$i].name
}

#処理対象のPCOMMセット(ここでは便宜上最初に取得できたセッションを操作しています)
$sessionName=$conList[1].Name
$oia.SetConnectionByName($sessionName)
$ps.SetConnectionByName($sessionName)

##操作対象の座標
$x=18
$y=20

##機能キーF3⇒[pf3]
##Enter⇒[enter]
$key='[pf3]'
$value='あああ'
##取得したい文字列の長さ。マルチバイト文字がある場合はシフトアウトとシフトインがあるので注意。
$len=3

##文字の入力
$oia.WaitForInputReady()
$ps.SetText($value,$y,$x)
##送り座標を指定したキー入力
##$ps.SendKeys($key,$y,$x)
##ただのキー入力
##$ps.SendKeys($key)
##文字の取得
##$ps.GetText($x, $y,$len)

終わりに

PowerShellを使ったPCOMMの自動化のサンプルの紹介でした。

なんといってもPowerShell(x86)とPCOMMさえあればできるのでその手軽さが魅力です。

VBAでも同じことができるので、ぜひそちらについて紹介した記事もご覧頂ければ幸いです。お好みでお好きな方で実装ください。

www.tekizai.net

というわけで、ここまでお読みいただき、ありがとうございました。