Lesson 2

PowerShell概要

Lesson 2 Chapter 1
PowerShellとは

PowerShellは、コマンドレットと呼ばれるコマンドを使用して、システム管理タスクや開発タスクを自動化することができ、手作業よりも効率的で、より高度なタスクを実行することができます。

プログラミングの基本的な概念である「クラス」と「メソッド」を使用して、PowerShellで処理を行うことができます。クラスは、似たような性質を持ったデータや処理をまとめたものであり、メソッドは、そのクラスに対して何かしらの処理を行うための命令のことです。

Microsoftは、PowerShellの学習に役立つドキュメントやコースを提供しており、また、PowerShellを使用するコミュニティも非常に活発です。

クラスとオブジェクト

クラスは、オブジェクトを作るための設計図のようなもので、オブジェクトの構造を定めます。オブジェクトは、クラスから作られた実際の対象であり、メソッド(処理)や変数などを持ったものです。 例えば、クラスは「犬」の設計図であり、オブジェクトはその設計図に基づいて作られた「犬の実体(チワワやしば犬など)」のことです。

image1

メソッド

「メソッド」とは、プログラム内で特定の処理を行うための手続きのことです。例えば、犬クラスに「鳴く」というメソッドがあった場合、それを呼び出す(実行する)ことで犬が鳴く処理が実行されます。メソッドはクラス内に定義され、クラスのオブジェクトから呼び出すことができます。また、メソッドは再利用性が高く、同じ処理を繰り返し行う必要がある場合に便利です。

Lesson 2 Chapter 2
PowerShellで何ができるのか

実際にPowerShellを使用する前に、例えばどんなことができるのかを確認しておきましょう。 以下に、PowerShellでできることの例をいくつか紹介します。

  1. システム管理タスクの自動化

    PowerShellを使用して、Windowsシステムの構成や設定を変更することができます。例えば、システムイベントログの監視や、ディスク容量の監視、Windowsサービスの管理などが可能です。つまり、手作業で行っていたシステムの保守作業が自動化できます。

  2. ファイルの操作

    PowerShellを使用して、ファイルやフォルダを操作することができます。PowerShellを使うことで、指定したファイルのコピー、移動、削除、属性の変更などができます。

  3. ネットワークリソースの管理

    PowerShellを使用して、ネットワークリソース(ネットワーク上で共有されるデータや機能のこと)の操作ができます。例えば、ファイル共有の作成や、IPアドレスの設定などが可能です。

  4. スクリプトの自動化

    PowerShellでは、コマンドラインで実行することができる「スクリプト」というプログラムを作成することができます。また、複数のスクリプトをまとめた「モジュール」というものも作成することができます。 スクリプトは作業を自動化するために使用され、再利用可能なスクリプトを作成することで、同じ作業を何度も繰り返し実行する手間を省くことができます。

  5. Webサービスの操作

    PowerShellを使うと、Webサービスを操作することができます。Web APIというものを利用することで、Webアプリケーションにアクセスして、情報を取得・更新することができます。 例えば、天気情報を提供しているWebサイトのAPIを利用することで、PowerShell上で現在の天気情報を表示させることができます。

以上が、PowerShellでできることの例です。

PowerShellを使うことで、効率的なシステム管理やタスクの自動化を行うことができます。これにより、作業時間の短縮や、作業の簡略化が可能になります。

ネットワークリソースの管理

ネットワークリソースの管理とは、インターネットやLANといったネットワーク上で共有されるファイルや機能を管理することです。PowerShellを使えば、共有したいファイルを簡単に共有したり、パソコンのIPアドレスを設定したりすることができます。例えば、別のパソコンからファイルをダウンロードする場合も、ネットワークリソースの管理が必要になります。初心者や未経験者でもわかりやすく言うと、インターネットやLANといったネットワーク上で共有されるものを管理することです。

Lesson 2 Chapter 3
まずはWindows PowerShellを触ってみる

Windows PowerShellは、コマンドラインから入力することも、スクリプト(プログラム)として記述することもできます。Windows PowerShellは、どちらの方法でもタスクを実行することができますが、複雑な操作をする場合にはスクリプトとして処理をまとめてしまうことで、より効率的にタスクを実行することができます。初心者はまず、簡単なコマンドから始めて、Windows PowerShellの基本的な操作方法を身につけていきましょう。

では早速、Windows PowerShellの基本的な操作方法を理解するために、実際にWindows PowerShellを触ってましょう。

Windows PowerShellを起動する

Windows PowerShellを起動するには、以下の手順で行うことができます。

  1. スタートメニューをクリックします。
  2. 検索ボックスに「PowerShell」と入力します。
  3. 検索結果から「Windows PowerShell」というアプリをクリックします。
  4. PowerShellウィンドウが表示されます。

また、PowerShellを管理者として起動するには、以下の手順を行います。

  1. スタートメニューを右クリックします。
  2. 「Windows PowerShell」を選択して、メニューから「管理者として実行」を選択します。
  3. 管理者の許可を求めるダイアログボックスが表示された場合は、「はい」をクリックします。
  4. 管理者としての権限でPowerShellが起動します。

以上が、Windows PowerShellを起動する方法です。 WindowsPowerShellが起動したら、基本的なコマンドや構文を学び、自分でコマンドを入力して操作してみましょう。

Hello Worldしてみる

Windows PowerShellでHello Worldをするには、以下の手順に従ってください。

  1. Windows PowerShellを起動する
  2. 「Hello World」を表示するコマンドを入力する

    以下のコマンドを入力します。

    PowerShell
    Write-Host "Hello World"
  3. コマンドを実行する Enterキーを押して、コマンドを実行します。
  4. 結果を確認する Windows PowerShell上に、「Hello World」という文字列が表示されます。

以上の手順で、Windows PowerShellでHello Worldという文字列を出力することができます。 この例では、Write-Hostというコマンドを使用して、文字列を表示しています。Write-Hostは、指定された文字列をコンソール上に表示するためのコマンドです。

Windows PowerShellを終了する

Windows PowerShellを終了する方法は、以下の手順で行うことができます。

  1. Windows PowerShellウィンドウをクリックすることでアクティブにします。
  2. 「exit」と入力してEnterキーを押します。
  3. Windows PowerShellウィンドウが自動的に閉じます。

また、PowerShellウィンドウを閉じずに、PowerShellセッションを保持したまま別のウィンドウやアプリケーションに移動する場合は、「exit」ではなく、「exit-PSSession」というコマンドを使用します。この場合、PowerShellセッションは終了されません。

以上が、Windows PowerShellを終了する方法です。正しく終了することで、コマンドラインに残った余分なプロセスを避けることができます。また、PowerShellセッションを終了する際には、保存されていない作業がないか確認することも重要です。

Lesson 2 Chapter 4
Windows PowerShellとPowerShell Coreの違い

Windows PowerShellとPowerShell Coreは、どちらもMicrosoftが開発したPowerShellですが、以下のような違いがあります。 この違いを理解することで、どのような場合にどちらを使用するのが適切かを判断することができます。 仕様の違いもあるので、今自分が使用しているPowerShellがどちらなのかを確認しておきましょう。

  1. プラットフォームの違い

    Windows PowerShellは、Windows上でのみ動作しますが、PowerShell CoreはWindows、Linux、およびmacOSのような複数のプラットフォームで動作します。

  2. NET Frameworkと.NET Coreの違い

    Windows PowerShellは、.NET Frameworkを使用して実装されていますが、PowerShell Coreは.NET Coreを使用して実装されています。.NET Coreは、.NET Frameworkに比べて軽量でクロスプラットフォーム(複数のプラットフォームで実行できること)であり、LinuxやmacOSなどの非Windows環境でも使用できます。

  3. モジュールの互換性の違い

    Windows PowerShellの場合、多くのサードパーティ製のモジュールが開発されていますが、PowerShell Coreにはまだ対応していないモジュールが多数あります。しかし、PowerShell Coreのモジュールは、LinuxやmacOSなどのプラットフォームでも使用できるように設計されています。

  4. コマンドレットの互換性の違い

    Windows PowerShellのコマンドレットは、PowerShell Coreでも使用できますが、一部のコマンドレットはWindowsオペレーティングシステム固有の機能に依存しているため、PowerShell Coreで使用できない場合があります。

以上が、Windows PowerShellとPowerShell Coreの違いです。どちらを使用するかは、使用するプラットフォームや必要な機能によって異なります。

インストールパスの違い

Windows PowerShellとPowerShell Coreは、それぞれ異なるインストールパスを持っています。

Windows PowerShellは、Windowsの標準的な機能として提供されており、以下のパスにインストールされます。

%SystemRoot%\System32\WindowsPowerShell\v1.0\

一方、PowerShell Coreは、Windows、Linux、macOSなどの複数のプラットフォームで動作するクロスプラットフォームのPowerShellです。PowerShell Coreは、以下のパスにインストールされます。

Windowsの場合

%ProgramFiles%\PowerShell\7\

Linuxの場合

/opt/microsoft/powershell/7/

macOSの場合

/usr/local/microsoft/powershell/7/

Windows PowerShellとPowerShell Coreは、互換性のある一部のコマンドを共有していますが、両者は完全に異なる実装であるため、互換性のないコマンドや機能が存在することに注意してください。また、Windows PowerShellとPowerShell Coreを同時にインストールすることもできます。

実行ファイル名の違い

Windows PowerShellとPowerShell Coreの実行ファイル名は、以下のようになっています。

Windows PowerShell

powershell.exe

PowerShell Core

pwsh.exe (Windows), powershell (Linux、macOS)

Windows PowerShellの場合、実行ファイル名は「powershell.exe」です。Windows PowerShellを起動するには、コマンドプロンプトまたはPowerShellウィンドウで「powershell」と入力するか、「powershell.exe」と入力してEnterキーを押します。

PowerShell Coreの場合、Windows版の実行ファイル名は「pwsh.exe」です。PowerShell Coreを起動するには、コマンドプロンプトまたはPowerShell Coreウィンドウで「pwsh」と入力するか、「pwsh.exe」と入力してEnterキーを押します。

LinuxやmacOSの場合、PowerShell Coreの実行ファイル名は「powershell」となります。PowerShell Coreを起動するには、ターミナルで「powershell」と入力してEnterキーを押します。

実行ファイル名が異なるため、Windows PowerShellとPowerShell Coreを区別することができます。

ランタイムの違い(.NET Framework と .NET Core)

PowerShellは、2つの異なる.NETランタイムで実行されます。これらは、「.NET Framework」と「.NET Core」です。

ランタイムとは、プログラムが実行される際に必要な環境や機能を提供するソフトウェアのことです。プログラムを実行するためには、それが動作するために必要な機能がすべて備わっている必要があります。そのため、プログラムが動作するために必要なランタイム環境を用意することで、プログラムが動作することができるようになります。

例えば、Java言語の場合、Javaランタイム環境(JRE)が必要になり、プログラムを実行するには、JREがインストールされている必要があります。また、.NET Frameworkを利用する場合、.NET Frameworkランタイムが必要になります。ランタイム環境が備わっていない場合、プログラムは動作しないか、エラーが発生します。

.NET Framework

これは、Windowsに含まれる標準の.NETランタイムです。Windows PowerShellは、.NET Frameworkを必要とするため、.NET FrameworkがインストールされているWindowsにはすでにPowerShellが含まれています。.NET Frameworkは、Windows OSに統合されており、.NET Frameworkに依存するアプリケーションが多数あります。

.NET Core

これは、Windows、Linux、macOSなどの複数のプラットフォームで動作するオープンソースの.NETランタイムです。PowerShell Coreは、.NET Core上で実行されるため、PowerShell Coreを実行するには、.NET Coreが必要です。.NET Coreは、クロスプラットフォーム対応のため、Windows以外のプラットフォームでも実行可能です。

両方のランタイムには、いくつかの違いがあります。.NET FrameworkはWindowsに統合されているため、最新の.NET FrameworkランタイムがWindowsに自動的に提供されますが、.NET Coreは個別にインストールする必要があります。また、.NET Coreは、クロスプラットフォーム対応であるため、Windows以外のOSでも実行可能であるという点が異なります。しかし、両方のランタイムは、PowerShellのコマンドやスクリプトを実行する上ではほとんど同じです。

廃止されたコマンド

Windows PowerShellとPowerShell Coreには、廃止されたコマンドがあります。これらのコマンドは、以前は使用可能でしたが、現在は推奨されておらず、将来のバージョンで削除される可能性があります。これらのコマンドを使用することは、コードの動作を妨げ、セキュリティリスクを引き起こすことがあります。

以下は、Windows PowerShellとPowerShell Coreの両方で廃止されたコマンドの例です。

Invoke-Expression

このコマンドは、文字列として渡されたコマンドを実行します。これは、悪意のあるコマンドを実行するために使用される可能性があり、安全ではありません。代わりにInvoke-Commandを使用することが推奨されます。

Add-Type -Path

このコマンドは、DLLファイル(複数のプログラムで共通して使用されるコードをまとめたファイル)をPowerShellに読み込むために使用されました。代わりに、[System.Reflection.Assembly]::LoadFileを使用することが推奨されます。

Clear-Host

このコマンドは、PowerShellのウィンドウをクリアするために使用されました。代わりに、Clear-Hostの代わりにClear-Itemを使用することが推奨されます。

これらは一例であり、廃止されたコマンドの完全なリストは、Windows PowerShellとPowerShell Coreの公式ドキュメントに記載されています。 PowerShellの新しいバージョンに移行する場合は、廃止されたコマンドを使用していないか確認し、代替手段を見つける必要があります。

追加されたコマンド

Windows PowerShellとPowerShell Coreには、新しいコマンドが追加されています。これらのコマンドでは、以前のバージョンでは利用できなかった機能や機能改善を提供しています。

以下は、Windows PowerShellとPowerShell Coreの両方で追加されたコマンドの例です。

Get-ComputerInfo

このコマンドは、コンピューターの詳細情報を取得します。これには、オペレーティングシステムのバージョン、システムタイプ、およびデバイス名が含まれます。

ConvertFrom-Json

このコマンドは、JSONという形式で表現されたデータをPowerShellのオブジェクトとして扱える形に変換します。JSON形式は、Webサービスからのデータ受け取りやファイルからの読み取りなどに使われ、このコマンドを利用することでPowerShell上で簡単にデータを取り扱うことができます。

Get-ChildItem -Directory

このコマンドは、指定されたディレクトリ内のサブディレクトリを取得します。これにより、複数のファイルやサブディレクトリを処理するために必要な手動の作業を削減できます。

これらは一例であり、追加されたコマンドのリストは、Windows PowerShellとPowerShell Coreの公式ドキュメントに記載されています。 PowerShellを学ぶ際には、新しいコマンドがどのように機能するかを理解し、それらを活用して効率的なコードを作成することが重要です。