●GUIパワーシェル窓の利用(GUI基本窓)
◎私はパソコンを使い数十年です。最近はwindowsも複雑化しすぎて世代更新の都度戸惑うばかりです。そこでパワーシェル(PSH)を使い「100倍パソコンを快適に使う」を目指し紹介していきます。対象はパソコンを使う初心者、中級/上級者です。最初は導入編としてファイルにコピペ貼付して利用する[GUI窓から簡単にWinコマンドを実行]できるPSHアプリの紹介です。(GUI:Graphical User Interface)◎このGUI基本窓のPSHアプリは「3行のバッチコマンドと17行のパワーシェル」の約20行で構成されるテキストファイルを基本とします。そしてこのファイルの「<##VerXXX」行以下にDOSコマンドやWindowsコマンドを登録して使います(下図の<##Ver以下)。
◎このファイルは、windowsメモ帳を使って下記の[List1.1.1]をテキストファイルに張付けてファイル名を[winCmd001.bat]にしANSI設定で保存します。
そしてこのファイルをダブルクリックすると上記画面が表示され、表示画面のコマンド行をダブルクリックするとそのコマンドが起動します。詳細は[利用方法]を参照ください。
◎更にマウス[右釦]->[編集]押下でこのファイル[winCmd001.bat]でメモ帳が開きますので登録コマンドを追加して利用します。(上図の右小窓)
●GUIパワーシェル(PSH)の導入(Winコマンド簡単利用)
- マウス[右釦]->[新規作成]->[テキスト ドキュメント]を押下して[新しいテキスト ドキュメント.txt]を作成する。
- [新しいテキスト ドキュメント.txt]をマウスでダブルクリックし[メモ帳]を開き、マウスを使い下記の[List1.1.1]約50行をコピー&ペースト操作で[メモ帳]に貼り付ける。
- [メモ帳]左上の[ファイル]->[名前を付けて保存]押下->[図2]の手順でファイル保存する。右上[X]を押下し終了する。
@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.061 2023/1101 by ryu #####################################
##
##STT: ★batファイルでGUI-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.061]"+$fln; }; ##★表示
##★メイン窓/編集窓の生成 ##★窓寸法(WW,HH) ##★文字種類/寸法 ##★背景色
$mMain =New-Object Form -Pro @{ Size="920,620"; }; $tBox =New-Object TextBox -Pro @{ Font="BIZ UDゴシック,13"; BackColor="#F0F0C0";
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);
if($zcc.contains("explorer ")){;}else{ $zcc=($zcc.replace(" shell:","explorer shell:")).replace(" ms-","explorer ms-"); };
Start -NoN Cmd -Arg "/c $zcc"; };
}); $fladd=$fln.replace(".bat","_add.ps1"); if( Test-Path $fladd ){ . $fladd; }; ssView($fdt); $mMain.ShowDialog();
<##Ver1.01--by ryu------------------------------------------------------
## Windows Cmd 簡単利用(マウスで行をダブルクリック起動/右釦で編集/再表示)
> Dir c:\ ##[Dos] Dir起動 ・・・・[>]Dos窓利用
> Ver & Date /t ##[Dos] Verとdateの起動
> cd c:\tmp ##[Dos] フォルダ移動([>]のみ)
> Dir ##[Dos] 上記フォルダでDir起動
>> notepad ##[Exe] メモ帳起動・・・[>>]Dos窓無し
>> calc ##[Exe] 電卓
>> SnippingTool ##[Exe] 画面コピー
>> desk.cpl \,3 ##[Dlg] デスプレイのDlg設定
>> ms-settings: ##[Dlg] 設定のDlg窓
>> control ##[Lst] コントロールパネル
>> hdwwiz.cpl ##[Lst] デバイスマネージャ
>> rundll32 shell32,#61 ##[Dlg] ファイル名を指定実行のBOX
>> ms-clock: ##[Dlg] アラーム&クロック
>> shell:AppsFolder ##[Dir] アプリ一覧フォルダ⇒[WC]起動
>> shell:Downloads ##[Dir] ダウンロードのフォルダ
>> shell:::{E2E7934B-DCE5-43C4-9576-7FE4F75E7480} ##[Dlg] 日付と時刻の窓表示
![]() |
[図3] GUI基本窓の起動画面 |
(1)上記画面の各コマンド行をダブルクリックすると、そのコマンドが起動する。
例、[> Dir C:\ ]行をダブルクリックすると、C:\ のフォルダ内がDOS窓(黒い小窓)に表示される。なお[>]行はDOS窓を表示し、[>>]行はDOS窓を表示しないでコマンド行を起動する。
(2)上記画面はキーボードで自由に編集しダブルクリックで起動可能です。
例、[> Dir C:\tmp]とtmpを追加すれば、tmpフォルダ内が表示される。編集内容は一時利用のため保存されません。編集内容の保存は(3)項を参照ください。
(3)上記画面でマウス[右釦]に[編集][再表示][クリップ取得][クリップ貼付]を組込んでいるので、[右釦]押下でメニュ表示し選択する。
- [編集]選択で[winCmd001.bat]が[メモ帳]で開くので編集し保存する。保存後上記画面への反映は[右釦]->[再表示]で行う。
- 上記画面からのコピーはマウス右釦[クリップへ取得]を選択し、[メモ帳]右釦[貼り付け]で行う。
- [メモ帳]から上記画面へのコピーは[メモ帳]マウス右釦[コピー]から右釦[クリップを貼付]で行う。
●動作原理の説明
ダブルクリックでバッチファイルを起動するとDOS窓(黒い窓)が表示されるため1行目で素早くDOS窓を極小化しています。2行目でパワーシェルを起動してこのファイルの「##STT:」以下の行を切出しパワーシェルアプリとして起動します。そして3行目でバッチファイルを終了(exit)します。
001: @echo off &if not "%~0"=="%~dp0.\%~nx0" .... ★DOS窓mini化
002: powershell -ExecutionPolicy RemoteSigned.... ★パワーシェル起動
003: exit; pause&exit;...★バッチファイル終了
・[using namespace...行] でwindowsフォームのGUI窓モジュール利用を登録し次の行でデバッグ用関数dbg/dbcを登録しその次の行のssView関数で図3画面を表示しています。
009: using namespace System.Windows.Forms;....★GUIの利用
010: function dbg($cc){ [MessageBox]::Show....★DBG関数の登録
011: function ssView($bb){ $tBox.Text=...★画面表示関数の登録
★[名前を付けて保存]時、文字コード[ANSI]設定のこと
![]() |
[図4] GUI-PSH基本窓(メニュ付き) |
@echo off &rem 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.061 by ryu 2024/1221 #####################################
##STT: ★batファイルでGUI-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; }; function dbt($cc){ $mMain.Text="[V1.061]"+$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"; }; $szFont="BIZ UDゴシック"; $tBox =New-Object TextBox -Pro @{ Font="$szFont,13"; BackColor="#F0F0C0";
Dock="Fill"; Multiline=$True; AcceptsReturn=$True; ScrollBars=[ScrollBars]::Vertical; }; $mMain.Controls.Add($tBox);
$mMain.MainMenuStrip =$dListMenu =New-Object MenuStrip -Pro @{ Font="$szFont,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); $global:szMnBas2=$zmm; return $zmm;}
(ssDMnMenu "[反映]").add_Click({ dbg "[反映保存]`n`n$fln`n[bak]`n$fln.bak"; $zcc=Cat $fln -Raw; SC ($fln+".bak") $zcc -Force;
SC $fln ($zcc.substring(0,$zcc.indexof("`n<#"+"#V"))+$tBox.Text) -Force; }); (ssDMnMenu "[編集]").add_Click({ notepad $fln });
(ssDMnMenu "[bak]").add_Click({ notepad ($fln+".bak") }); (ssDMnMenu "[Help]").add_Click({ Start "https://ryupapa008.blogspot.com/2024/08/guiwin.html#_List1.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);
if($zcc.contains("explorer ")){;}else{ $zcc=($zcc.replace(" shell:","explorer shell:")).replace(" ms-","explorer ms-"); };
Start -NoN Cmd -Arg "/c $zcc"; };
}); $fladd=$fln.replace(".bat","_add.ps1"); if( Test-Path $fladd ){ . $fladd; }; ssView($fdt); $mMain.ShowDialog();
<##Ver1.01--by ryu------------------------------------------------------
## Windows Cmd 利用(行をダブルクリック起動)
> Dir c:\ ##[Dos] Dir起動 ・・・・[>]Dos窓利用
> Ver & Date /t ##[Dos] Verとdateの起動
> cd c:\tmp ##[Dos] フォルダ移動([>]のみ)
> Dir ##[Dos] 上記フォルダでDir起動
>> notepad ##[Exe] メモ帳起動・・・[>>]Dos窓無し
>> calc ##[Exe] 電卓
>> desk.cpl \,3 ##[Dlg] デスプレイのDlg設定
>> ms-settings: ##[Dlg] 設定のDlg窓
>> control ##[Lst] コントロールパネル
>> hdwwiz.cpl ##[Lst] デバイスマネージャ
>> rundll32 shell32,#61 ##[Dlg] ファイル名を指定実行のBOX
>> ms-clock: ##[Dlg] アラーム&クロック
>> shell:AppsFolder ##[Dir] アプリ一覧フォルダ⇒[WC]起動
>> shell:Downloads ##[Dir] ダウンロードのフォルダ