Windows 11でPowerShellスクリプトを活用する完全ガイド

PowerShellスクリプトとは?Windows 11での基本概念

PowerShellは単なるコマンドラインツールではありません。Windowsシステム管理を根本から変えるオートメーションプラットフォームです。Windows 11では、PowerShellの機能がさらに強化され、日常的なPC操作から複雑なシステム管理まで、あらゆる作業を効率化できるようになりました。

PowerShellの最大の特徴は、テキストではなくオブジェクトを処理できる点にあります。これにより、データの加工や操作が格段に柔軟になり、複雑なタスクでも少ないコードで実現できるのです。Windows 11ではPowerShell 7.4が標準で利用可能となり、クロスプラットフォーム対応も進化しています。

関連記事:Windows 11のコマンドプロンプト活用術46選|業務効率化の秘訣

「でもコマンドラインって難しそう…」

そう思われる方も多いでしょう。しかし、基本を押さえれば、プログラミング初心者でも十分に活用できるツールなのです。Windows 11では、PowerShellの使いやすさも向上しており、Windows Terminal統合によって操作性も格段に改善されています。

関連記事:Windows 11のWSL設定方法を完全解説【2025年最新】

Windows 11のPowerShellインターフェース画面PowerShellスクリプトとは、一連のコマンドを記述したテキストファイルです。拡張子「.ps1」で保存され、複雑な処理も自動化できます。Windows 11では、セキュリティ強化のため、デフォルトではスクリプト実行が制限されていますが、適切な設定で安全に活用できるようになっています。

PowerShellには「コマンドレット」と呼ばれる特殊なコマンドが用意されています。これらは「動詞-名詞」の形式で統一されており、例えば「Get-Process」はプロセス情報を取得するコマンドレットです。この命名規則の一貫性が、PowerShellの学習曲線を緩やかにしているのです。

Windows 11環境でPowerShellスクリプトを活用するには、まず実行ポリシーの設定が必要です。セキュリティ上の理由から、デフォルトでは「Restricted」に設定されており、スクリプトの実行が制限されています。

Windows 11でPowerShellスクリプトを実行するための準備

PowerShellスクリプトを活用するための第一歩は、実行環境の準備です。Windows 11では、セキュリティ強化のため、デフォルト設定ではスクリプト実行が制限されています。これを適切に設定しましょう。

まずは管理者権限でPowerShellを起動します。スタートメニューから「PowerShell」を検索し、右クリックして「管理者として実行」を選択するだけです。青い背景のウィンドウが表示されれば準備完了です。次に、現在の実行ポリシーを確認してみましょう。

「Get-ExecutionPolicy」コマンドを実行すると、現在の設定が表示されます。おそらく「Restricted」と表示されるでしょう。これでは自作スクリプトが実行できません。安全にスクリプトを実行するため、「RemoteSigned」ポリシーに変更します。

関連記事:Windows 11のセキュリティ設定完全ガイド|初心者でも安全に使える7つの手順

「Set-ExecutionPolicy RemoteSigned」と入力して実行します。確認メッセージが表示されたら「Y」を入力しましょう。これで、ローカルで作成したスクリプトは実行できるようになりますが、インターネットからダウンロードしたスクリプトは署名が必要という、バランスの取れたセキュリティ設定になります。

どうですか?意外と簡単だと感じませんか?

スクリプトファイルの実行方法も覚えておきましょう。「.ps1」拡張子のファイルを直接ダブルクリックしても、セキュリティ上の理由からメモ帳が開くだけです。正しく実行するには、PowerShellウィンドウで「.\スクリプト名.ps1」のように入力します。「.\」はカレントディレクトリを指す記号です。

より快適な開発環境を求めるなら、Windows 11に標準搭載されている「Windows Terminal」がおすすめです。複数のタブ管理、豊富なカスタマイズオプション、Unicode対応など、開発効率を大幅に向上させる機能が満載です。PowerShellとの相性も抜群で、スクリプト開発の強力な味方になってくれます。

関連記事:Windows 11を自分好みにする26の効率的カスタマイズ方法

また、本格的なスクリプト開発には「Visual Studio Code」と「PowerShell拡張機能」の組み合わせが最適です。シンタックスハイライト、インテリセンス、デバッグ機能など、プロフェッショナルな開発環境を無料で利用できます。Windows 11との統合も進んでおり、スムーズな開発体験が可能です。

基本的なPowerShellスクリプトの書き方と実行方法

PowerShellスクリプトの基本を身につけましょう。スクリプトは単なるコマンドの羅列ではなく、構造化されたプログラミングが可能です。まずは簡単な例から始めてみましょう。

テキストエディタを開き、以下のコードを入力してみてください。これは最も基本的な「Hello World」スクリプトです。

# 最初のPowerShellスクリプト
Write-Host "Hello, Windows 11 PowerShell World!"

このファイルを「HelloWorld.ps1」として保存し、PowerShellで「.\HelloWorld.ps1」と入力して実行してみましょう。「Hello, Windows 11 PowerShell World!」というメッセージが表示されるはずです。「#」で始まる行はコメントとして扱われ、実行されません。

PowerShellでは変数名の前に「$」記号を付けます。型宣言は必須ではありませんが、明示的に指定することもできます。以下は変数を使った簡単な例です。

$name = "Windows 11ユーザー"
Write-Host "こんにちは、$nameさん!"

PowerShellスクリプトのコード例とその実行結果条件分岐も簡単に実装できます。if文の基本構文は以下の通りです。

$hour = (Get-Date).Hour
if ($hour -lt 12) {
    Write-Host "おはようございます!"
} elseif ($hour -lt 18) {
    Write-Host "こんにちは!"
} else {
    Write-Host "こんばんは!"
}

PowerShellの比較演算子は少し特殊です。「-lt」(less than)、「-gt」(greater than)、「-eq」(equal)などを使います。これはテキスト処理との混同を避けるための設計です。

繰り返し処理にはいくつかの方法があります。最もよく使われるのはforeach文です。

$fruits = @("りんご", "バナナ", "オレンジ")
foreach ($fruit in $fruits) {
    Write-Host "私は$fruitが好きです。"
}

PowerShellの強力な機能の一つが、パイプライン「|」を使ったコマンドの連結です。これにより、あるコマンドの出力を次のコマンドの入力として渡すことができます。

Get-Process | Where-Object { $_.CPU -gt 10 } | Sort-Object CPU -Descending

このコマンドは、CPU使用率が10%を超えるプロセスを抽出し、CPU使用率の高い順に並べ替えます。「$_」は現在処理中のオブジェクトを表す特殊な変数です。

スクリプトの実行が終わっても結果を保持したい場合は、変数に格納しましょう。

$result = Get-Process | Where-Object { $_.CPU -gt 10 }
# 後で$resultを使って処理を続行できます

エラーハンドリングも重要です。try-catchブロックを使用して、エラーが発生した場合の処理を指定できます。

try {
    $content = Get-Content "存在しないファイル.txt" -ErrorAction Stop
} catch {
    Write-Host "エラーが発生しました: $_"
}

実用的なPowerShellスクリプト例とその活用法

PowerShellの真価は実際の業務で発揮されます。日常的なタスクを自動化する実用的なスクリプト例をいくつか見ていきましょう。これらのスクリプトは、Windows 11環境で特に効果を発揮します。

まずは、システム情報を収集して整理するスクリプトです。IT管理者にとって、複数のPCの情報を効率的に収集することは重要な業務です。

# システム情報収集スクリプト
$computerInfo = Get-ComputerInfo
$osInfo = $computerInfo.OsName + " " + $computerInfo.OsVersion
$processorInfo = $computerInfo.CsProcessors.Name
$memoryGB = [math]::Round($computerInfo.CsTotalPhysicalMemory / 1GB, 2)

$results = [PSCustomObject]@{
    ComputerName = $env:COMPUTERNAME
    OperatingSystem = $osInfo
    Processor = $processorInfo
    MemoryGB = $memoryGB
    LastBootTime = (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
}

$results | Format-List

このスクリプトを実行すると、コンピュータ名、OS情報、プロセッサ情報、メモリ容量、最終起動時間が整理されて表示されます。CSV形式で保存すれば、複数のPCの情報を一元管理することも可能です。

PowerShellでシステム情報を収集している画面次に、ファイル管理を効率化するスクリプトです。特定の拡張子のファイルを検索して、更新日時順に並べ替えるシンプルながら便利なスクリプトです。

# 特定拡張子のファイルを検索して更新日時順に表示
$extension = "docx"  # 検索したい拡張子
$searchPath = "C:\Users\$env:USERNAME\Documents"  # 検索パス

Get-ChildItem -Path $searchPath -Filter "*.$extension" -Recurse |
    Sort-Object LastWriteTime -Descending |
    Select-Object Name, LastWriteTime, Length, FullName |
    Format-Table -AutoSize

このスクリプトは、ドキュメントフォルダ内のすべてのWord文書(.docx)を検索し、最新の更新順に表示します。拡張子を変更するだけで、さまざまなファイルタイプに対応できます。

バックアップ作業も自動化できます。

関連記事:Windows 11のバックアップ方法を完全解説【2025年最新】

以下は、重要なフォルダを圧縮してバックアップするスクリプトです。

# 重要フォルダのバックアップスクリプト
$sourceFolder = "C:\ImportantData"
$backupRoot = "D:\Backups"
$date = Get-Date -Format "yyyyMMdd_HHmmss"
$backupFile = "$backupRoot\Backup_$date.zip"

# バックアップフォルダが存在しない場合は作成
if (-not (Test-Path $backupRoot)) {
    New-Item -Path $backupRoot -ItemType Directory
}

# 圧縮してバックアップ
Compress-Archive -Path $sourceFolder -DestinationPath $backupFile

Write-Host "バックアップが完了しました: $backupFile"

このスクリプトをタスクスケジューラに登録すれば、定期的な自動バックアップが実現します。Windows 11のタスクスケジューラとPowerShellの組み合わせは、システム管理の強力な武器になります。

関連記事:Windows 11のタスクスケジューラ完全解説|初心者でも使える設定方法

Windows 11の新機能を活用したスクリプトも作成できます。例えば、新しいウィジェット機能と連携して、重要な情報を表示するスクリプトなどが考えられます。

業務効率化の観点では、繰り返し作業の自動化が重要です。例えば、複数のPDFファイルを一括で処理するスクリプトは、事務作業の効率を大幅に向上させます。

PowerShellスクリプトは、単体で使用するだけでなく、既存のアプリケーションと連携することでさらに威力を発揮します。例えば、ExcelやSQLServerとの連携により、データ分析や報告書作成を自動化できます。

関連記事:Officeエクセル関数の基本から応用まで完全活用法

PowerShellスクリプトのセキュリティと実行ポリシー

PowerShellスクリプトの活用には、セキュリティへの理解が不可欠です。適切な設定を行わないと、悪意あるスクリプトによる被害を受ける可能性があります。Windows 11では、セキュリティ機能が強化されていますが、正しく理解して使いこなすことが重要です。

PowerShellには「実行ポリシー」という重要な概念があります。これはスクリプトの実行を制御するセキュリティ機能で、以下の主要なポリシーがあります。

  • Restricted: デフォルト設定。スクリプトの実行を許可しません。
  • RemoteSigned: ローカルで作成したスクリプトは実行可能。ダウンロードしたスクリプトには署名が必要。
  • AllSigned: すべてのスクリプトに署名が必要。
  • Unrestricted: すべてのスクリプトが実行可能(非推奨)。
  • ByPass: すべての制限を無視(非推奨)。

PowerShellセキュリティ設定画面一般的には「RemoteSigned」が推奨されます。ローカルでの開発を妨げず、外部からのスクリプトに対しては検証を要求するバランスの取れた設定です。現在の設定は「Get-ExecutionPolicy」コマンドで確認でき、「Set-ExecutionPolicy」コマンドで変更できます。

ただし、実行ポリシーはセキュリティの完全な解決策ではありません。悪意ある攻撃者は、さまざまな方法でこれを回避する可能性があります。そのため、信頼できるソースからのスクリプトのみを実行することが基本です。

スクリプトの署名は、その作成者を確認する重要な手段です。デジタル署名により、スクリプトが改ざんされていないことと、信頼できる作成者によるものであることを確認できます。企業環境では、内部開発スクリプトに署名することで、セキュリティと利便性のバランスを取ることができます。

自分のスクリプトに署名するには、まず証明書が必要です。テスト目的なら自己署名証明書を作成できますが、本番環境では正規の証明機関による証明書を使用すべきです。

# テスト用の自己署名証明書を作成
$cert = New-SelfSignedCertificate -Subject "CN=PowerShell Code Signing" -Type CodeSigningCert -CertStoreLocation Cert:\CurrentUser\My

# スクリプトに署名
Set-AuthenticodeSignature -FilePath .\MyScript.ps1 -Certificate $cert

Windows 11のセキュリティ強化の一環として、Microsoft Defenderとの統合も進んでいます。スクリプトの実行前に自動的にスキャンされ、潜在的な脅威が検出されます。

関連記事:Windows 11のプライバシー設定を徹底解説|安全な使い方ガイド

また、PowerShell 7では「Constrained Language Mode」という機能も強化されています。これは、特定の危険な操作を制限することで、スクリプトの潜在的な危険性を低減します。

スクリプトを配布する際は、ショートカットを活用する方法も便利です。PowerShellスクリプトファイルのショートカットを作成し、プロパティのリンク先を以下のように設定します。

PowerShell -ExecutionPolicy ByPass -NoExit "パス\スクリプト名.ps1"

これにより、ユーザーはダブルクリックだけでスクリプトを実行できます。ただし、この方法はセキュリティポリシーを一時的に回避するため、信頼できる環境でのみ使用すべきです。

最後に、スクリプトの内容を常に確認することも重要です。特に他者から提供されたスクリプトは、実行前に内容を確認し、理解することをお勧めします。不審なコマンドや理解できない処理が含まれている場合は、実行を避けるべきです。

PowerShellスクリプトの高度な活用テクニック

基本を押さえたら、次はPowerShellの高度な機能を活用して、より複雑な自動化を実現しましょう。Windows 11環境では、これらの高度なテクニックがさらに威力を発揮します。

まず、関数を使ったモジュール化です。繰り返し使用する処理は関数として定義すると、コードの可読性と再利用性が向上します。

function Get-DiskSpace {
    param (
        [string]$ComputerName = $env:COMPUTERNAME
    )
    
    Get-CimInstance -ComputerName $ComputerName -ClassName Win32_LogicalDisk |
        Where-Object { $_.DriveType -eq 3 } |
        Select-Object DeviceID, 
            @{Name="SizeGB";Expression={[math]::Round($_.Size / 1GB, 2)}},
            @{Name="FreeGB";Expression={[math]::Round($_.FreeSpace / 1GB, 2)}},
            @{Name="PercentFree";Expression={[math]::Round(($_.FreeSpace / $_.Size) * 100, 2)}}
}

# 使用例
Get-DiskSpace

この関数は、指定したコンピュータのディスク空き容量情報を取得します。パラメータのデフォルト値を設定することで、引数なしでも実行できる柔軟性を持たせています。

PowerShellのエラーハンドリングも重要なスキルです。try-catch-finallyブロックを使用して、エラーが発生した場合の処理を制御できます。

try {
    # エラーが発生する可能性のある処理
    $result = 10 / 0
} catch [System.DivideByZeroException] {
    # 特定の例外に対する処理
    Write-Host "ゼロ除算エラーが発生しました"
} catch {
    # その他の例外に対する処理
    Write-Host "エラーが発生しました: $_"
} finally {
    # エラーの有無にかかわらず実行される処理
    Write-Host "処理を終了します"
}

PowerShellの強力な機能の一つが、.NETフレームワークへの直接アクセスです。これにより、PowerShellの機能を大幅に拡張できます。

# .NETクラスを使用してGUIメッセージボックスを表示
[System.Windows.Forms.MessageBox]::Show("これはテストメッセージです", "PowerShellからのメッセージ", 
    [System.Windows.Forms.MessageBoxButtons]::OK, 
    [System.Windows.Forms.MessageBoxIcon]::Information)

このスクリプトを実行するには、最初に「Add-Type -AssemblyName System.Windows.Forms」を実行して必要なアセンブリをロードする必要があります。

並列処理を活用すれば、処理速度を大幅に向上させることができます。Windows 11の高性能なマルチコアプロセッサを最大限に活用しましょう。

# 並列処理の例
$computers = @("PC1", "PC2", "PC3", "PC4", "PC5")

$computers | ForEach-Object -Parallel {
    $computerName = $_
    $pingResult = Test-Connection -ComputerName $computerName -Count 1 -Quiet
    [PSCustomObject]@{
        ComputerName = $computerName
        Online = $pingResult
    }
} -ThrottleLimit 10

このスクリプトは、複数のコンピュータに対して並列で接続テストを実行します。「-ThrottleLimit」パラメータで同時実行数を制御できます。

PowerShellのリモート実行機能も非常に強力です。これを活用すれば、複数のコンピュータに対して一括で操作を実行できます。

# リモートコンピュータでコマンドを実行
Invoke-Command -ComputerName "RemotePC" -ScriptBlock {
    Get-Service | Where-Object { $_.Status -eq "Running" }
}

この機能を使用するには、リモートコンピュータでPSRemotingを有効にする必要があります。セキュリティ上の理由から、デフォルトでは無効になっています。

関連記事:Windows 11のリモートデスクトップ設定完全ガイド

スクリプトのパフォーマンス測定も重要です。「Measure-Command」を使用して、スクリプトの実行時間を測定できます。

Measure-Command {
    # 測定したいスクリプトブロック
    1..1000 | ForEach-Object { $_ * 2 }
}

最後に、スクリプトのスケジュール実行も重要なテクニックです。Windows 11のタスクスケジューラと連携して、定期的にスクリプトを実行できます。

# 毎日午前9時にスクリプトを実行するタスクを作成
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\DailyReport.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 9am
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "Daily Report" -Description "毎日のレポート生成"

関連記事:Windows 11のタスクスケジューラ完全解説|初心者でも使える設定方法

これらの高度なテクニックを組み合わせることで、Windows 11環境でのシステム管理や業務自動化の可能性が大きく広がります。PowerShellの学習曲線は決して緩やかではありませんが、その投資に見合う価値は十分にあります。

まとめ:Windows 11でPowerShellスクリプトを最大限に活用するために

Windows 11環境でのPowerShellスクリプト活用について、基本から応用まで幅広く解説してきました。PowerShellは単なるコマンドラインツールではなく、Windows管理のための強力な自動化プラットフォームです。適切に活用することで、日常業務の効率化からシステム管理の高度な自動化まで、幅広いシナリオで威力を発揮します。

本記事で学んだ内容を振り返ってみましょう。まず、PowerShellの基本概念とWindows 11での位置づけを理解しました。次に、実行環境の準備方法と基本的なスクリプトの書き方を学び、実用的なスクリプト例でその活用法を見てきました。さらに、セキュリティ面での注意点と高度な活用テクニックまで踏み込んで解説しました。

PowerShellスクリプトの学習は、最初は敷居が高く感じるかもしれません。しかし、基本的な構文と概念を理解すれば、徐々に複雑なスクリプトも書けるようになります。重要なのは実際に手を動かして試してみることです。エラーが出ても落ち込む必要はありません。むしろ、そこから学ぶことが多いのです。

Windows 11ではPowerShellの機能がさらに強化され、より直感的に使えるようになっています。Windows Terminalとの統合や、クロスプラットフォーム対応の進化など、使いやすさと機能性の両面で大きく進化しています。これらの新機能を積極的に活用していきましょう。

最後に、PowerShellスクリプトの活用において最も重要なのは、セキュリティへの配慮です。便利な自動化ツールである一方、悪用されれば大きな被害をもたらす可能性もあります。適切な実行ポリシーの設定や、信頼できるソースからのスクリプト入手など、基本的なセキュリティ対策を怠らないようにしましょう。

PowerShellスクリプトの世界は奥深く、本記事で紹介した内容はその入り口に過ぎません。さらに学びを深めたい方は、Microsoft公式ドキュメントやコミュニティフォーラムなどのリソースを活用することをお勧めします。日々の小さな自動化から始めて、徐々にスキルを磨いていくことで、PowerShellの真価を実感できるでしょう。

Windows 11の新時代に、PowerShellスクリプトを味方につけて、より効率的なPC環境を構築していきましょう。そして、Windows環境をさらに快適に使いこなすためには、正規のライセンスを持つOSの使用が欠かせません。

関連記事:Windows 11 Pro 正規品を最安値で入手する方法

Windows 11を最新の状態で安全に使用するためには、正規のライセンスが必要です。PCユービックでは、正規認証保証付きのWindows 11 ProやWindows 11 Homeなどを格安価格でご提供しています。PowerShellスクリプトを含むWindows 11の全機能を安心して活用するために、ぜひご検討ください。

Windows 11正規ライセンスをお探しの方はこちら|【PCユービック公式】

関連記事:Windows正規ライセンスを確認する5つの方法【完全ガイド】