HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


PowerShellの開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > PowerShell Tips > 自作関数 Tips メニュー

19.複数行の入力を取得する

 
UPDATE:2008/05/03    
 



PowerShellでは複数行の入力を読み取るコマンドレットがありません。
そこでコマンドラインから複数行の入力を取得する関数を作成しました。
下記が、複数行の入力を受け取るRead-MultiLine関数です。

Read-MultiLine.ps1

#=========================================================================================
# Read-MultiLine: コマンドラインから複数行の入力を受け取る
#
# UPDATE 2008/04/24 Ver.1.0.0
# 2008/05/01 Ver.1.0.1 終了判定文字に1文字以上の文字列を指定できるよう修正
#
# copyright HIRO's.NET(http://hiros-dot.net/)
#=========================================================================================
function global:Read-MultiLine ( [string]$prompt, [string]$endChar = ";" ){
if ($args[0] -eq "-?" )
{
Write-Host @"
名前:
Read-MultiLine

概要:
コマンドラインから複数行文字列を取得します。

構文:
Read-MultiLine [-prompt] [-endChar]

使用方法:
-------------------------- 例 1 --------------------------
`$a = Read-MultiLine

この例はコマンドラインから複数行を取得し行終端が";"の場合に読み取りを中止し結果を返します。
入力の終了を判定する文字は";"が規定値です。

-------------------------- 例 2 --------------------------
`$a = Read-MultiLine -prompt "文字列を入力してください"

この例はプロンプトに"文字列を入力してください"と表示した後に入力を受け付けます。

-------------------------- 例 3 --------------------------
`$a = Read-MultiLine -endChar "#"

この例は入力の終了を判定する文字を"#"とします。
ユーザー入力の行終端が"#"である場合に、入力を中断し結果を返します

-------------------------- 例 4 --------------------------
`$a = Read-MultiLine -endChar "EOF"

この例は入力の終了を判定する文字を"EOF"とします。
ユーザー入力の行終端が"EOF"である場合に、入力を中断し結果を返します

"@ -foregroundcolor Cyan
return
}
if ( $prompt.Length -gt 0 ){ Write-Host ($prompt + ":") }

while(1)
{
$ip += Read-Host
if ($ip.SubString($ip.Length - $endChar.Length) -eq $endChar){ break; }
else{$ip += "`n"}
}
#Write-Host $ip


return $ip.Substring(0, $ip.Length - $endChar.Length)
}

この関数は、実行すると";"が入力されるまで、複数行に渡る文字列の読み取りを行います。

List1

PS > $inp = Read-MultiLine
ABC
DEF
GHI;

下記のようにするとプロンプトを表示した後に入力を受けつけます。

List2

PS > $inp = Read-MultiLine "入力してください"
入力してください:
This
is
Read-MultiLine
Command;

また、下記のようにすると終了判定文字を";"から"#"に変更することができます。

List3

PS > $inp = Read-MultiLine -endChar "#"
ABC
DEF
GHI#