PowerShellって実はあつかいやすいんです。
一度、イメージを掴んでしまえば様々な用途で使うことができちゃいます。
始めるにあたって必要な予備知識とイラストや動画を交えた実行方法を
まとめてご紹介します。
- PowerShellについて簡単に知りたい方
- PowerShellを使ってみたい方
- 文字だけでなく動画(GIFアニメーション)による解説も見たい方
事前の予備知識
PowerShellとは
2022年9月現在、メインストリーム中のWindows OS(Win 10/Win 11など)では、
標準でインストールされている無料のツールです。
また、Windows以外のOS(Mac OSやLinux)でもインストール可能な「PowerShell Core」も無料で配布されています。
開発のしやすい事やコスト(お金)がかからない事などにより導入しやすく、
多くの企業で利用されているツールとなります。
PowerShell(パワーシェル)は、マイクロソフトが開発した拡張可能な
引用元:Wikipedia
コマンドラインインターフェイス (CLI) シェルおよびスクリプト言語である。
オブジェクト指向に基づいて設計されており、
.NET Framework (Windows PowerShell 5系以前)
あるいは.NET Core (PowerShell Core 6系以降) を基盤としている。
補足事項:GUIとCLI
GUIとCLI、聞きなれない方もいると思いますが、2つの用語はコンピューターを扱う際の使用方式の種類。
まずは、Windows OSやiOS、Androidなどで身近であるGUIから説明します。
GUI(グラフィカルユーザーインターフェイス)とは
GUIとはウィンドウやアイコン、ボタンなど多種多様なパーツで構成された画面を、
マウスやキーボードで視覚的に操作する方式の事を指します。
CLI(コマンドラインインターフェイス)とは
CLIは文字列だけで構成された画面を、
キーボードによるコマンド実行のみで操作する方式を指します。
(イメージはドラマや映画でハッカーがキーボードだけでカタカタやっている感じです。)
また、CLIと同じ意味を持つ用語として、CUI(キャラクターユーザーインターフェイス)という名前でも呼ばれています。
CLIやCUIの代表的な使用例としては、PowerShellのコマンド操作やUNIX OS系統のターミナル操作などがあります。
補足事項:スクリプト言語
PowerShellのWikipediaで記載されているスクリプト言語とは簡易的なプログラミング言語の事を指しています。
ただ、厳密にプログラミング言語とスクリプト言語の区別はないので環境により呼び方も変わります。
・環境により呼び方が変わる例
PythonのことをA社の仕事現場ではスクリプト言語と呼ぶ。
B社ではプログラミング言語と呼ぶ。
スクリプト言語(スクリプトげんご、英語: scripting language)とは、
アプリケーションソフトウェアを作成するための簡易的なプログラミング言語の一種を指す。スクリプト(英語で「台本・脚本」の意味)とは、その簡易的な言語記述方法を指してそう呼ばれるようになった。
上記の意味より、さらに転じて、比較的単純なプログラムを記述するための、
引用元:Wikipedia
簡易的なプログラミング言語全般をいう。
変数に型をつけないなど、動的型付け言語をスクリプト言語と呼ぶ定義もある。
ただし、厳密な定義ないし区別は存在しない。
以前はコマンドプロンプトやWSHが主流だった
WindowsにPowerShellが登場するまでのCLIは、コマンドプロンプト(コマンドラインシェル)やWSH(VBScript/JScript)が主流でした。
Windowsの最新OSであるWindows 11でも、過去のレガシー(コマンドプロンプトやWSH)を使用可能ですが、
多機能である事やプログラムが制御しやすい事などの多くのメリットにより現在の主流はPowerShellです。
コマンドプロンプトやWSHでは、
プログラムのクセが強いので実際に動かしてから検証しないといけない場面が多い印象でした。
一方、PowerShellではデバッグ機能により、事前に問題点が洗い出しやすく扱いやすいです。
さらに .NET Framework(ドットネットフレームワーク)のライブラリも使用できるので優れた拡張性もあり、
多くの情報を流用することができるのは良いと感じています。
簡単に扱えるようになって色々できるようになったっピね。
いい感じっピ👍
実行方法
PowerShellのプログラムを作成した後に実行する方法は大きく分けて2種類あります。
それぞれの実行方法の動画(GIFアニメーション)も作成しましたので合わせて紹介します。
PowerShellを会社で導入する前の注意事項
PowerShellはさまざまな事が実現可能となる自由度の高いツールです。
その為、企業によってPowerShellが使用禁止となっている場合もあります。
会社の環境でPowerShellを使用される場合はご注意ください。
ご自身の会社が禁止となっているかご不明な場合は、会社の上司や情報システム部などの管理者に会社のポリシーを確認して導入を進めて頂ければと思います。
検証環境
今回の検証パソコンの環境は下記のとおりです。
コマンド「$PSVersionTable」により確認しました。
BuildVersion | 10.0.19041.1682 |
PSVersion | 5.1.19041.1682 |
手動でのコマンド実行方法
スタートメニューから「Windows PowerShell -> Windows PowerShell」を選択
*Windows PowerShell (x86)でもOK
文字列を表示させるコマンド「Write-Host」を実行
Write-Host "Hello World" -ForegroundColor Red
補足事項:Write-Hostコマンドの簡易説明
Write-Host [画面に表示する文字列を指定] -ForegroundColor [文字の色を指定]
- Write-Host [画面に表示する文字列を指定]
-
Write-Hostコマンドは画面に文字を表示させるコマンド。
[画面に表示する文字列を指定]の文字列が画面に表示される。 - -ForegroundColor [文字の色を指定]
-
任意のオプション。文字色を変更できる。
今回、指定したRedの他にも様々な色を指定することができる。 - ※上記以外にも様々なオプションがあるが割愛
プログラムでの実行方法
スタートメニューから「Windows PowerShell -> Windows PowerShell ISE」を選択。
*Windows PowerShell ISE (x86) でもOK
文字列を表示させるコマンドを記述し任意の場所にPS1ファイルを保存。
(文字コードは、自動的にUTF-8 BOM付きに。)
Write-Host "質問者:信号機の色を三つ答えてください。"
Write-Host "回答者:左側は青色です。" -ForegroundColor Blue
Write-Host "回答者:真ん中は黄色です。" -ForegroundColor Yellow
Write-Host "回答者:右側は赤色です。" -ForegroundColor Red
Write-Host "質問者:正解!"
*1行目~5行目:Write-Hostコマンドにより画面に指定の文字列を表示。
スタートメニューから「Windows アクセサリ -> メモ帳」を開きコマンドを記述。
上記で保存したPS1ファイルと同じ場所に拡張子「.bat」として保存。
(デフォルトだと文字コードがUTF-8で保存。
バッチファイル内に日本語が含まれる場合はSJISで保存する必要あり。)
powershell -NoProfile -ExecutionPolicy Unrestricted -file .\Shingo_QA.ps1
PAUSE
*1行目:powershellコマンドはPS1ファイルを実行。実行後、PS1ファイル内のコマンドが実行される。
*2行目:通常、バッチファイルを実行するとコマンド結果のウィンドウが自動的に閉じてしまう為、
PAUSEコマンドによりコマンド結果のウィンドウが勝手に閉じないように設定。
バッチファイルをダブルクリックし実行。
補足事項:powershellコマンドの簡易説明
PowerShellのプログラムには実行ポリシーという設定があります。
実行ポリシーはセキュリティの観点から既定の設定値(Restricted)により、
PS1ファイル単体では実行できないようになっています。
今回、紹介しているバッチファイル経由でのPS1ファイルの実行は、
一時的に実行ポリシーを変更し実行する事が可能です。
恒久的に実行ポリシーを変更してPS1ファイル単体で実行する事は可能ですが、
やはりセキュリティの観点から避けた方が良いでしょう。
powershell -NoProfile -ExecutionPolicy [実行ポリシーを指定] -file [実行するPS1ファイルを指定]
- powershellコマンド
-
バッチから(コマンドラインシェル/コマンドプロンプト)PowerShellを呼び出すためのコマンド。
コマンド保管場所 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 表:powershellコマンドの保存場所 - -NoProfile
-
任意のオプション。
指定することでPowerShell起動時にプロファイル(環境情報)を読み込まない。
細かい説明は割愛。 - -ExecutionPolicy [実行ポリシーを指定]
-
今回は実行ポリシー「Unrestricted」を指定。
実行ポリシー名 内容 Restricted 構成ファイルの読み込みやスクリプトの実行しない。
既定値は “Restricted” 。AllSigned すべてのスクリプトと構成ファイルが信頼された発行元により、
署名されていることを要求される。RemoteSigned インターネットからダウンロードされたすべてのスクリプトと、
構成ファイルが信頼された発行元により署名されていることを要求される。Unrestricted すべての構成ファイルを読み込みとすべてのスクリプトを実行。
インターネットからダウンロードされた署名なしのスクリプトを実行する場合、
スクリプトを実行する前に確認あり。Bypass ブロックなし、警告もメッセージもなし。 Undefined 現在のスコープから割り当てられている実行ポリシーを削除。 表:実行ポリシーの種類 - -file [実行するPS1ファイルを指定]
-
作成したPS1ファイルを指定。
今回は作成したPS1ファイル、「Shingo_QA.ps1」を指定。 - ※上記以外にも様々なオプションがあるが割愛
-
公式サイト:powershellコマンド
公式サイト:実行ポリシー
他の実行方法も紹介
これまでPowerShellの代表的な2種類の実行方法について紹介しました。
ここからは、少し特殊なPowerShellスクリプトの実行方法を簡単に紹介。
恒久的に実行ポリシーを変更し実行する方法
下記のコマンドでPowerShellの実行ポリシーの設定を変更する事が可能。
ただし、セキュリティの観点から恒久的な実行ポリシーは変更しないことを推奨します。
仮に恒久的に実行ポリシーを変更したとしても、一時的に変える運用方法が無難かと思います。
Set-ExecutionPolicy [変更する実行ポリシーを指定]
恒久的に実行ポリシー変更後、
PS1ファイルを右クリックして「PowerShellで実行」でプログラムが実行可能。
実行ポリシー名 | 内容 |
---|---|
Restricted | 構成ファイルの読み込みやスクリプトの実行しない。 既定値は “Restricted” 。 |
AllSigned | すべてのスクリプトと構成ファイルが信頼された発行元により、 署名されていることを要求される。 |
RemoteSigned | インターネットからダウンロードされたすべてのスクリプトと、 構成ファイルが信頼された発行元により署名されていることを要求される。 |
Unrestricted | すべての構成ファイルを読み込みとすべてのスクリプトを実行。 インターネットからダウンロードされた署名なしのスクリプトを実行する場合、 スクリプトを実行する前に確認あり。 |
Bypass | ブロックなし、警告もメッセージもなし。 |
Undefined | 現在のスコープから割り当てられている実行ポリシーを削除。 |
一つのバッチファイルだけで実行する方法
こんな方法も見つかりました。
通常は起動する用のバッチファイルとプログラムが書いてあるPS1ファイルの2つを準備しますが、
起動コマンドもプログラム内容もすべてをバッチファイル1つに書くだけでPowerShellのプログラムが実行できる方法です。
この特殊なバッチファイルの作成方法は1行目に下記のコマンドを記述し、
2行目以降はPowerShellで実行したい内容を記述するだけという手法です。
スゴ技ですね!
@powershell -NoProfile -ExecutionPolicy [実行ポリシーを指定] "$s=[scriptblock]::create((gc \"%~f0\"|?{$_.readcount -gt 1})-join\"`n\");&$s "%~dp0 %*&goto:eof
2行目以降はPowerShellで実行したいコマンドを記述する。
参考情報:PowerShellをダブルクリックで実行させる
作成にあたって参考した記事
- CLIからの実行方法
https://www.delftstack.com/ja/howto/powershell/run-a-powershell-script/ - GUIやCLI
https://www.rworks.jp/cloud/azure/azure-column/azure-entry/24300/ - 実行ポリシーの変更方法/ショートカットからの実行方法
https://www.curict.com/item/d1/d1c4a3e.html - 実行ポリシーの種類
https://qiita.com/kikuchi/items/59f219eae2a172880ba6 - powershellコマンドの「-NoProfile」
https://acoustic-groove2.hatenablog.com/entry/2017/12/06/013928
まとめ
- PowerShellはCLIのツール
- PowerShellには手動でコマンド実行できる「PowerShellウィンドウ」がある
- バッチファイルとPS1ファイルの2つで半自動のPowerShellが実行可能
以上がPowerShellの実行方法をテーマにした記事です。
イメージはつかめたでしょうか。
PowerShellはWindows無料で利用できるツールです。
頭で考えるより実際、触ってみた方が覚えやすいと思います。
PowerShell、いろんな場面で導入できそうだっピ。
今後は、より実践的なプログラムを紹介したいと思います。
お楽しみに。
→ 2024.03 更新
実践的なサンプルプログラムの記事を作成しました。
関連記事としてリンクを後述しています。
それでは、また次回お会いしましょう。
さようならー🖐
バイバイっピー✨
関連記事
エンジニアのための新しい情報共有コミュニティ、Zenn.devでPowerShellの記事を作成しました!
本記事よりも、より実践的なサンプルプログラムや、便利なPowerShellコマンドレットの使い方なども紹介していますので、お時間が許すようでしたら、ぜひご覧ください。
コメント