こんにちは、けいぞうです。
前回の記事「PowerShellの基本的な使い方」は以下です。
今回は「変数」をテーマに進めていきます。
変数とは
変数とは、一時的に情報を保存しておくための箱のような物です。
プログラムを実行するときに、コンピュータは様々な情報を記憶しておく必要があり、その情報の保管場所として変数を使います。
例えば
『ユーザーが入力した「名前」「生年月日」「年齢」を画面に表示する』
というプログラムを作るとします。
この時、処理の流れとしては、以下の通りになります
- ユーザーに画面から名前・生年月日・年齢を入力してもらう
- 入力してもらった値をそれぞれ名前・生年月日・年齢を格納する変数に入れる
- それぞれの変数から値を取り出して、画面に表示する
名前を「入力」して「変数に格納」して「画面に表示」する処理イメージ
![](http://trend-desk.com/wp-content/uploads/2020/07/image-12-1024x477.png)
変数の識別子
変数には名前をつける必要があります。
どの情報をどの箱に入れたか分かるようにしておくためですね。
プログラミングでは、この名前のことを一般的に「識別子」と呼びます。
変数の名前ことなので「変数名」と呼んだりもします。
変数名の付け方にはプログラミング言語によって異なるのですが、
PowerShellの変数名のルールは以下です
- $から始まる
- 使用できる文字は数字、アルファベット、アンダースコア( _ )
- アルファベットの大文字と小文字は区別しない
ざっくり上記の3のルールからなります。
例えば、名前の変数なら
$name
生年月日の変数なら
$birthday
年齢の変数なら
$age
みたいな感じで、英数字しか使えないのでたいてい英語で作ることが多いです。
複数人の氏名を入力してもらう場合は
$name1, $name2, $name3・・・といった形で数字を使ったりします。
変数名にアンダースコアを利用できると書きましたが
「$_」
これだけは使うことができません。
「$_」は特殊な使い方をする変数で、既に最初から用意されているものだからです。
詳しくはコチラ⇩
変数の型
変数には”型”(かた)という考え方があります。
これは、変数の中に入っている値がどんな種類なのか?ということを決めるものになります。
よく使う型は以下です。
- 文字列型(String)
- 数値型(Int32など)
- 日付型(DateTime)
- 真偽値(Boolean)
PowerShellでは変数に値を入れたら自動で型を認識してくれます。
文字列型は文字通り文字列を扱う型です。
“”(ダブルクオーテーション)や”(シングルクオーテーション)で囲みます。
$StrValue = “これが文字列型ABCDEFGPOWERSHELL”
数値型には整数を扱う型や小数を扱う型などがあります。
クオーテーションで囲わずに数字だけでしています。
$IntValue = 12345
日付型は年月日時分秒が入っている型です。
例えばGet-Dateコマンドを打つと今の年月日時分秒を取得することが出来ます。
$nowDate = Get-Date
Write-Host $nowDate
>2020年7月19日 22:17:10
真偽値はTrueなのかFalseなのかどちらかを表す型になります。
PowerShellでは真を$true、偽を$falseで表します。
$Flag = $true
PowerShellで変数の型を確認するにはその変数に「.GetType()」をつけます
![](http://trend-desk.com/wp-content/uploads/2020/07/image-13.png)
整数値の数値型にはInt32とかInt64とか種類があるのですが
この数字の部分は、変数に格納することが出来る値の最大値を意味します。
詳しくは⇩の記事を参照。
変数を使ってみる
では、これまで説明した内容を使って
実際に簡単なプログラムを作っていきましょう。
先ほどの例にもあげた
『ユーザーが入力した「名前」「生年月日」「年齢」を画面に表示する』
を今回は作っていきます。
Write-Hostコマンドは画面に出力させるコマンドでしたよね。
今回は画面から入力させる必要がありますが、Read-Hostというコマンドを使います。
<受け取る変数> = Read-Host “表示したいメッセージ”
例えば、名前を入力させたい場合はこんな風に書きます。
$name = Read-Host “名前を入力してください”
これを実行するとこうなります。
![Windows PowerSheII
$name -
Read-Host](http://trend-desk.com/wp-content/uploads/2020/07/image-14.png)
入力してみましょう。
!["WindowsPowerShell
PS C:%work>
$name
Read-Host
月 リ 入 刀 し て く に き し 、
名 前 を 入 力 し て く だ さ い . け い ぞ う
PS C:%work>](http://trend-desk.com/wp-content/uploads/2020/07/image-15.png)
入力したら「$name」と打ってみてください。
$nameの中身を取り出して表示することが出来ます。
![Windows PowerSheII
PS C'.
$name
PS](http://trend-desk.com/wp-content/uploads/2020/07/image-16.png)
PowerShellでは変数をただ書いただけで中身を表示してくれますが
そうではないプログラミング言語もあります。(そうではない方が一般的かも)
その場合は画面に出力することを明示的に書いてあげる必要があります。
PowerShellの場合は、Write-Hostコマンドですね。
![Windows PowerSheII
PS C: Wr ite-Host
$name](http://trend-desk.com/wp-content/uploads/2020/07/image-17.png)
Write-Hostの前後に文字をくっつけて、こんな風に出力することもできます。
![Windows PowerSheII
PS Write
t-sZfitl(t
-Host
$name
e h, -c Y nac](http://trend-desk.com/wp-content/uploads/2020/07/image-18.png)
実際に作ってみる
こんな感じで氏名・生年月日・年齢を入力してもらって
画面に表示するプログラムを作成していきましょう。
まずは空のps1ファイルを作成しましょう。
ここでは例として、
「C:\work\Script\TEST」フォルダの中に
「VariableTest.ps1」というps1ファイルを作成します。
※Variableは変数という意味です。
ps1ファイルを作成したらそれをエディターを開きます。
PowerShell ISEを使う人はPowerShell ISEで
VSCodeを使うひとはVSCodeで開いてください
※この記事では全てVSCodeを例として話を進めていきますね。
左上のFileから「Open File」を選択
![dPH 09 Man - 一 BE 一
0 + D
0 + D Y+PD
N+WO
; ed 一 0m0- ℃ 一
MOPUIM'••"BN
uadO
: 一 uadO](http://trend-desk.com/wp-content/uploads/2020/07/image-19.png)
先ほど作った「VariableTest.ps1」を選択して「開く」をクリック
![PC Application Volume (C:) work Script TEST
%riabIeTest.psI
2020/07/19 u](http://trend-desk.com/wp-content/uploads/2020/07/image-20.png)
こんな感じで空っぽのファイルが開きます
![File Edit Selection View
VariableTestps1 X
c > work > Script > TEST >
Go
Run Terminal
VariableTest.ps1
Help
VariableTest.psI
- Visual Studio Code
p
PROBLEMS OUTPUT
DEBUG CONSOLE
TERMINAL](http://trend-desk.com/wp-content/uploads/2020/07/image-21-1024x670.png)
そしたら、早速ここにプログラムを書いていきましょう!!
出来上がったものがコチラになります⇩
![VanableTestps1 X
c >work)Script >TEST> 》 - VariableTest. PSI > .
1
4
フ
18
13
15
1 フ
# 名 前 を 入 力 し て も ら う
$ n 旧 = Read-Host " 名 前 を 入 力 し て く だ さ い ( 例 : 山 田 太 即 )
# 生 年 月 日 を 入 力 し て も ら う
$birthday = Read-Host " 生 年 月 日 を 入 力 し て く だ さ い ( 例 : 年 1 月 1 日 )
# 年 齡 を 入 力 し て も ら う
Sage = Read-Host " 年 齡 を 入 力 し て く だ さ い ( 例 : 25 )
# 名 前 を 表 示
Write-Host " : 名 有 : ・ $name
# 生 年 月 日 を 表 示
Write-Host " 生 年 月 日 : "$birthday
# 年 齡 を 表 示
Write-Host " 年 齡 : $agd](http://trend-desk.com/wp-content/uploads/2020/07/image-22.png)
書き終わったらファイルを保存しましょう。
左上のFileからSaveで保存、またはCtrlキーを押しながらSキーで保存ができます。
保存したら実行してみましょう。
VSCodeの下に表示されているのウィンドウをターミナルウィンドウと呼びます。ここで実行します。
実行の仕方は普通のPowerShellと同じ。
カレントディレクトリを「C:\work\Script\TEST」に移動させて
「VariableTest.ps1」を実行するだけです。
![PROBLEMS OUTPUT DEBUG CONSOLE
PS C : \純rk\5ロ 、 ipt\TEST> . Wariab1eTest. P51
名 前 を 入 力 し て く だ さ い ( 例 : 山 田 太 即 ) : け い そ う
生 年 月 日 を 入 力 し て く だ さ い ( 例 : 2e 年 1 月 1 日 ) : 2e2e 1 1 日
年 齡 を 入 力 し て く だ さ い ( 例 : 25 )
名 前 : け い そ う
生 年 月 日 : 2e2e 年 1 月 1 日
年 帛 : 25
PS C : \純rk\5ロ 、 ipt\TEST> ー](http://trend-desk.com/wp-content/uploads/2020/07/image-23.png)
無事入力した情報を出力させることができました~!
文字化けする場合
実行したらターミナルウィンドウに日本語が表示されるはずですが
読めない気持ち悪い文字が表示されてしまうことがあります。
⇩こんな感じ
![PROBLEMS OUTPUT DEBUG CONSOLE TERMINAL
PS C: .\Variab1eTest. PSI
• fit •
Read-Host](http://trend-desk.com/wp-content/uploads/2020/07/image-25.png)
これは文字コードというものの設定が関係しています。
※ここでは細かい話は抜きとします
文字コードの設定は右下の表示で確認できます。
![Ln 17, Col 21 Spaces: 4 UTF-8 CRLF PowerSheII Starting PowerSheII„.](http://trend-desk.com/wp-content/uploads/2020/07/image-26.png)
この「UTF-8」というのが文字コードの一種です。
どうやら、ここがUTF-8になっていると文字化けしてしまうようです。
UTF-8の部分をクリックすると、上部に⇩のような選択肢が出てくるので
「Save the Encoding」を選択
![Select Action
Reopen "ith Encoding
Save with Encoding](http://trend-desk.com/wp-content/uploads/2020/07/image-27.png)
すると文字コード種類が一覧で出てきます。
![select File Encoding to Save with
UTF-8
UTF-8 with 80M utf8bom
UTF-16 LE utf161e
UTF-16 BE utf16be
western (Windows 1252) windowsi252
western (ISO 8859-1) is088591
western (ISO 8859-3) is088593
western (ISO 8859-15) is0885915
Westem (Mac Roman) macroman
DOS (CP 437) cp437
Arabic (Windows 1256) windowsi256
Arabic (ISO 8859-6) is088596
Baltic (Windows 1257) windowsi257
Baltic (ISO 8859-4) is088594
Celtic (ISO 8859-14) is0885914
Central European (Windows 1250) windows1250
central European (ISO 8859-2) is088592
central European (CP 852) cp852](http://trend-desk.com/wp-content/uploads/2020/07/image-28.png)
ここに「Shift JIS」と入力
出てきた「Japanese(Shift JIS)」を選択してください。
![Shift JIS
Japanese (Shift JIS) shiftjis](http://trend-desk.com/wp-content/uploads/2020/07/image-29.png)
もう一度実行してみてください。
きっと日本語がちゃんと表示されたと思います。
練習問題
問題
「昨日の天気」と「今日の天気」を入力してもらい、入力した情報を使って以下のように画面に表示させるプログラムを作ってみましょう。
・昨日の天気は○○、今日の天気は××です。
![](http://trend-desk.com/wp-content/uploads/2020/07/job_kisyou_yohou.png)
答え
![c >work)Script >TEST> 》 - WeatherTest. P51 ) .
1
4
フ
# 昨 日 の 天 気 を 入 力 し て も ら う
$yesterdayweather = Read-Host " 昨 日 の 天 気 を 入 力 し て く だ さ い 。
す 今 日 の 天 気 を 入 力 し て も ら う
$todayweather = Read-Host " 今 日 の 天 気 を 入 力 し て く だ さ い 。
# 結 果 を 表 示
Write-Host " 昨 日 の 天 気 は $yesterdayweather 今 日 の 天 気 は $todayweather で す 。](http://trend-desk.com/wp-content/uploads/2020/07/image-30.png)
![PROBLEMS OUTPUT DEBUG CONSOLE
PS C : \純rk\5ロ 、 ipt\TEST> . \WeatherTest. P51
昨 日 の 天 気 を 入 力 し て く だ さ い 。
晴 れ
今 日 の 天 気 を 入 力 し て く だ さ い 。 : 雨
昨 日 の 天 気 は 晴 れ 今 日 の 天 気 は 雨 で す 。
PS C : \純rk\5ロ 、 ipt\TEST> ー](http://trend-desk.com/wp-content/uploads/2020/07/image-31.png)
最近のコメント