コンテンツにスキップ

PowerShell

出典: フリー教科書『ウィキブックス(Wikibooks)』

1. はじめに

[編集]

PowerShellの概要

[編集]

歴史と進化

[編集]

PowerShellは、Microsoftが開発したタスク自動化および構成管理のためのフレームワークであり、コマンドラインシェルとスクリプト言語を兼ね備えています。2006年に最初のバージョンがリリースされて以来、PowerShellは進化を続けてきました。Windows PowerShellはWindows専用でしたが、PowerShell Coreはクロスプラットフォーム対応となり、macOSやLinuxでも動作するようになりました。

Windows PowerShellとPowerShell Core (.NET Core)の違い

[編集]
  • Windows PowerShell: Windows専用のバージョンで、.NET Framework上で動作します。システム管理やスクリプト作成に広く使用されてきました。
  • PowerShell Core: クロスプラットフォーム対応で、.NET Core上で動作します。Windows、macOS、Linuxで使用でき、オープンソースとして提供されています。

PowerShellのインストール

[編集]

Windows PowerShellのインストール方法

[編集]

Windows PowerShellは通常、Windows OSに標準でインストールされています。確認するには、PowerShellと入力してスタートメニューからアプリケーションを開くか、powershellと入力してコマンドプロンプトから起動します。

各プラットフォームでのPowerShell Coreのインストール方法

[編集]
Windows
  1. :# 公式サイトから最新のPowerShell Coreのリリースをダウンロードします。
  2. ダウンロードしたインストーラーを実行し、指示に従ってインストールします。
  3. インストールが完了したら、pwshと入力してPowerShell Coreを起動します。
macOS
  1. Homebrewを使用してインストールすることができます。まず、ターミナルを開きます。
  2. 以下のコマンドを実行してHomebrewをインストールします(まだインストールされていない場合):
         /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  3. Homebrewを使用してPowerShellをインストールします:
         brew install --cask powershell
    
  4. インストールが完了したら、pwshと入力してPowerShell Coreを起動します。
Linux
  1. パッケージリポジトリからインストールできます。たとえば、Debianの場合、以下のコマンドを実行します:
         sudo apt-get update
         sudo apt-get install -y wget apt-transport-https software-properties-common
         wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
         sudo dpkg -i packages-microsoft-prod.deb
         sudo apt-get update
         sudo apt-get install -y powershell
    
  2. インストールが完了したら、pwshと入力してPowerShell Coreを起動します。

2. 初めてのPowerShell

[編集]

基本概念

[編集]

コマンドラインインターフェースの基本

[編集]

PowerShellは、コマンドラインインターフェース(CLI)を提供し、ユーザーがコマンドを直接入力して実行することができます。CLIは、迅速かつ効率的にタスクを実行するための強力なツールです。

Cmdlet: 構造と使用方法

[編集]

PowerShellのコマンドはCmdlet(コマンドレット)と呼ばれ、Get-CommandGet-HelpSet-Itemなどの一貫した命名規則(動詞-名詞形式)を持っています。Cmdletは、特定のタスクを実行するために設計された小さなプログラムです。

エイリアスの理解

[編集]

エイリアスは、Cmdletの短縮名や別名で、コマンド入力を簡略化するために使用されます。たとえば、Get-ChildItemlsdirといったエイリアスで呼び出すことができます。

PowerShellの初歩

[編集]

ファイルシステムのナビゲーション

[編集]

PowerShellでは、以下のコマンドを使用してファイルシステムをナビゲートできます:

  • Get-Location (エイリアス: pwd): 現在のディレクトリを表示
  • Set-Location (エイリアス: cd): ディレクトリを変更
  • Get-ChildItem (エイリアス: ls): ディレクトリ内のアイテムを一覧表示

基本的なCmdlet

[編集]
Get-Help
Cmdletのヘルプ情報を表示
  Get-Help Get-ChildItem
Get-Command
使用可能なコマンドを一覧表示
  Get-Command
Get-Member
オブジェクトのプロパティやメソッドを表示
  Get-ChildItem | Get-Member

3. スクリプトの基本

[編集]

最初のスクリプトを書く

[編集]

スクリプトファイルの構造と実行方法

[編集]

PowerShellスクリプトは、.ps1拡張子のファイルに保存されます。最初のスクリプトとして、次の内容をHelloWorld.ps1というファイルに保存します:

# HelloWorld.ps1
Write-Output "Hello, World!"

スクリプトを実行するには、PowerShellプロンプトで次のコマンドを入力します:

.\HelloWorld.ps1

コメントの書き方

[編集]

コメントは、スクリプトの可読性を高めるために使用されます。単一行のコメントは#で始まり、複数行のコメントは<##>で囲みます:

# これは単一行のコメントです
<#
これは複数行の
コメントです
#>

変数とデータ型

[編集]

変数は$記号で始まり、任意の値を格納できます:

$greeting = "Hello, World!"
$number = 42
$decimal = 3.14

4. 高度なスクリプト

[編集]

制御構造

[編集]

条件文 (if, switch)

[編集]

条件文を使用して、スクリプトの実行フローを制御できます。

if
  $number = 10
  if ($number -lt 20) {
      Write-Output "Number is less than 20"
  } elseif ($number -eq 20) {
      Write-Output "Number is 20"
  } else {
      Write-Output "Number is greater than 20"
  }
switch
  $day = "Monday"
  switch ($day) {
      "Monday" { Write-Output "Start of the work week" }
      "Friday" { Write-Output "End of the work week" }
      default { Write-Output "Midweek day" }
  }

ループ (for, foreach, while, do-while)

[編集]

ループ構造を使用して、繰り返し処理を実行できます。

for ループ
  for ($i = 0; $i -lt 5; $i++) {
      Write-Output "Iteration $i"
  }
foreach ループ
  $items = 1..5
  foreach ($item in $items) {
      Write-Output "Item: $item"
  }
while ループ
  $counter = 0
  while ($counter -lt 5) {
      Write-Output "Counter: $counter"
      $counter++
  }
do-while ループ
  $counter = 0
  do {
      Write-Output "Counter: $counter"
      $counter++
  } while ($counter -lt 5)

関数の作成

[編集]

関数の定義と呼び出し

[編集]

関数を使用して、再利用可能なコードブロックを作成できます。

function Get-Greeting {
    param (
        [string]$name
    )
    return "Hello, $name!"
}

# 関数の呼び出し
$greeting = Get-Greeting -name "PowerShell"
Write-Output $greeting

スコープとパラメータ

[編集]

関数内の変数はデフォルトでローカルスコープにあります。関数にパラメータを渡すことで、柔軟な処理が可能になります。

function Set-Message {
    param (
        [string]$message,
        [int]$count
    )
    for ($i = 1; $i -le $count; $i++) {
        Write-Output "$i: $message"
    }
}

Set-Message -message "Hello" -count 3

エラーハンドリング

[編集]

try, catch, finally

[編集]

エラーハンドリングを行うことで、スクリプトの堅牢性を向上させることができます。

try {
    $result = 1 / 0
} catch {
    Write-Output "An error occurred: $_"
} finally {
    Write-Output "This block runs regardless of error occurrence"
}

エラーメッセージのカスタマイズ

[編集]

カスタムエラーメッセージを使用して、ユーザーにわかりやすい情報を提供できます。

function Divide-Numbers {
    param (
        [int]$a,
        [int]$b
    )
    try {
        if ($b -eq 0) {
            throw "Division by zero is not allowed"
        }
        return $a / $b
    } catch {
        Write-Output "Error: $_"
    }
}

Divide-Numbers -a 10 -b 0

5. モジュールとパッケージ管理

[編集]

モジュールの管理

[編集]

モジュールのインポートとエクスポート

[編集]

モジュールは、複数の関数やCmdletをまとめたパッケージです。インポートとエクスポートを行うことで、モジュールを活用できます。

# モジュールのインポート
Import-Module -Name ModuleName

# モジュールのエクスポート(スクリプト内)
Export-ModuleMember -Function FunctionName

独自モジュールの作成

[編集]

独自のモジュールを作成することで、再利用可能なスクリプトを簡単に配布できます。

MyModule.psm1
function Get-CustomGreeting {
    param (
        [string]$name
    )
    return "Hello, $name! Welcome to MyModule."
}

Export-ModuleMember -Function Get-CustomGreeting

# モジュールのインポートと使用
Import-Module -Name MyModule
Get-CustomGreeting -name "User"
[編集]

PowerShell Galleryからのモジュールのインストール

[編集]

PowerShell Galleryは、公式のモジュールリポジトリです。モジュールを簡単にインストールできます。

Install-Module -Name ModuleName

NuGetを使ったパッケージ管理

[編集]

NuGetは、.NETパッケージの管理に使用されるツールで、PowerShellでも利用できます。

# NuGetプロバイダーのインストール
Install-PackageProvider -Name NuGet -Force -Scope CurrentUser

# パッケージのインストール
Install-Package -Name PackageName -Source NuGet

6. リモート管理

[編集]

PowerShell Remoting

[編集]

リモートセッションの設定

[編集]

PowerShell Remotingを使用して、リモートコンピューター上でコマンドを実行できます。

# リモートセッションの作成
$session = New-PSSession -ComputerName RemoteComputerName

# リモートコマンドの実行
Invoke-Command -Session $session -ScriptBlock { Get-Process }

# リモートセッションの終了
Remove-PSSession -Session $session

リモートコマンドの実行

[編集]

リモートコマンドを使用することで、ネットワーク越しに管理タスクを実行できます。

# 単一のコマンドをリモートで実行
Invoke-Command -ComputerName RemoteComputerName -ScriptBlock { Get-EventLog -LogName System }

WSManとSSHを使ったリモート管理

[編集]

PowerShell Remotingは、WSManとSSHをサポートしています。これにより、Windows以外の環境でもリモート管理が可能です。

WSManを使用したリモート管理
# WSManの設定
Enable-PSRemoting -Force

# リモートセッションの作成
$session = New-PSSession -ComputerName RemoteComputerName -Authentication CredSSP
SSHを使用したリモート管理
# SSHを使用したリモートセッションの作成
$session = New-PSSession -HostName RemoteHostName -UserName UserName -SSHTransport

# リモートコマンドの実行
Invoke-Command -Session $session -ScriptBlock { hostname }

7. 管理タスクの自動化

[編集]

スケジュールタスク

[編集]

タスクスケジューラーとの連携

[編集]

定期的なスクリプトの実行

[編集]

イベントログとトリガー

[編集]

イベントログの監視

[編集]

トリガーを使った自動化

[編集]

8. データの操作

[編集]

CSVとJSON

[編集]

データのインポートとエクスポート

[編集]

CSVとJSONの解析

[編集]

XMLとデータベース

[編集]

XMLデータの操作

[編集]

データベースへのアクセス

[編集]

9. セキュリティ

[編集]

権限と認証

[編集]

実行ポリシーの設定

[編集]

セキュアストリングと資格情報の管理

[編集]

セキュリティベストプラクティス

[編集]

安全なスクリプトの作成

[編集]

機密データの保護

[編集]

10. PowerShellとクラウド

[編集]

Azure PowerShell

[編集]

Azure環境の管理

[編集]

リソースのプロビジョニングと管理

[編集]

AWS Tools for PowerShell

[編集]

AWSリソースの管理

[編集]

クラウド自動化のベストプラクティス

[編集]

11. デバッグとトラブルシューティング

[編集]

デバッグ技法

[編集]

ブレークポイントの設定

[編集]

スクリプトのステップ実行

[編集]

一般的な問題の解決方法

[編集]

エラーメッセージの理解と対処

[編集]

ログとトレースの利用

[編集]

12. 附録

[編集]

参考資料とリンク

[編集]

公式ドキュメント

[編集]

コミュニティとフォーラム

[編集]

コマンドリファレンス

[編集]

よく使うCmdletの一覧

[編集]

ショートカットとエイリアス

[編集]