テクセル

PowerShellでコンソール操作


PowerShellでコンソール操作を行います。

1)画面クリア

画面をクリアします。


[Console]::Clear()
            

2)コンソールのタイトル

コンソールウインドウのタイトルを設定または、取得を行います。


$title = [Console]::Title                    # コンソールウインドウのタイトル取得
[Console]::Title = "コンソールのテスト"      # コンソールウインドウのタイトル設定
            

3)文字表示

コンソールに文字を表示します。


[Console]::Write("日本")
[Console]::WriteLine("千葉県")
Write-Host "文字を表示"
Write-Output "powershell"
            

Writeは、表示後改行しません。WriteLine, Write-Host、Write-Outputは、表示後改行します。
Write-Outputは、オブジェクトをパイプラインの次のコマンドに渡します。パイプラインが省略されている場合はコンソールに表示されます。

書式指定による表示例


# format.ps1
# 複合書式指定
[Console]::WriteLine("{0,12:#.000}", 12345.67)   # 12345.670   小数点以下3桁
[Console]::WriteLine("{0,8:C}", 12345)           # \12,345     通貨
[Console]::WriteLine("{0,8:X}(HEX)", 12345)      # 3039        16進

# 書式演算子による書式指定
Write-OutPut("{0,10:#.0}" -f 12345.67)           # 12345.7     小数点以下1桁
Write-Host("{0,8:#}" -f 12345.67)                # 12346       整数
            

複合書式指定
書式演算子 -f [書式 -f オブジェクト1, オブジェクト2.....] .NET String.Format

Write-Host のカッコ有り無し動作の違い

4)キー入力

・Read-Host キー入力された1行分の文字列を読み取ります。


$sr = Read-Host "キー入力して下さい。"
            

Enterキーで入力文字列を読み取ります。戻り値:キー入力された文字列。

・ReadLine キー入力された1行分の文字列を読み取ります。


$srt = [Console]::ReadLine()
            

Enterキーで入力文字列を読み取ります。戻り値:キー入力された文字列。ISEでは入力待ちとなりません。

・Read キー入力された1文字を読み取ります。


# Console.Read の例
while($true){
   $ia = [Console]::Read()
   if ($ia -eq 10 -or $ia -eq 13){
      continue
   }
   [char]$ca = $ia
   [Console]::WriteLine("{0,4:G} {1,3:X} {2}", $ia, $ia, $ca)
   if ($ca -eq "q"){
      break;
   } 
}
            

戻り値: Int32 キー入力された文字コード
Enterキーで入力された1文字を読み取ります。データがない場合は入力待ちとなります。すでにデータがある場合は文字を読み取ります。
上記プログラムは、コンソールウインドウで実行して下さい。ISEでは、エラーとなります。

5)押されたキーの取得

押された文字キー、ファンクションキーを取得します。


$key = [Console]::ReadKey($false)         # or $key = [Console]::ReadKey()
$key = [Console]::ReadKey($true)
            

押されたキーを取得します。
引数 $false または指定なし:押されたキーを表示します。 $true:押されたキーを表示しません。
戻り値: ConsoleKeyInfo オブジェクト

ConsoleKeyInfoのプロパティ
Key 取得したコンソールキー ConsoleKey 
KeyChar 取得したUnicode文字
Modifiers 同時に押される 1 つ以上の修飾子キー


# Readkey.ps1

while($true){
   $key = [Console]::ReadKey($false)
   [Console]::WriteLine(" Key:{0} keyChar:{1} Modifiers:{2}", $key.Key, $key.KeyChar, $key.Modifiers)
   if ($key.Key -eq "Q"){
      break
   }
}
            

実行例 上記プログラムは、コンソールウインドウで実行して下さい。ISEでは、エラーとなります。

6)キーが押されたかどうかの判定

キーが押されたかどうかの値を取得します。 プロパティ


$br = [Console]::KeyAvailable
            

押されたキーが入力ストリームに存在するかどうかを示す値を取得します。
戻り値: true:存在する false:それ以外

7)文字色の設定

表示文字、バック色の設定を行います。ConsoleColor列挙体の値または、数値で指定します。


# バック色の設定
[Console]::BackgroundColor = [ConsoleColor]::Yellow  # ConsoleColorの列挙体で指定
[Console]::BackgroundColor = 14                      # 数値で指定

# 文字色の設定
[Console]::ForegroundColor = [ConsoleColor]::Black   # ConsoleColorの列挙体で指定
[Console]::ForegroundColor = 0                       # 数値で指定
            

下記プログラムは、ConsoleColor列挙体の全色表示を行います。実行はコンソールウインドウで行って下さい。


# consColor.ps1

$currentBackground = [Console]::BackgroundColor
$currentForeground = [Console]::ForegroundColor

$colors = [ConsoleColor]::GetValues([ConsoleColor]); # 定数値配列の取得
$il = $colors.Count
for($ia = 0; $ia -lt $il; $ia++){
   [Console]::Write("{0,2:D}", $ia)
   [Console]::Write(" ")
   [Console]::BackgroundColor =  $colors[$ia]
   [Console]::Write("       ") 
   [Console]::BackgroundColor = $currentBackground
   [Console]::Write(" ")
   Write-Host $colors[$ia]
}
[Console]::ResetColor()
Write-Host
            

上記プログラムの実行結果

8)カーソル位置の指定

カーソルの位置を指定します。


[Console]::SetCursorPosition(int left, int top)
            

left:列の位置 列は、左から右に向かって、0から始まる番号
top:行の位置 行は、上から下に向かって、0から始まる番号

PowerShellメモ
©2021-2023 TEXCELL CORPORATION
テクセル株式会社