POWERSHELL PROGRAM

PowerShellを使ってみよう~ディレクトリ・ファイル一覧の表示

PowerShellでディレクトリやファイルの一覧を表示させよう

Windows10のPowerShellを使って、ディレクトリやファイルの一覧を表示させてみましょう。
まず、スタートメニューから「Windows PowerShell」を選択して、PowerShellを起動します。

powershell1-1

PowerShellのコンソール画面が表示されます。
Windows10に標準でインストールされているPowerShellのバージョンは5.1ですが、最新のバージョンは7.2です。(2022/1/28現在)

powershell1-2

コンソールから以下のコマンドを入力してEnterキーを押下すると、カレントディレクトリにあるディレクトリやファイルの一覧が表示されます。

Get-ChildItem

powershell1-3

PowerShellでは、コマンドのことをコマンドレットといいます。
コマンドレットは、動詞-名詞の組み合わせになっていますが、名前が長いの難点です。
そのため、コマンドレットには、エイリアス(別名)が用意されています。
Get-ChildItemの場合は、dirgcilsをエイリアスとして使うことができます。
なお、出力結果は全て同じです。
以下のコマンドレットを使うと、利用できるエイリアスの一覧が出力されます。

Get-Alias

また、特定のコマンドレットのエイリアスのみを表示したい場合は、以下のオプションを指定します。

Get-Alias -Definition コマンドレット名

powershell1-3a

指定したディレクトリに存在するファイルの合計サイズを計算するプログラム

ファイル一覧を表示するやり方が分かったところで、簡単なプログラムを作ってみましょう。
Get-ChildItemを使って、指定したディレクトリ配下のファイルサイズを合計するプログラムです。

このプログラムは3行しかありませんが、2行目が少し難しいかもしれません。
Pathオプションの$Args[0]はスクリプトに渡す第1引数で、このプログラムではディレクトリを指定します。
引数を渡さない場合は$Args[0]に何も入っていないので、カレントディレクトリのファイル一覧を取得します。
取得したファイル一覧をForEach-Objectがオブジェクトとして一つずつ受け取ります。
$_.Lengthを使って、一つずつ受け取ったファイルの情報からサイズを取得して、変数$sizeに加算していくという流れになります。

PowerShellの実行ポリシーを設定しよう

早速プログラムを動かしたいところですが、PowerShellのプログラムは、Windows10ではデフォルトで実行できないようになっています。
デフォルトの状態でプログラムを実行すると、以下のようなエラーメッセージが出力されます。

エラーメッセージ

このシステムではスクリプトの実行が無効になっているため、ファイル XXX.ps1 を読み込むことができません。
詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。

Windowsサーバの場合は、デフォルトで実行できるようになっています

そのため、PowerShellの実行ポリシーを変更する必要があります。
まず、以下のコマンドレットを使用して、現在の状態を確認してみましょう。

Get-ExecutionPolicy

デフォルトでは、Restrictedと表示されると思います。
これは、個々のコマンドの実行は許可するが、スクリプトの実行は許可しないという設定です。
実行ポリシーの種類は、以下の通りです。

実行ポリシー内容
AllSignedスクリプトを実行できる
全てのスクリプトや構成ファイルが署名されている必要がある
Bypassブロックされず、警告やプロンプトは表示されない
Default既定の実行ポリシーを設定
RemoteSignedスクリプトを実行できる
ローカル上のスクリプトは署名されなくてもよい
リモート上のスクリプトや構成ファイルは署名されている必要がある
Restricted個々のコマンドは許可するが、スクリプトは許可しない
Undefined実行ポリシーが設定されていない
Unrestricted署名されていないスクリプトも実行できる

また、実行ポリシーには、その影響範囲を決定するスコープという概念があります。
スコープには以下の種類があり、優先順位は上の方が高くなります。

スコープ内容
MachinePolicyコンピュータの全てのユーザのグループポリシーに対して設定
UserPolicyコンピュータの現在のユーザのグループポリシーに対して設定
Process現在のセッションのみに影響
CurrentUser現在のユーザのみに影響
LocalMachine現在のコンピュータ上の全てのユーザに影響

スコープは、上記のGet-ExecutionPolicyにListオプションを付けることによって、表示することができます。

powershell1-4

それでは、PowerShellのプログラムを実行するために、実行ポリシーを変更しましょう。
実行ポリシーの変更は、以下のコマンド使います。

Set-ExecutionPolicy -ExecutionPolicy ポリシー名 -Scope スコープ名

ここではローカルにあるプログラムを実行するので、RemoteSignedを指定します。
スコープは、一般ユーザでPowerShellを起動した場合、CurrentUserのみ変更できます。
他のスコープの実行ポリシーを変更する場合は、管理者ユーザでPowerShellを実行する必要があります。

powershell1-5

作成したプログラムを実行しよう

それでは、作成したプログラムを実行してみましょう。
実行する時は、プログラム名の前にディレクトリを指定します。
サンプルでは、カレントディレクトリを表す「./」を使っています。

powershell1-6

PowerShellの詳しい仕様などに関しては、以下の公式サイトを参照してください。

-POWERSHELL, PROGRAM