●パソコンでパワーシェル(PSH)を簡単に使う
パソコンを使うとき、どうしてもWindowsコマンドを利用する必要があるため、最初に導入編して「Winコマンド快適利用のGUI基本窓」を紹介しました。次に本題のPSH利用「基本編」として、PSH基本窓アプリと次の3種類の応用アプリを紹介します。進む>
(1)[PSH基本窓アプリ]...簡単にPSH短文アプリや1ファイル起動アプリが作れます。例として次のアプリを紹介います。
「初心者のPSH勉強支援」「PSH短文アプリ例」「株屋さんチャート管理お助けくん」
(2)[GUI窓PSH統合アプリ]...利便性拡大を目指しプログラム部とコマンド登録部を分割したPSH機能拡張アプリ。分割することでPSH処理拡張が可能になります([PSHメモ帳]を実現)。
(3)[rtfメモ帳(簡易版)]....統合アプリのTextをRichText利用に置きかえて[rtfメモ帳]を実現したアプリ。windowsメモ帳に「こんな機能があったら」という部分を組込めます。今回は簡易版として「背景色、文字色/フォント/寸法、画像貼付など」です。
上記の利用目的は夫々の記事で必要により紹介します。特に「PSHメモ帳」や「rtfメモ帳」を利用することで、30倍以上パソコン利用が快適になると思います。
●導入編の窓アプリにPSH処理を組込み「GUI窓PSH処理アプリ」を実現。
[1.1]導入編のアプリに次の[コピペList2.1.2]のPSH実行処理を追加して実現します。
- 初心者の方は[1.1]導入編と同様な手順で次のコピペ[List2.1.1]を使い[GUI窓PSH処理アプリ]を作成ください。
- 中級/上級者の方は[1.2]拡張編でコピー作成した[winCmd301.bat]を起動して、マウス[右釦]->[編集]から「List.2.1.2」「List2.1.3」を組込み編集して[GUI窓PSH処理アプリ]を作成してみてください(改造の練習)。編集&動作確認できたらファイル名を[wndPsh101.bat]に変更してください(次回利用)。またこのアプリの利用方法は、図2.1に記載します。
●コピペ[List2.1.1」[wndPsh101.bat]..ファイル作成手順は[1.1]導入編を参照ください。
@echo off &if not "%~0"=="%~dp0.\%~nx0" (start /min cmd /c,"%~dp0.\%~nx0" %* &exit) &rem ★DOS窓mini化
powershell -ExecutionPolicy RemoteSigned "$fln=(echo %0); $aa=(Cat $fln -Raw); $fdt=$aa.substring($aa.indexof('##'+'STT:')); Iex($fdt+'##>');"
exit; pause&exit;
##
##Ver1.071 2023/1101 by ryu #####################################
##
##STT: ★batファイルで[Gui窓PSH処理]を起動する(PSH複数文を実行)
##
using namespace System.Windows.Forms; Add-Type -AssemblyName System.Windows.Forms,System.Drawing; ##★GUI
function dbg($cc){ [MessageBox]::Show($cc) }; function dbc($zcc){ Write-Host $zcc; }; ##★DBG
function ssView($bb){ $tBox.Text=$bb.substring( $bb.indexof("`n<"+"##" )); $tBox.SelectionStart=0; $mMain.Text="[1.071]"+$fln; }; ##★表示
##★メイン窓/編集窓の生成 ##★窓寸法(WW,HH) ##★文字種類/寸法 ##★背景色
$mMain =New-Object Form -Pro @{ Size="920,620"; }; $tBox =New-Object TextBox -Pro @{ Font="BIZ UDゴシック,13"; BackColor="#C0E0C0";
Dock="Fill"; Multiline=$True; AcceptsReturn=$True; ScrollBars=[ScrollBars]::Vertical; }; $mMain.Controls.Add($tBox);
##★右釦メニュ ##★編集 ##★再表示 ##★クリップ処理 ##★機能追加
$tBox.ContextMenuStrip =$conMenu =New-object ContextMenuStrip -Pro @{ Font="BIZ UDゴシック,12"; };
function ssSetRbtMenu( $zcha ){ $aa=$conMenu.Items.Add( ($zcc =New-Object ToolStripMenuItem) ); $zcc.Text=$zcha; return $zcc; };
(ssSetRbtMenu "編集" ).add_Click({ notepad.exe $fln });
(ssSetRbtMenu "再表示").add_Click({ ssView( Cat $fln -Raw ) });
(ssSetRbtMenu "クリップへ取得").add_Click({ $tBox.Copy() });
(ssSetRbtMenu "クリップを貼付").add_Click({ $tBox.Paste() });
##★マウス[WC]操作 ##★DOS処理 ##★explorer処理 ⇒ ★psh追加⇒★画面設定⇒MainDLG表示 ##★Tool窓起動
$tBox.Add_DoubleClick({ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1; $zcc=($tBox.Lines[$ln]-split"##")[0];
if( $zcc.startsWith("> ") ){ $zcc=$zcc.substring(1); if($zcc.contains(" cd ") ){ Iex($zcc) }; Start Cmd -Arg "/k $zcc"; return; };
if( $zcc.startsWith(">> ")){ $zcc=$zcc.substring(2); Start -NoN Cmd -Arg "/c $zcc"; return; };
if( $zcc.startsWith("&") ){ for( $ii=1; $ii -lt 200; $ii++ ){ $cc=$tBox.Lines[$ln+$ii]; if($cc -eq $null){ break; };
if( $cc.startsWith(";") ){ $zcc+="`n"+($cc.substring(1)).trim(); }else{ if( $cc.startsWith("#") ){ continue;}; break; }; }; }; ##dbc $zcc;
if( $zcc.startsWith("&&& ")){ $zcc=$zcc.substring(3); $tBox.SelectionStart+=4; Iex($zcc); return;};
$zcc=$zcc.replace('"','\"'); if( $zcc.startsWith("& ") ){ $zcc=$zcc.substring(1); Start powershell -Arg "-noe $zcc"; return; };
if( $zcc.startsWith("&& ") ){ $zcc=$zcc.substring(2); Start -NoN powershell -Arg "$zcc"; return; };
}); $fladd=$fln.replace(".bat","_add.ps1"); if( Test-Path $fladd ){ . $fladd; }; ssView($fdt); $mMain.ShowDialog();
<##Ver1.05b--[Gui窓PSH処理アプリ]----------------------------------------------------------
## [WC]各行をダブルクリック起動(右釦:編集/クリップ処理)
## [&]①窓有り起動 [&&]②窓無し起動 [&&&]③継続起動(窓無し) [;]④行連結起動
& Dir C:\ ##★[WC] ①Dir起動
&& mspaint ##★[WC] ②窓無し:ペイント起動
&& notepad ##★[WC] 窓無し:メモ帳起動
&&& mspaint ##★[WC] ③窓無し:継続起動
&&& dbg "aaaa" ##★[WC] dbg関数起動(DLG窓作成)
&&& dbc "cccc" ##★[WC] dbc関数起動(DOS窓)
& for($ii=0; $ii -lt 10; $ii++ ){ $ii; }; ##★[WC] 1行に複数のCMD実行
& for($ii=0; $ii -lt 10; $ii++ ){ ##★[WC] ④複数行(4)連結しCMD実行
; $dd = $ii * 2;
; "Data = $dd です";
; };
##★③継続起動の例(Step1~4)
&&& $global:aaa=10; ##★[WC] Step1:継続:global変数に代入
&&& dbg $aaa; ##★[WC] Step2:継続:dbg表示
&&& $global:aaa=20; ##★[WC] Step3:継続:代入変更
&&& dbg $aaa; ##★[WC] Step4:継続/複数行:dbg表示/dbc表示
; $aaa=$aaa+15;
; dbc $aaa; dbg $aaa;
[wndPsh101.bat]
●コピペ[List2.1.2]の入替
[手順] [winCmd301.bat]を起動し[マウス右釦][編集]から[List1.1.1]の25行~27行を[下記List]に入替え保存し[List2.1.3]の入替編集する。
if( $zcc.startsWith(">> ")){ $zcc=$zcc.substring(2); Start -NoN Cmd -Arg "/c $zcc"; return; };
if( $zcc.startsWith("&") ){ for( $ii=1; $ii -lt 200; $ii++ ){ $cc=$tBox.Lines[$ln+$ii]; if($cc -eq $null){ break; };
if( $cc.startsWith(";") ){ $zcc+="`n"+($cc.substring(1)).trim(); }else{ if( $cc.startsWith("#") ){ continue;}; break; }; }; }; ##dbc $zcc;
if( $zcc.startsWith("&&& ")){ $zcc=$zcc.substring(3); $tBox.SelectionStart+=4; Iex($zcc); return;};
$zcc=$zcc.replace('"','\"'); if( $zcc.startsWith("& ") ){ $zcc=$zcc.substring(1); Start powershell -Arg "-noe $zcc"; return; };
if( $zcc.startsWith("&& ") ){ $zcc=$zcc.substring(2); Start -NoN powershell -Arg "$zcc"; return; };
●コピペ[List2.1.3]の入替
[手順] 上記の[List2.1.2]入替から、[List1.1.1]の30行~50行を[下記List]に入替え保存しアプリを終了した後、ファイル名を[wndPsh101.bat]に変更する。
<##Ver1.05b--[Gui窓PSH処理アプリ]----------------------------------------------------------
## [WC]各行をダブルクリック起動(右釦:編集/クリップ処理)
## [&]①窓有り起動 [&&]②窓無し起動 [&&&]③継続起動(窓無し) [;]④行連結起動
& Dir C:\ ##★[WC] ①Dir起動
&& mspaint ##★[WC] ②窓無し:ペイント起動
&& notepad ##★[WC] 窓無し:メモ帳起動
&&& mspaint ##★[WC] ③窓無し:継続起動
&&& dbg "aaaa" ##★[WC] dbg関数起動(DLG窓作成)
&&& dbc "cccc" ##★[WC] dbc関数起動(DOS窓)
& for($ii=0; $ii -lt 10; $ii++ ){ $ii; }; ##★[WC] 1行に複数のCMD実行
& for($ii=0; $ii -lt 10; $ii++ ){ ##★[WC] ④複数行(4)連結しCMD実行
; $dd = $ii * 2;
; "Data = $dd です";
; };
##★③継続起動の例(Step1~4)
&&& $global:aaa=10; ##★[WC] Step1:継続:global変数に代入
&&& dbg $aaa; ##★[WC] Step2:継続:dbg表示
&&& $global:aaa=20; ##★[WC] Step3:継続:代入変更
&&& dbg $aaa; ##★[WC] Step4:継続/複数行:dbg表示/dbc表示
; $aaa=$aaa+15;
; dbc $aaa; dbg $aaa;
[図2.1] WndPSH窓の起動画面
[利用方法]....[wndPsh101.bat]ダブルクリック起動後
- 上記画面の各PSH行をダブルクリックするとそのPSH文が起動する。例えば[& Dir C:\]行をダブルクリックすると、C:\ のフォルダ内がPSH窓に表示される。
- ①[&]で始まる行はPSH窓を表示し、②[&&]で始まる行はPSH窓を表示しないで、PSH行を起動する。
- 上記画面は、キーボードで自由に編集しダブルクリックで起動可能です。例えば[& Dir C:\tmp]とtmpを追加すれば、tmpフォルダ内が表示される。なお編集内容は一時利用のため保存されません。編集内容の保存は「6項」を参照ください。
- ③[&&&]で始まる行は、PSH処理の継続処理です(PSH窓表示無し)。よってこのwndPshアプリ内の関数dbg/dbcが利用可能です。継続処理のためglobal登録した変数や関数は次の[&&&]行でも利用可能です。
- ④[;]で始まる連続行は、行連結した後、上記の[&]、[&&]、[&&&]処理を実行します。上記例のfor文行をダブルクリックして動作確認してください。
- 上記画面で[マウス右釦]に、[編集]、[再表示]、[クリップ取得]、[クリップ貼付]の機能を組込んでいるので、[右釦]押下でメニュを表示し選択利用する。[編集]選択で、[wndPsh101.bat]ファイルが[メモ帳]で開くので編集し保存する。保存後、上記画面への反映は[右釦]押下で[再表示]選択で行う。
- 各行の[##]以降にコメント記載可能です。
- [>][>>]で始まる行は今回「explorer関連コマンド処理」を削除してます。
●コピペ[List2.1.5」..[wndPsh151.bat]
PSH基本窓アプリ(その2)として[反映]釦付き窓メニュー版を次に掲載します。
[反映]釦は画面内容を編集したときwindowsメモ帳を使わないでbatファイルに編集内容を反映保存します(bakファイル保存付き)。
@echo off &rem if not "%~0"=="%~dp0.\%~nx0" (start /min cmd /c,"%~dp0.\%~nx0" %* &exit) &rem ★DOS窓mini化
powershell -Exe RemoteSigned "$fln=(echo %0); $aa=(Cat $fln -Raw); $fdt=$aa.substring($aa.indexof('##'+'STT:')); Iex($fdt+'##>');"
exit; pause&exit;
##Ver1.081 wndPsh151.bat by ryu 2025/0105 #####################################
##
##STT: ★batで[GuiPSH処理基本窓]を起動(その2:画面メニュ付き)
using namespace System.Windows.Forms; Add-Type -AssemblyName System.Windows.Forms,System.Drawing; ##★GUI
function dbg($cc){ [MessageBox]::Show($cc) }; function dbc($zcc){ Write-Host $zcc; }; function dbt($cc){ $mMain.Text="[V1.081]"+$cc;};##★DBG
function MsgYesNo($cc0,$cc1,$cc2){ $cc2="YesNo"; return [MessageBox]::Show($cc1,$cc0,$cc2); };##★YesNo
function ssView($bb){ $tBox.Text=$bb.substring( $bb.indexof("`n<"+"##" )); $tBox.SelectionStart=0; dbt($fln); }; ##★表示
##★メイン窓/編集窓の生成 ##★窓寸法(WW,HH) ##★文字種類/寸法 ##★背景色
$mMain=New-Object Form -Pro @{ Size="920,620"; }; $tBox=New-Object TextBox -Pro @{ Font="BIZ UDゴシック,13"; BackColor="#DDFFBB";
Dock="Fill"; Multiline=$True; AcceptsReturn=$True; ScrollBars=[ScrollBars]::Vertical; }; $mMain.Controls.Add($tBox);
$mMain.MainMenuStrip =$dListMenu =New-Object MenuStrip -Pro @{ Font="BIZ UDゴシック,12"; }; $mMain.Controls.Add($dListMenu);
function ssDMnMenu($zcc){ $zmm=New-Object ToolStripMenuItem; $zmm.Text=$zcc; $dListMenu.Items.AddRange($zmm); $global:szMnBas=$zmm; return $zmm;}
function ssDMnMSet($zcc){ $zmm=New-Object ToolStripMenuItem; $zmm.Text=$zcc; $szMnBas.DropDownItems.AddRange($zmm); return $zmm;}
(ssDMnMenu "[反映]").add_Click({ dbg ("[反映]`n$fln");
$zcc=Cat $fln -Raw; SC ($fln+".bak") $zcc -Force; SC $fln ($zcc.substring(0,$zcc.indexof("`n<#"+"#V"))+$tBox.Text) -Force; });
(ssDMnMenu "[bak]").add_Click({ notepad ($fln00+".bak") }); $fln00=$fln;
(ssDMnMenu "[再表示]").add_Click({ ssView( Cat $fln00 -Raw ) }); (ssDMnMenu "[編集]" ).add_Click({ notepad.exe $fln00 });
(ssDMnMenu "[Help]" ).add_Click({ Start "https://ryupapa008.blogspot.com/2024/08/guipsh.html#_List2.1.5" });
##★マウス[WC]操作 ##★DOS処理 ##★explorer処理 ⇒ ★psh追加⇒★画面設定⇒MainDLG表示 ##★Tool窓起動
$tBox.Add_DoubleClick({ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1; $zcc=($tBox.Lines[$ln]-split"##")[0];
if( $zcc.startsWith("> ") ){ $zcc=$zcc.substring(1); if($zcc.contains(" cd ") ){ Iex($zcc) }; Start Cmd -Arg "/k $zcc"; return; };
if( $zcc.startsWith(">> ")){ $zcc=$zcc.substring(2); Start -NoN Cmd -Arg "/c $zcc"; return; };
if( $zcc.startsWith("&") ){ for( $ii=1; $ii -lt 200; $ii++ ){ $cc=$tBox.Lines[$ln+$ii]; if($cc -eq $null){ break; };
if( $cc.startsWith(";") ){ $zcc+="`n"+($cc.substring(1)).trim(); }else{ if( $cc.startsWith("#") ){ continue;}; break; }; }; }; ##dbc $zcc;
if( $zcc.startsWith("&&& ")){ $zcc=$zcc.substring(3); $tBox.SelectionStart+=4; Iex($zcc); return;};
if( $zcc.startsWith("& ") ){ $zcc=$zcc.substring(1); $zcc=$zcc.replace('"','\"'); Start powershell -Arg "-noe $zcc"; return; };
if( $zcc.startsWith("&& ") ){ $zcc=$zcc.substring(2); $zcc=$zcc.replace('"','\"'); Start -NoN powershell -Arg "$zcc"; return; };
(ssWClkCmd $ln $zcc); ##★ssWC追加対応
}); function global:ssWClkCmd($ln,$zcc){;}; ##dummy-Set
##★
##★
$fladd=$fln.replace(".bat","_add.ps1"); if( Test-Path $fladd ){ . $fladd; }; ssView($fdt); $mMain.ShowDialog();
<##Ver1.10b--[PSH基本窓アプリ]----------------------------------------------------------
## [WC]ダブルクリック起動 [&]起動 [&&]窓無し起動 [&&&]継続起動 [;]行連結起動
& Dir C:\ ##★[WC] Dir起動
&& mspaint ##★[WC] ペイント起動
&& notepad ##★[WC] メモ帳起動
&&& dbg "aaaa" ##★[WC] dbg関数(DLG窓作成)
&&& dbc "cccc" ##★[WC] dbc関数(DOS窓)
& for($ii=0; $ii -lt 10; $ii++ ){ $ii; }; ##★[WC] 1行に複数のCMD実行
& for($ii=0; $ii -lt 10; $ii++ ){ ##★[WC] 複数行(4)連結しCMD実行
; $dd = $ii * 2;
; "Data = $dd です";
; };
##★③継続起動の例(Step1~4)
&&& $global:aaa=10; ##★[WC] Step1:継続:global変数に代入
&&& dbg $aaa; ##★[WC] Step2:継続:dbg表示
&&& $global:aaa=20; ##★[WC] Step3:継続:代入変更
&&& dbg $aaa; ##★[WC] Step4:継続/複数行:dbg表示/dbc表示
; $aaa=$aaa+15;
; dbc $aaa; dbg $aaa;