【PowerShell】基礎的な用語から

PowerShellはコマンドプロンプトの強化版ということで、業務のさまざまな場面で活用できます。

「get-command」を実行し、コマンドレット一覧を表示させ、そこから活用し業務に生かせるようになりたいです。

その前にPowerShellででてくる用語などについて理解しておきたいと思います。

1. 変数

PowerShell変数は、値やオブジェクトを格納するメモリの単位です。

変数は自動的に設定されるので、宣言する必要はなく、値を割り当てるか、New-Variableコマンドレットを使用することで変数の作成ができます。


変数を書くときのルールとして、

 ・$で始める

 ・単語が2個以上続くときは、_(アンダースコア)で繋ぐ

があります。

変数の一覧を確認する方法

Get-variableで確認する


変数の定義

変数の定義をするには下記のコマンドを実行しましょう。

$変数名=値

変数の値を削除

変数の値を削除するには下記のコマンドを実行しましょう。

$変数=$null

$nullを代入することで変数の中身を空にすることができます。

変数の削除

変数本体を削除するには下記のコマンドを実行しましょう。

Remove‐Vabiable 変数名

PowerShell のもともと組み込まれている変数を自動変数といいます。

自動変数の例

・$$ 前のコマンドラインの最後のトークン

・$? 最後に実行したコマンドの結果(成功か失敗か)

・$^ 前のコマンドラインの最初のトークン

・$args    スクリプトや関数、スクリプトブロックの引数

・$HOME ユーザーのホームディレクトリ

・$PID    現在の pwsh のプロセスID

・$PWD    現在のパス

など


ユーザー設定変数

ユーザーが変数の設定をし、PowerShell の挙動変更をすることができるものもあります。

いくつか例を挙げておきます。


・ConfirmPreference
危険度の高いコマンドレットや関数を実行する前に確認を求めるかどうか

・DebugPreference
デバッグでプロンプトを表示するかどうか

・ErrorActionPreference
例外発生時に実行を止めるかどうか

・FormatEnumerationLimit
表示されるアイテムの数

・InformationPreference
インフォメーションストリームを表示するかどうか

・MaximumAliasCount
エイリアス数の上限値

・MaximumDriveCount
ドライブ数の上限値

・MaximumErrorCount
エラー履歴保存数の上限値

・MaximumDriveCount
ドライブ数の上限値

・MaximumFunctionCount
関数の数の上限値

など

10. if制御構文の書き方

基本的には、下記に沿って、if 制御構文を作成して実行します。

if (条件1) {
    ステートメントリスト1
} elseif (条件2) {
    ステートメントリスト2
} else {
    ステートメントリスト3
}

条件1が真値であればステートメントリスト1が実行されます。

条件1が偽値で条件2が真値の場合にはステートメントリスト2が実行されます。

条件1が偽値で条件2が偽値の場合にはステートメント3が実行されます。


if(条件)の部分は必須ですが、elseifやelseは指定しなくても大丈夫です。

必要に応じて組み合わせて使いましょう。

11. switch構文

基本的な形は以下になります。

switch (式) {
    value1 { コードブロック1 }
    value2 { コードブロック2 }
    value3 { コードブロック3 }
    default { デフォルトのコードブロック }
}

value1、value2、value3は比較対象値であり、それぞれの値に対応するコードブロックが実行されます。

もしすべてに当てはまらない場合はdefaultのコードブロックが実行されます。


例:値だったり文字列だったりに応じてメッセージを表示


基本的なコマンドの削除コマンドを実際に使ってみました。

12. Remove-Item

ファイルやフォルダを削除する








PowerShellで削除する際の注意点!

手動でフォルダやファイルを削除した場合は、「ごみ箱」に入るのですが、PowerShellで削除した際はごみ箱に入らずに、「完全削除」されてしまいます。

コマンドでファイル削除するのは慎重にしましょう。

13. 最新のPowerShellインストール

推奨されているWingetを使用してインストールする方法で試してみました。


最新版をするためのコマンドは、公式のコマンドを参考にしました。

Windows への PowerShell のインストール - PowerShell | Microsoft Learn


①下記コマンドで実行します

winget search Microsoft.PowerShell

②「すべてのソース契約条件に同意しますか?」→y

③下記コマンドで実行します

winget install --id Microsoft.Powershell --source winget
winget install --id Microsoft.Powershell.Preview --source winget

④下記、画面のようにダウンロードが始まります。


最新版が無事インストールされました。

14. まとめ

コマンド操作も実践していかないとなかなかイメージがつきにくいので、さらによく使うコマンド操作については、使い方を知っておかなければいけないと思いました。

変数のルールや配列やパイプラインについて理解が深まりました。

実際に使っている例や用語について、さらに理解を深めていきたいです。

2. オブジェクト

PowerShell の特徴として、PowerShell はオブジェクトを扱う点が挙げられます。

コマンドプロンプトは文字列しか扱うことができません。

PowerShell の変数には、文字列などさまざまな型が格納できるのです。


例:
変数を定義して値を代入します。

$a=10

すべてのオブジェクトが持っているメソッドを使用します。

$a.GetType()


変数の型がInt32型であることが分かりました。


文字列を別の変数に代入します。

$b=”nanana”

Lengthプロパティを使って、文字列の長さを取得します。

$b.Length


実行結果で、6が返ってきました。

3. 配列

配列とは、数値や文字列、オブジェクトなどの要素となるものを、いくつかひとまとめにして順序付けて番号で管理するためのデータ構造です。

書く要素に振り分けられた番号をインデックスといいます。

また、基本的にインデックスの始まりは「0」です。


PowerShellはプログラミング言語ではありませんが、配列はほとんどの プログラミング言語にも備わっています。


https://anotools.com/shell/802/


PowerShellでは、基本的には配列の宣言と初期化を同時に行います。

配列を利用したいときは、まずは変数名に配列の要素を代入して初期化をします。


要素はカンマ(,)で列挙することで、配列として代入できます。

連続する整数値は、下記のように、範囲演算子(..)を使用して、

$array=0..3

のように表現されます。


@()を使用すると、$arrayは要素を持たない空の配列になります。

4. パイプライン

パイプラインはコマンドレットの処理結果を、次のコマンドへの入力として送ることができます。

パイプラインは|演算子を利用します。

コマンド1の結果をコマンド2の入力に与えます。

(コマンド1)|(コマンド2)


●PowerShell でのパイプラインの利用例について紹介します。

Get-ChildItemコマンドで取得したオブジェクトのNameプロパティの値が”t”の文字から始まる要素を取り出します。

Get-ChildItem | Where-Object {$_.Name -Like "t*"}

5. パラメータバインディング

パラメータバインディングとは、コマンド実行時にパラメータと引数を結びつける(バインドする)ことです。

必要なパラメータが揃っているのか、引数の型は適切なのかどうかを判断します。


※パラメータとは、プログラムの動作条件を与えるための情報を提供するために使用されます。

※引数とは、プログラムや関数に渡す値のことです。

6. ロギング

ロギングとは、起こった出来事について、情報などを時系列に記録・蓄積することをいいます。

またその記録されたデータのことをログといいます。

PowerShellでは、エンジンとプロバイダーの開始と停止、PowerShellコマンドの実行など、詳細についてログに記録されます。

PowerShell実行経過をログとして保存する方法について

以下のコマンドで、指定した保存先に保存することができます。

 Start-Transcript 指定したい保存先のパス\log.txt

 Stop-Transcript ログを終了したいときのコマンド



指定した保存先にlogが保存されているのが分かります。

7. PSプロバイダ

PowerShell のPSプロバイダーは、ファイル・システム以外にレジストリ、環境変数、Active Directoryなどのディレクトリ構造を持つ複数のリソースに対して、コマンドレットを用いてアクセス提供します。

プロバイダを切り替えて、その中のアイテムを表示しているのです。

8. PSドライブ

PowerShell のPSドライブとは、ファイルやフォルダなどにアクセスするための手段のことです。

9. 制御構文

PowerShell をシェルスクリプトとして使うようになってくると、    if制御構文は欠かせないでしょう。

基本的な構文で条件に応じて処理を切り分けるときに使われるので、似たような機能は大抵のプログラミング言語で用意されています。