こんにちは、けいぞうです。
前回の記事「PowerShellの基本的な使い方」は以下です。
今回は「変数」をテーマに進めていきます。
変数とは
変数とは、一時的に情報を保存しておくための箱のような物です。
プログラムを実行するときに、コンピュータは様々な情報を記憶しておく必要があり、その情報の保管場所として変数を使います。
例えば
『ユーザーが入力した「名前」「生年月日」「年齢」を画面に表示する』
というプログラムを作るとします。
この時、処理の流れとしては、以下の通りになります
- ユーザーに画面から名前・生年月日・年齢を入力してもらう
- 入力してもらった値をそれぞれ名前・生年月日・年齢を格納する変数に入れる
- それぞれの変数から値を取り出して、画面に表示する
名前を「入力」して「変数に格納」して「画面に表示」する処理イメージ

変数の識別子
変数には名前をつける必要があります。
どの情報をどの箱に入れたか分かるようにしておくためですね。
プログラミングでは、この名前のことを一般的に「識別子」と呼びます。
変数の名前ことなので「変数名」と呼んだりもします。
変数名の付け方にはプログラミング言語によって異なるのですが、
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()」をつけます

整数値の数値型にはInt32とかInt64とか種類があるのですが
この数字の部分は、変数に格納することが出来る値の最大値を意味します。
詳しくは⇩の記事を参照。
変数を使ってみる
では、これまで説明した内容を使って
実際に簡単なプログラムを作っていきましょう。
先ほどの例にもあげた
『ユーザーが入力した「名前」「生年月日」「年齢」を画面に表示する』
を今回は作っていきます。
Write-Hostコマンドは画面に出力させるコマンドでしたよね。
今回は画面から入力させる必要がありますが、Read-Hostというコマンドを使います。
<受け取る変数> = Read-Host “表示したいメッセージ”
例えば、名前を入力させたい場合はこんな風に書きます。
$name = Read-Host “名前を入力してください”
これを実行するとこうなります。

入力してみましょう。

入力したら「$name」と打ってみてください。
$nameの中身を取り出して表示することが出来ます。

PowerShellでは変数をただ書いただけで中身を表示してくれますが
そうではないプログラミング言語もあります。(そうではない方が一般的かも)
その場合は画面に出力することを明示的に書いてあげる必要があります。
PowerShellの場合は、Write-Hostコマンドですね。

Write-Hostの前後に文字をくっつけて、こんな風に出力することもできます。

実際に作ってみる
こんな感じで氏名・生年月日・年齢を入力してもらって
画面に表示するプログラムを作成していきましょう。
まずは空のps1ファイルを作成しましょう。
ここでは例として、
「C:\work\Script\TEST」フォルダの中に
「VariableTest.ps1」というps1ファイルを作成します。
※Variableは変数という意味です。
ps1ファイルを作成したらそれをエディターを開きます。
PowerShell ISEを使う人はPowerShell ISEで
VSCodeを使うひとはVSCodeで開いてください
※この記事では全てVSCodeを例として話を進めていきますね。
左上のFileから「Open File」を選択

先ほど作った「VariableTest.ps1」を選択して「開く」をクリック

こんな感じで空っぽのファイルが開きます

そしたら、早速ここにプログラムを書いていきましょう!!
出来上がったものがコチラになります⇩

書き終わったらファイルを保存しましょう。
左上のFileからSaveで保存、またはCtrlキーを押しながらSキーで保存ができます。
保存したら実行してみましょう。
VSCodeの下に表示されているのウィンドウをターミナルウィンドウと呼びます。ここで実行します。
実行の仕方は普通のPowerShellと同じ。
カレントディレクトリを「C:\work\Script\TEST」に移動させて
「VariableTest.ps1」を実行するだけです。

無事入力した情報を出力させることができました~!
文字化けする場合
実行したらターミナルウィンドウに日本語が表示されるはずですが
読めない気持ち悪い文字が表示されてしまうことがあります。
⇩こんな感じ

これは文字コードというものの設定が関係しています。
※ここでは細かい話は抜きとします
文字コードの設定は右下の表示で確認できます。

この「UTF-8」というのが文字コードの一種です。
どうやら、ここがUTF-8になっていると文字化けしてしまうようです。
UTF-8の部分をクリックすると、上部に⇩のような選択肢が出てくるので
「Save the Encoding」を選択

すると文字コード種類が一覧で出てきます。

ここに「Shift JIS」と入力
出てきた「Japanese(Shift JIS)」を選択してください。

もう一度実行してみてください。
きっと日本語がちゃんと表示されたと思います。
練習問題
問題
「昨日の天気」と「今日の天気」を入力してもらい、入力した情報を使って以下のように画面に表示させるプログラムを作ってみましょう。
・昨日の天気は○○、今日の天気は××です。

答え


最近のコメント