Windows PowerShellスクリプトの作成方法|初心者でも今日から書ける!

Windows

「毎回同じコマンドを手打ちするのがめんどう」
「定期的に実行したい作業がある」
「複数の処理をまとめて自動実行したい」

そんなときに便利なのが PowerShellスクリプト です。

Windows管理者やプログラマーだけでなく、一般のユーザーでも以下のような場面で活用できます:

「毎日の業務で同じファイル整理作業を繰り返している」
「複数のフォルダをまとめてバックアップしたい」
「システム情報を定期的に収集してレポート化したい」
「アプリケーションの一括インストールや設定変更をしたい」
「ログファイルの自動クリーンアップ作業を効率化したい」

この記事では、Windows PowerShellを使ってスクリプト(.ps1ファイル)を作成し、実行する基本の流れを、プログラミング初心者の方でもわかるようにわかりやすく解説します。

スポンサーリンク

PowerShellスクリプトとは?

スクリプトの基本概念

そもそもスクリプトって何?

スクリプトとは、PowerShellで実行できるコマンドを テキストファイルにまとめたもの です。

スクリプトの特徴

  • 拡張子は .ps1
  • 普通のテキストファイルとして作成・編集可能
  • 複数の処理をまとめて実行できる
  • 同じ作業を何度も繰り返すときに非常に役立つ

手動実行とスクリプト実行の違い

手動実行の場合

1. PowerShellを開く
2. コマンド1を入力して実行
3. コマンド2を入力して実行
4. コマンド3を入力して実行
...

スクリプト実行の場合

1. PowerShellを開く
2. スクリプトファイルを実行
3. すべての処理が自動で完了

簡単なスクリプトの例

Hello World スクリプト

まずは最もシンプルなスクリプトから見てみましょう:

# hello.ps1
Write-Host "Hello, PowerShell!"
Write-Host "今日からスクリプト作成を始めます"

このスクリプトの実行結果

Hello, PowerShell!
今日からスクリプト作成を始めます

日付表示スクリプト

# date.ps1
$today = Get-Date
Write-Host "今日は $today です"
Write-Host "スクリプト実行が完了しました"

PowerShellスクリプトでできること

ファイル・フォルダ操作

  • ファイルの一括リネーム
  • フォルダの自動バックアップ
  • 古いファイルの自動削除
  • ディスク使用量の監視

システム管理

  • システム情報の収集
  • サービスの監視と制御
  • ユーザーアカウントの管理
  • レジストリの設定変更

データ処理

  • CSVファイルの加工
  • ログファイルの解析
  • レポートの自動生成
  • データの変換・移行

開発環境の準備

PowerShellの確認

PowerShellがインストールされているか確認

Windows 10/11には標準でPowerShellが搭載されています:

  1. Windowsキー + R を押す
  2. 「powershell」と入力 してEnter
  3. PowerShellウィンドウが開けばOK

PowerShellのバージョン確認

$PSVersionTable.PSVersion

このコマンドで現在のバージョンが確認できます。

テキストエディタの選択

初心者におすすめのエディタ

メモ帳(標準アプリ)

  • すべてのWindowsに標準搭載
  • シンプルで扱いやすい
  • 基本的なスクリプト作成には十分

Visual Studio Code(推奨)

  • Microsoft製の無料エディタ
  • PowerShell拡張機能でシンタックスハイライト
  • デバッグ機能やIntelliSense対応

PowerShell ISE

  • Windows標準のPowerShell専用エディタ
  • スクリプト実行とデバッグが一体化
  • PowerShell 5.1まで対応

Visual Studio Code のセットアップ

  1. 公式サイト(code.visualstudio.com)からダウンロード
  2. インストールを実行
  3. 拡張機能で「PowerShell」を検索してインストール
  4. 新規ファイルを作成して .ps1 で保存

スクリプトファイル(.ps1)の作成方法

メモ帳を使った基本的な作成手順

ステップ1:メモ帳を開く

  1. Windowsキー + R で「ファイル名を指定して実行」を開く
  2. 「notepad」 と入力してEnter
  3. メモ帳が起動

ステップ2:スクリプトを記述

まずは以下の簡単なスクリプトを入力してみましょう:

# 現在の日付と時刻を表示
Get-Date

# システム情報を表示
Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion

# 完了メッセージ
Write-Host "スクリプトが正常に実行されました" -ForegroundColor Green

ステップ3:ファイルの保存

  1. 「ファイル」→「名前を付けて保存」
  2. ファイル名myfirst.ps1
  3. ファイルの種類:「すべてのファイル (.)」
  4. エンコード:「UTF-8」(日本語を使う場合)
  5. 保存場所:デスクトップまたはドキュメントフォルダ

ファイル保存時の注意点

拡張子の確認

正しい保存方法

  • ファイル名:script.ps1
  • ファイルの種類:「すべてのファイル」

間違った保存方法

  • ファイル名:script.ps1.txt(.txtが自動で付加される)
  • ファイルの種類:「テキスト文書」

文字エンコーディング

推奨設定

  • UTF-8:日本語を含むスクリプトに最適
  • UTF-8 BOM付き:一部の環境で互換性が高い

避けるべき設定

  • Shift_JIS:文字化けのリスク
  • ANSI:日本語が正しく表示されない場合がある

Visual Studio Code での作成

より効率的な開発環境

  1. Visual Studio Code を起動
  2. 「File」→「New File」
  3. 「File」→「Save As」 でファイル名を script.ps1 に設定
  4. PowerShell拡張機能により自動的にシンタックスハイライトが有効

VS Code の便利機能

IntelliSense(自動補完)

  • コマンド名の自動候補表示
  • パラメータの説明表示
  • タイプミスの削減

統合ターミナル

  • エディタ内でPowerShellを実行
  • スクリプトのテストが簡単

実行ポリシーの設定

実行ポリシーとは

セキュリティ機能としての実行ポリシー

PowerShellの実行ポリシーは、悪意のあるスクリプトの実行を防ぐセキュリティ機能です。

主要な実行ポリシー

  • Restricted:すべてのスクリプト実行を禁止
  • RemoteSigned:ローカルスクリプトは実行可、ダウンロードしたスクリプトには署名が必要
  • Unrestricted:すべてのスクリプトを実行可能(非推奨)

現在の実行ポリシー確認

確認コマンド

Get-ExecutionPolicy

表示される結果例

  • Restricted:スクリプト実行が禁止されている
  • RemoteSigned:ローカルスクリプトは実行可能
  • Unrestricted:すべて実行可能

実行ポリシーの変更

管理者権限でPowerShellを起動

  1. スタートボタンを右クリック
  2. 「Windows PowerShell(管理者)」 を選択
  3. ユーザーアカウント制御 で「はい」をクリック

安全な実行ポリシーに変更

Set-ExecutionPolicy RemoteSigned

確認メッセージが表示されたら

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。
[Y] はい(Y)  [A] すべてはい(A)  [N] いいえ(N)  [L] すべていいえ(L)  [S] 中断(S)  [?] ヘルプ

「Y」を入力してEnterキーを押します。

設定の確認

Get-ExecutionPolicy

RemoteSigned と表示されれば設定完了です。

セキュリティに関する注意事項

安全なスクリプト実行のガイドライン

信頼できるソースからのスクリプトのみ実行

  • 自分で作成したスクリプト
  • 信頼できるWebサイトからダウンロードしたスクリプト
  • 社内で承認されたスクリプト

不明なスクリプトの実行前確認

  • スクリプトの内容を必ず確認
  • 何をするスクリプトか理解してから実行
  • 疑わしい場合は実行しない

スクリプトの実行方法

基本的な実行手順

コマンドプロンプトからの実行

  1. PowerShellを起動
  2. スクリプトファイルがある場所に移動 cd C:\Users\YourName\Desktop
  3. スクリプトを実行 .\myfirst.ps1

パスの指定方法

相対パス(推奨):

.\script.ps1          # 現在のフォルダ
..\script.ps1         # 一つ上のフォルダ
folder\script.ps1     # サブフォルダ内

絶対パス

C:\Scripts\script.ps1

実行時によくあるエラー

「実行が無効になっています」エラー

エラーメッセージ例

ファイル C:\path\to\script.ps1 を読み込めません。
このシステムではスクリプトの実行が無効になっているため、
ファイル C:\path\to\script.ps1 を読み込めません。

解決方法: 前述の実行ポリシー設定を確認してください。

「ファイルが見つかりません」エラー

原因

  • ファイルパスが間違っている
  • ファイル名にタイプミス
  • カレントディレクトリが間違っている

解決方法

# 現在の場所を確認
Get-Location

# ファイルの存在確認
Test-Path .\script.ps1

# ディレクトリ内のファイル一覧
Get-ChildItem *.ps1

実用的なスクリプト例

ファイル管理の自動化

フォルダ内のファイル一覧作成

# フォルダ内ファイル一覧をCSVで出力
$targetFolder = "C:\Users\$env:USERNAME\Documents"
$outputFile = "C:\Users\$env:USERNAME\Desktop\ファイル一覧.csv"

Get-ChildItem $targetFolder -Recurse | 
    Select-Object Name, Length, LastWriteTime, Directory |
    Export-Csv $outputFile -NoTypeInformation -Encoding UTF8

Write-Host "ファイル一覧を $outputFile に出力しました" -ForegroundColor Green

古いファイルの自動削除

# 30日以上古いログファイルを削除
$logFolder = "C:\Logs"
$daysToKeep = 30
$cutoffDate = (Get-Date).AddDays(-$daysToKeep)

$oldFiles = Get-ChildItem $logFolder -Filter "*.log" | 
    Where-Object { $_.LastWriteTime -lt $cutoffDate }

if ($oldFiles.Count -gt 0) {
    $oldFiles | Remove-Item -Force
    Write-Host "$($oldFiles.Count) 個の古いログファイルを削除しました" -ForegroundColor Yellow
} else {
    Write-Host "削除対象のファイルはありませんでした" -ForegroundColor Green
}

システム情報の収集

システム状態レポート作成

# システム情報収集スクリプト
$reportPath = "C:\Users\$env:USERNAME\Desktop\システム情報_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"

@"
=== システム情報レポート ===
作成日時: $(Get-Date)
コンピュータ名: $env:COMPUTERNAME
ユーザー名: $env:USERNAME

=== OS情報 ===
$(Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, WindowsBuildNumber | Format-List | Out-String)

=== メモリ使用状況 ===
$(Get-CimInstance Win32_OperatingSystem | 
  Select-Object @{N='総メモリ(GB)'; E={[math]::Round($_.TotalVisibleMemorySize/1MB, 2)}},
                @{N='空きメモリ(GB)'; E={[math]::Round($_.FreePhysicalMemory/1MB, 2)}} | 
  Format-List | Out-String)

=== ディスク使用状況 ===
$(Get-CimInstance Win32_LogicalDisk | 
  Select-Object DeviceID, 
                @{N='サイズ(GB)'; E={[math]::Round($_.Size/1GB, 2)}},
                @{N='空き容量(GB)'; E={[math]::Round($_.FreeSpace/1GB, 2)}},
                @{N='使用率(%)'; E={[math]::Round(($_.Size - $_.FreeSpace) / $_.Size * 100, 1)}} | 
  Format-Table | Out-String)
"@ | Out-File $reportPath -Encoding UTF8

Write-Host "システム情報レポートを作成しました: $reportPath" -ForegroundColor Green

ネットワーク管理

接続テストスクリプト

# 複数サーバーへの接続テスト
$servers = @(
    "google.com",
    "microsoft.com", 
    "github.com",
    "stackoverflow.com"
)

Write-Host "=== ネットワーク接続テスト ===" -ForegroundColor Cyan
Write-Host "テスト開始: $(Get-Date)" -ForegroundColor Green

foreach ($server in $servers) {
    try {
        $result = Test-Connection $server -Count 1 -Quiet
        if ($result) {
            Write-Host "✓ $server : 接続OK" -ForegroundColor Green
        } else {
            Write-Host "✗ $server : 接続NG" -ForegroundColor Red
        }
    }
    catch {
        Write-Host "✗ $server : エラー発生" -ForegroundColor Red
    }
}

Write-Host "テスト完了: $(Get-Date)" -ForegroundColor Green

スクリプトの実行自動化

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

タスクスケジューラでのスクリプト登録

  1. 「タスクスケジューラ」を起動
    • Windowsキー + R → taskschd.msc
  2. 「基本タスクの作成」をクリック
  3. タスクの基本情報を入力
    • 名前:「日次システムチェック」
    • 説明:「毎日システム情報を収集」
  4. トリガーを設定
    • 「毎日」を選択
    • 開始時刻を設定
  5. 操作を設定
    • 「プログラムの開始」を選択
    • プログラム:powershell.exe
    • 引数:-ExecutionPolicy Bypass -File "C:\Scripts\system-check.ps1"

セキュリティを考慮した実行

推奨する引数設定

-ExecutionPolicy RemoteSigned -File "C:\Scripts\script.ps1"

ログ出力付きの実行

-ExecutionPolicy RemoteSigned -File "C:\Scripts\script.ps1" > "C:\Logs\script.log" 2>&1

バッチファイルとの組み合わせ

PowerShellスクリプトを呼び出すバッチファイル

run-script.bat

@echo off
cd /d "C:\Scripts"
powershell.exe -ExecutionPolicy RemoteSigned -File "backup-script.ps1"
pause

このバッチファイルをダブルクリックするだけでスクリプトが実行されます。

エラーハンドリングとデバッグ

基本的なエラーハンドリング

Try-Catch文の使用

try {
    # エラーが発生する可能性のある処理
    $result = Get-Content "C:\存在しないファイル.txt"
    Write-Host "ファイル読み込み成功"
}
catch {
    # エラー発生時の処理
    Write-Host "エラーが発生しました: $($_.Exception.Message)" -ForegroundColor Red
    Write-Host "スクリプトを続行します..." -ForegroundColor Yellow
}
finally {
    # 成功・失敗に関わらず実行される処理
    Write-Host "処理が完了しました"
}

ログ出力機能

ログファイルへの記録

function Write-Log {
    param(
        [string]$Message,
        [string]$Level = "INFO"
    )
    
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $logMessage = "$timestamp [$Level] $Message"
    
    # コンソールに表示
    Write-Host $logMessage
    
    # ログファイルに記録
    $logFile = "C:\Logs\script-$(Get-Date -Format 'yyyyMMdd').log"
    Add-Content $logFile $logMessage
}

# 使用例
Write-Log "スクリプト開始"
Write-Log "処理中..." "INFO"
Write-Log "警告が発生しました" "WARN"
Write-Log "エラーが発生しました" "ERROR"
Write-Log "スクリプト終了"

デバッグテクニック

変数の値確認

# 変数の内容を詳細表示
$myVariable = Get-Process
$myVariable | Out-Host -Paging

# 変数の型を確認
$myVariable.GetType()

# オブジェクトのプロパティとメソッドを確認
$myVariable | Get-Member

ステップ実行

# デバッグ用:一時停止ポイント
Read-Host "続行するにはEnterを押してください"

# 条件付き実行
if ($DebugMode) {
    Write-Host "デバッグ: 変数の値は $myVariable です"
}

パフォーマンスの最適化

効率的なコーディング

大量データの処理

# 効率的な方法:Where-Object
$largeArray | Where-Object { $_.Property -eq "Value" }

# より高速な方法:.NET メソッド
$largeArray.Where({ $_.Property -eq "Value" })

# 最も高速:foreach文
$result = foreach ($item in $largeArray) {
    if ($item.Property -eq "Value") {
        $item
    }
}

メモリ使用量の最適化

# 大きなオブジェクトは使用後にクリア
$largeObject = Get-Process
# 処理...
$largeObject = $null
[System.GC]::Collect()  # ガベージコレクション実行

まとめ

今回は「Windows PowerShellスクリプトの作成方法」について、基本的な作成手順から実用的な活用例まで詳しく解説しました。

基本的な作成手順

  1. テキストエディタでPowerShellコマンドを記述
  2. .ps1 拡張子でファイルを保存
  3. 実行ポリシーを適切に設定
  4. PowerShellから実行して動作確認

重要なポイント

  • 実行ポリシーの設定Set-ExecutionPolicy RemoteSigned
  • ファイル保存時の注意:UTF-8エンコードと正しい拡張子
  • エラーハンドリング:Try-Catch文でエラー対策
  • ログ出力:トラブル時の原因調査に重要

実用的な活用場面

  • ファイル・フォルダの一括操作
  • システム情報の定期収集
  • ネットワーク接続の監視
  • 自動バックアップの実行
  • レポートの自動生成

自動化の実現

  • タスクスケジューラとの連携
  • バッチファイルとの組み合わせ
  • エラーハンドリングとログ機能
  • パフォーマンス最適化

コメント

タイトルとURLをコピーしました