2.1 基本編( GUI-PSH基本窓アプリで簡単にパワーシェル言語を使う)

●パソコンでパワーシェル(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]ダブルクリック起動後
  1. 上記画面の各PSH行をダブルクリックするとそのPSH文が起動する。例えば[& Dir C:\]行をダブルクリックすると、C:\ のフォルダ内がPSH窓に表示される。
  2. ①[&]で始まる行はPSH窓を表示し、②[&&]で始まる行はPSH窓を表示しないで、PSH行を起動する。 
  3. 上記画面は、キーボードで自由に編集しダブルクリックで起動可能です。例えば[& Dir C:\tmp]とtmpを追加すれば、tmpフォルダ内が表示される。なお編集内容は一時利用のため保存されません。編集内容の保存は「6項」を参照ください。
  4. ③[&&&]で始まる行は、PSH処理の継続処理です(PSH窓表示無し)。よってこのwndPshアプリ内の関数dbg/dbcが利用可能です。継続処理のためglobal登録した変数や関数は次の[&&&]行でも利用可能です
  5. ④[;]で始まる連続行は、行連結した後、上記の[&]、[&&]、[&&&]処理を実行します。上記例のfor文行をダブルクリックして動作確認してください。
  6. 上記画面で[マウス右釦]に、[編集]、[再表示]、[クリップ取得]、[クリップ貼付]の機能を組込んでいるので、[右釦]押下でメニュを表示し選択利用する。[編集]選択で、[wndPsh101.bat]ファイルが[メモ帳]で開くので編集し保存する。保存後、上記画面への反映は[右釦]押下で[再表示]選択で行う。
  7. 各行の[##]以降にコメント記載可能です。
  8. [>][>>]で始まる行は今回「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;


更新状況

新記事登録でgoogle検索不可の状態です。原因不明の全ページgoogleインデックス未登録の状態です。昨年11月から記事が書けずに非常に困っています。 MSNサイトから[コピペgui]で検索利用ください。最新の[コピペ一覧]ページを追加しました。

ブログ検索

QooQ