Skip to content

필사 모드: モダンPowerShell & Windows DevOps 2026 完全ガイド - PowerShell 7.5・WinGet・Sysinternals・DSC v3・Windows Terminal・WSL2 徹底解説

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

「Windows DevOpsは死んだ」という神話への別れ

2026年の現在、「DevOpsはLinuxだけのもの」という主張はもはや事実ではありません。Windows Server 2025がホットパッチとOpenSSHを既定で搭載して以来、Windowsは再びエンタープライズ自動化の一級市民として戻ってきました。NHN CloudのWindows VMワークロードは2025年時点でIaaS売上の22%を占め、Samsung SDSとLG CNSの大規模SIプロジェクトの多くはいまだにActive DirectoryとSCCMの上で動いています。日本のNEC、IIJ、富士通はWindows運用を中核サービスとして維持しており、Microsoft Japanの東京オフィスはPowerShell 7.5のPSReadLine日本語入力改善に直接コントリビュートしました。

本記事は2026年5月時点でPowerShell 7.5、WinGet、Sysinternals 2024.x、DSC v3、Windows Terminal 1.21といったツールを、単なるcmdletの羅列を超えて — 実際の運用パターン、ハマりどころ、そして韓国・日本・グローバルの具体例とともに掘り下げる実践ガイドです。Linuxしか触ったことがないエンジニアでも、30年来のWindows管理者でも、得られるものがあるはずです。

1. PowerShell 7.5 と Windows PowerShell 5.1 の違い

最初にはっきりさせておくべきことがあります。**PowerShellは2つあります。**

- **Windows PowerShell 5.1**: 2016年リリース、.NET Framework 4.x ベース、Windows 10/11に既定で含まれる。新機能の追加なし(セキュリティ修正のみ)。

- **PowerShell 7.x**: 2020年から始まったオープンソースのクロスプラットフォーム後継。2026年時点で7.4 LTSと7.5 GAが並行運用。.NET 8/9 ベース。

5.1を離れるべき理由は明確です。

1. **速度** — 7.5は多くのワークロードで5.1の3〜5倍高速。ForEach-Object -Parallelは5.1には存在しません。

2. **.NET 9** — System.Text.JsonやHttpClientなどモダンなライブラリが使えます。

3. **ネイティブコマンド統合** — kubectl、terraform、azといったツールの出力解析が圧倒的に自然。

4. **クロスプラットフォーム** — 同じスクリプトがLinuxとmacOSでも動きます。

5. **Predictive IntelliSense** — Az PredictorやGitHub Copilot for CLIと統合。

ただし5.1を完全に切れないケースもあります。Active Directory(RSAT)の一部cmdlet、ConfigMgr(SCCM)モジュール、一部の旧Exchange Onlineモジュールは依然として5.1専用です。回避策としては7.5の`WindowsCompatibility`モジュール、または`pwsh -WindowsPowerShell`での互換モード起動が定番です。

2. PowerShell 7.5 の主要新機能

#Requires -Version 7.4

ForEach-Object -Parallel: 5.1にはない

1..100 | ForEach-Object -Parallel {

"Processing $_"

Start-Sleep -Seconds 1

} -ThrottleLimit 10

三項演算子 (7.0+)

$status = (Test-Path C:\foo) ? "exists" : "missing"

パイプラインチェーン演算子

Get-Service Spooler && Restart-Service Spooler || Write-Warning "Service not found"

Null条件演算子

$user?.Profile?.Email

Splatting + 高度な関数

$params = @{

Path = "C:\Logs"

Recurse = $true

Filter = "*.log"

}

Get-ChildItem @params

7.5での注目すべき変更点は、`ConvertTo-Json -EnumsAsStrings`が既定動作になったこと、`Test-Json`のスキーマ検証強化、そしてPSResourceGetがPSGalleryクライアントを実質的に置き換えたことです。

3. PowerShell Gallery と PSResourceGet

PowerShellのパッケージマネージャは2種類あります。

- **PowerShellGet 2.x** (旧版) — Install-Module、Find-Module

- **Microsoft.PowerShell.PSResourceGet** (新版、7.4+に既定同梱) — Install-PSResource、Find-PSResource

新版(推奨)

Install-PSResource -Name Az -Scope CurrentUser

Install-PSResource -Name Microsoft.Graph -Scope AllUsers

旧版(互換性のため)

Install-Module -Name PSScriptAnalyzer -Scope CurrentUser -Force

プライベートフィードの登録

Register-PSResourceRepository -Name "InternalNuGet" -Uri "https://nuget.internal/v3/index.json"

PSResourceGetはNuGet v3プロトコルをネイティブにサポートするため、Azure Artifacts、GitHub Packages、JFrog Artifactoryなど社内フィードと直接連携できます。これはPowerShellGet 2.xの最大の弱点でした。

4. PSScriptAnalyzer によるLint

Install-PSResource PSScriptAnalyzer -Scope CurrentUser

単一ファイル

Invoke-ScriptAnalyzer -Path .\Deploy.ps1 -Severity Warning,Error

ディレクトリ再帰

Invoke-ScriptAnalyzer -Path .\scripts -Recurse -Settings PSGallery

CIに統合(終了コード活用)

$results = Invoke-ScriptAnalyzer -Path .\scripts -Recurse

if ($results) {

$results | Format-Table

throw "Linting failed with $($results.Count) issues"

}

リポジトリのルートに`PSScriptAnalyzerSettings.psd1`を置けばチーム全体で同じルールを共有できます。韓国のKakao Enterpriseと日本のサイバーエージェントはこのパターンをCIゲートとして標準化しています。

5. Pester 5 によるテスト

PesterはPowerShellのデファクトスタンダードなテストフレームワークです。4.xと5.xで構文が大きく異なるため、新規プロジェクトは必ず5.xを使ってください。

Tests/Get-UserInfo.Tests.ps1

BeforeAll {

. $PSScriptRoot/../src/Get-UserInfo.ps1

}

Describe "Get-UserInfo" {

Context "有効なユーザー" {

It "名前を返す" {

$result = Get-UserInfo -UserId 1

$result.Name | Should -Be "Alice"

}

It "モックAPIを呼ぶ" {

Mock Invoke-RestMethod { @{ name = "Test" } }

Get-UserInfo -UserId 1

Should -Invoke Invoke-RestMethod -Times 1

}

}

Context "エラー処理" {

It "存在しないIDでthrowする" {

{ Get-UserInfo -UserId -1 } | Should -Throw

}

}

}

実行

Invoke-Pester -Path ./Tests -Output Detailed

Pester 5の核心は**discovery/runの分離**です。`BeforeAll`はdiscoveryの後に実行され、`It`の中だけで使えるcmdlet(Should、Mockなど)があります。4.xのつもりで書くとデバッグが非常に困難になります。

6. PSReadLine と Predictive IntelliSense

Windows TerminalでPowerShellが本当に強力になったのはPSReadLineのおかげです。

予測ソース: History + プラグイン

Set-PSReadLineOption -PredictionSource HistoryAndPlugin

Set-PSReadLineOption -PredictionViewStyle ListView

キーバインド(bashスタイル)

Set-PSReadLineOption -EditMode Emacs

Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

Az Predictorをインストール

Install-PSResource Az.Tools.Predictor

Enable-AzPredictor

GitHub Copilot for CLIは別途インストール

gh extension install github/gh-copilot

`$PROFILE`(通常は`~/Documents/PowerShell/Microsoft.PowerShell_profile.ps1`)に上記設定を入れれば全セッションに反映されます。Az PredictorはAzure cmdletの次のパラメータをMLで提案し、Copilot for CLIは自然言語からコマンドを生成します。

7. WinGet — Windows公式パッケージマネージャ

WinGetはMicrosoftが2021年にリリースした公式パッケージマネージャで、2026年現在の安定版は1.10です。Windows 11とWindows 10 21H2以降に既定で搭載されています。

検索

winget search "vs code"

インストール(silent、ユーザーレベル)

winget install Microsoft.VisualStudioCode --scope user --silent

全パッケージのアップグレード

winget upgrade --all

エクスポート/インポート — 新規マシンセットアップの要

winget export -o C:\my-apps.json

winget import -i C:\my-apps.json

設定ファイル(DSCと統合)

winget configure --file workstation-setup.winget

WinGetの真の強みは**Microsoft Storeとコミュニティリポジトリの統合**です。ChocolateyとScoopの弱点(ストアアプリ非対応、ライセンス検証の欠如)を解消し、企業ではプライベートソースを社内登録できます。

8. ChocolateyとScoopの立ち位置

WinGetが標準になりましたが、ChocolateyとScoopも依然として有効な選択肢です。

- **Chocolatey** — 2011年リリース、エンタープライズ機能(Chocolatey for Business)が強力。Windows専用としては最大のコミュニティパッケージプール(10,000+)。

- **Scoop** — 開発者フレンドリー、非管理者権限でインストール可、PATH/環境変数の自動管理、「1ツール=1フォルダ」の哲学。

Chocolatey

choco install -y git nodejs python3

choco upgrade all -y

Scoop

scoop install git nodejs python

scoop update *

比較基準

- 管理者権限: choco (必要) vs scoop (不要)

- パッケージ分離: choco (グローバル) vs scoop (~/scoop/apps)

- エンタープライズ機能: chocoが優勢

実務での推奨: **開発者ワークステーションはScoop、サーバーはWinGetまたはChocolatey**が良い出発点です。

9. Sysinternals 2024.x — Mark Russinovich の道具箱

Sysinternalsは1996年にMark RussinovichとBryce Cogswellが作ったツール群で、2006年にMicrosoftが買収しました。MarkはAzureの現CTOです。2024.xが2026年5月時点での最新ラインです。

主要ツール:

- **Process Explorer (procexp)** — タスクマネージャの上位互換。親子ツリー、ハンドル/DLL検索、デジタル署名検証。

- **Process Monitor (procmon)** — ファイル/レジストリ/ネットワーク/プロセスのリアルタイムトレース。デバッグの最終兵器。

- **Autoruns** — スタートアップ、サービス、ドライバ、スケジューラを1画面で表示。マルウェアハンティングに必須。

- **TCPView** — netstatのGUI、リアルタイム更新。

- **RAMMap** — メモリ使用分析、キャッシュ/ページプールの可視化。

- **Strings** — バイナリからASCII/Unicode文字列を抽出。

- **SDelete** — DoD 5220.22-M準拠のセキュア削除。

- **BgInfo** — デスクトップ壁紙にホスト情報を表示(サーバー識別用)。

- **ZoomIt** — 画面ズーム + 注釈。Mark本人が登壇で使うことで有名になったツール。

Sysinternals Live — インストール不要で直接実行

ネットワーク位置を割り当てるか \\live.sysinternals.com\tools を直接指定

Start-Process "\\live.sysinternals.com\tools\procexp64.exe"

またはWinGetでスイートを一括インストール

winget install 9P7KNL5RWT25 # Sysinternals Suite

`live.sysinternals.com\tools`は常に最新ビルドをホストしています。USBなしでもインシデント対応中に即座に起動できるため、セキュリティチームの標準装備です。

10. Windows Terminal 1.21 — モダンなターミナル体験

cmd.exeとPowerShell.exeの古いコンソールホストを離れるときです。Windows Terminalは2019年にオープンソースで始まり、2026年には1.21まで進化しました。

主要機能:

- **タブと分割ペイン** — Alt+Shift+Dで分割、Alt+Shift+- / + で横/縦分割

- **プロファイル** — pwsh、cmd、WSL2 Ubuntu、Azure Cloud Shell、SSHセッションを1か所に

- **GPUレンダリング** — DirectWriteで数万行の出力もスムーズ

- **Quakeモード** — Win+\` で画面上からスライドダウン

- **設定UI** — JSON直接編集とGUIの両方をサポート

- **カラースキーム** — Campbell、One Half Dark、Solarized などを内蔵

`settings.json` の例:

{

"defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",

"profiles": {

"list": [

{

"guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",

"name": "PowerShell 7.5",

"commandline": "pwsh.exe -NoLogo",

"colorScheme": "One Half Dark",

"font": { "face": "CaskaydiaCove Nerd Font", "size": 11 }

}

]

},

"keybindings": [

{ "command": { "action": "splitPane", "split": "auto" }, "keys": "alt+shift+d" }

]

}

Nerd Font(例: CaskaydiaCove)を使えば、oh-my-poshやstarshipなどプロンプトフレームワークのアイコンが正しく表示されます。

11. WSL2 — Windowsの中の本物のLinuxカーネル

WSL2はMicrosoftがHyper-V上で動かす軽量Linuxカーネルです。WSL1のsyscall変換方式とは異なり、WSL2は実際のLinuxカーネルをそのまま実行します。

インストール

wsl --install

wsl --install -d Ubuntu-24.04

ディストリビューション管理

wsl --list --verbose

wsl --set-default Ubuntu-24.04

wsl --shutdown # 全インスタンス停止

wsl --export Ubuntu-24.04 C:\backup.tar

wsl --import Ubuntu-prod C:\WSL\prod C:\backup.tar

WSL2の主要な使い道:

1. **Docker Desktop / Podman Desktop / Rancher Desktop** — すべてWSL2バックエンドを既定で使用。

2. **開発環境** — LinuxツールチェーンをWindows上でそのまま。

3. **systemdサポート(2022年から)** — `/etc/wsl.conf`に`systemd=true`を追加。

4. **GUIアプリ(WSLg)** — Waylandベース、X11/Wayland両対応。

`.wslconfig`(ユーザーホームディレクトリ)でリソース制限:

[wsl2]

memory=8GB

processors=4

swap=2GB

networkingMode=mirrored

firewall=true

`mirrored`ネットワークモード(Windows 11 22H2+)はWSL2のIPをWindowsと共有するため、`localhost`が双方向にアクセス可能になります。

12. Windows コンテナ — Dockerではない別の道

WSL2上のLinuxコンテナとは別に、**Windowsコンテナ**そのものが存在します。Windows Server 2016からサポートされ、IIS/MSSQL/レガシー.NET Frameworkワークロードをコンテナ化するときに使われます。

2つの分離モード:

- **プロセス分離** — ホストとカーネル共有、高速、同じWindowsビルドが必要

- **Hyper-V分離** — 各コンテナが軽量VM、より安全、異なるWindowsバージョン可

Windows機能を有効化

Enable-WindowsOptionalFeature -Online -FeatureName containers -All

Docker Engine for Windows containers

1) Docker Desktopで「Switch to Windows containers」(開発用)

2) もしくはMirantis Container Runtime(本番用)

docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2025 powershell

NHN CloudではASP.NETレガシーをコンテナ化IISへ移行し、ホストマシン数を60%削減した事例があります。

13. DSC v3 — Desired State Configurationの復活

DSCはPowerShellベースの宣言型構成管理ツールで、2014年リリース後しばらく停滞していましたが、**DSC v3**(2024年GA、クロスプラットフォーム)で復活しました。v3はRustで書き直されたエンジンを使い、JSON/YAML入力を受け付けます。

example.dsc.config.yaml

$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json

resources:

- name: Web server packages

type: Microsoft.WinGet/Package

properties:

id: Microsoft.IIS.Express

source: winget

- name: Service state

type: Microsoft.Windows/Service

properties:

name: W3SVC

startupType: Automatic

state: Running

適用

dsc config set --file example.dsc.config.yaml

現在の状態を取得

dsc config get --file example.dsc.config.yaml

ドリフト検出

dsc config test --file example.dsc.config.yaml

DSC v3の強みは**PowerShell、WinGet、レジストリ、サービス、ファイルをすべて統一インターフェース**で管理できる点、そしてLinuxのリソース(systemd、aptなど)も同じ構文で扱える点です。Ansibleの冪等性にPowerShellの表現力を組み合わせた形と理解すれば良いでしょう。

14. Windowsに対するAnsible

AnsibleはSSHではなくWinRMまたはSSH(Windows Server 2019+で既定)経由でWindowsを管理します。

playbooks/iis.yml

- hosts: windows

tasks:

- name: Install IIS

ansible.windows.win_feature:

name: Web-Server

state: present

include_management_tools: yes

- name: Deploy site files

ansible.windows.win_copy:

src: ./dist/

dest: C:\inetpub\wwwroot\

inventory.ini:

[windows]

win-01 ansible_host=10.0.0.5

[windows:vars]

ansible_user=Administrator

ansible_password={{ vault_admin_pw }}

ansible_connection=winrm

ansible_winrm_transport=ntlm

ansible_port=5985

Ansibleの利点はプッシュ方式、エージェントレス、YAMLフレンドリーであること。欠点はWinRM設定のセキュリティ複雑度(Kerberos vs NTLM vs CredSSP)と、一部cmdletのラッピングが欠けていることです。

15. SCCM / Intune / Microsoft Endpoint Manager

エンタープライズデスクトップ/サーバー管理の二大柱:

- **SCCM (System Center Configuration Manager)** — オンプレベース。Windowsパッチ、ソフトウェア配信、OSイメージ配信。韓国大手SI環境のデファクトスタンダード。

- **Intune (Microsoft Endpoint Manager)** — クラウドベース。BYODやモバイルデバイスまでカバー。

2026年のトレンドは**コマネージメント**(SCCM + Intune併用)または**クラウドアタッチ**(SCCMインフラを徐々にIntuneへ移行)です。Samsung SDSやLG CNSの多くのプロジェクトがこの段階にあります。

PowerShell連携:

ConfigMgr cmdlet(5.1専用)

Import-Module ConfigurationManager

Set-Location "PRI:" # site code

Get-CMDevice -Name "PC-001"

Microsoft Graph経由でIntune管理(7.x可)

Connect-MgGraph -Scopes "DeviceManagementConfiguration.ReadWrite.All"

Get-MgDeviceManagementManagedDevice -Top 10

ConfigMgrモジュールはまだPowerShell 5.1を要求するため、Intune側はMicrosoft Graph経由で7.xから統合管理するハイブリッドパターンが一般的です。

16. Azure CLI 2 vs Az PowerShell

Azureを自動化する2つの方法:

- **Azure CLI 2 (az)** — Pythonベース、bash/zsh/pwshで同一動作、JSON出力が既定。

- **Az PowerShell** — PowerShellネイティブ、オブジェクトパイプライン、splatting、PSCustomObject。

Az PowerShell

Install-PSResource Az

Connect-AzAccount

Get-AzVM -ResourceGroupName "prod-rg" |

Where-Object { $_.PowerState -eq "VM running" } |

Select-Object Name, Location, HardwareProfile

Azure CLI(pwshから呼び出し)

az vm list --resource-group prod-rg --query "[?powerState=='VM running'].{name:name,location:location}" -o table

選択基準:

- **CI/CDパイプライン**: Azure CLI(クロスプラットフォーム、JSON解析が単純)

- **運用自動化 / PowerShellフレンドリーなチーム**: Az PowerShell(オブジェクトパイプラインの強み)

- **Bicep/ARMデプロイ**: どちらも同等に可能

17. AWS Tools for PowerShell、GCP PowerShell、GitHub CLI

AWS

Install-PSResource AWS.Tools.Common

Install-PSResource AWS.Tools.EC2

Set-AWSCredential -AccessKey AKIA... -SecretKey ... -StoreAs prod

Get-EC2Instance -ProfileName prod

GCP

Install-PSResource GoogleCloud

Get-GceInstance -Project my-project

GitHub CLI (gh)

winget install GitHub.cli

gh auth login

gh pr list --json number,title,author | ConvertFrom-Json | Format-Table

とくに`gh`は出力がクリーンなJSONなので、PowerShellの`ConvertFrom-Json`と相性抜群です。PR/Issue自動化で広く使われています。

18. Try/Catch、共通パラメータ、Splatting

本番品質PowerShellの3要素:

function Invoke-SafeRestApi {

[CmdletBinding()]

param(

[Parameter(Mandatory)][string]$Uri,

[int]$Retries = 3,

[int]$DelaySeconds = 2

)

for ($i = 1; $i -le $Retries; $i++) {

try {

$params = @{

Uri = $Uri

Method = 'Get'

TimeoutSec = 30

MaximumRetryCount = 0

ErrorAction = 'Stop'

}

return Invoke-RestMethod @params

}

catch [System.Net.Http.HttpRequestException] {

Write-Warning "Attempt $i failed: $($_.Exception.Message)"

if ($i -eq $Retries) { throw }

Start-Sleep -Seconds $DelaySeconds

}

finally {

Write-Verbose "Attempt $i complete"

}

}

}

共通パラメータが自動有効化: -Verbose, -ErrorAction, -ErrorVariable

Invoke-SafeRestApi -Uri "https://api.example.com/health" -Verbose -ErrorAction Continue

`[CmdletBinding()]`の一行で`Verbose`、`Debug`、`ErrorAction`、`WarningAction`などの共通パラメータが自動有効化されます。`@params`によるsplattingは可読性と再利用性の両方を向上させます。

19. パイプラインオブジェクトとPSCustomObject

PowerShellの真の力は**オブジェクトパイプライン**です。bashがテキストを流す一方で、PowerShellは.NETオブジェクトを流します。

パイプラインの例

Get-Process |

Where-Object { $_.WorkingSet64 -gt 500MB } |

Sort-Object -Property WorkingSet64 -Descending |

Select-Object -First 10 Name, Id, @{N='RAM(MB)';E={[int]($_.WorkingSet64/1MB)}} |

Format-Table

PSCustomObject = PowerShellのDTO

$report = Get-Service | ForEach-Object {

[PSCustomObject]@{

Name = $_.Name

Status = $_.Status

StartType = $_.StartType

CheckedAt = Get-Date

}

}

$report | Export-Csv services.csv -NoTypeInformation

$report | ConvertTo-Json -Depth 3 | Set-Content services.json

`ForEach-Object -Parallel`を加えると、IOバウンドのタスクが劇的に高速化します。

$servers = Get-Content servers.txt

$servers | ForEach-Object -Parallel {

Test-NetConnection $_ -Port 443 -InformationLevel Quiet

} -ThrottleLimit 32

20. GUI自動化 — Out-GridView、ImportExcel、PSWriteHTML

PowerShellでも軽量GUIを作れます。

Out-GridViewで対話的選択

$selected = Get-Process | Out-GridView -PassThru -Title "プロセス選択"

$selected | Stop-Process -WhatIf

ImportExcel — Excelなしで.xlsxを読み書き

Install-PSResource ImportExcel

Get-Service | Export-Excel -Path C:\services.xlsx -AutoSize -TableStyle Medium2

PSWriteHTML — インタラクティブHTMLレポート

Install-PSResource PSWriteHTML

New-HTML -FilePath C:\report.html -ShowHTML {

New-HTMLTab -Name "Services" {

New-HTMLTable -DataTable (Get-Service) -ScrollX

}

}

PSWriteHTMLで作るレポートはDataTablesとCharts.jsベースなので、検索・ソート・フィルタが全部できます。毎朝自動配信される運用レポートで頻繁に使われます。

21. Active Directory と Group Policy のcmdlet

Import-Module ActiveDirectory # RSAT必須、依然5.1フレンドリー

ユーザー検索

Get-ADUser -Filter "Department -eq 'Engineering'" -Properties EmailAddress |

Select-Object SamAccountName, EmailAddress

グループメンバ

Get-ADGroupMember -Identity "Domain Admins" -Recursive |

Get-ADUser -Properties LastLogonDate |

Select-Object Name, LastLogonDate

ローカルユーザー

New-LocalUser -Name "deployer" -Password (Read-Host -AsSecureString) -Description "CI Deployer"

Add-LocalGroupMember -Group "Administrators" -Member "deployer"

Group Policy

Get-GPO -All | Select-Object DisplayName, CreationTime, ModificationTime

Backup-GPO -Name "Default Domain Policy" -Path C:\GPOBackups

Active Directory cmdletは7.xでも`WindowsCompatibility`経由で使えますが、シナリオによっては5.1の方が安定です。

22. Microsoft Graph PowerShell SDK

既存のAzureADおよびMSOnlineモジュールは2024年に廃止され、**Microsoft Graph PowerShell SDK**が後継となりました。

Install-PSResource Microsoft.Graph -Scope CurrentUser

適切なスコープで接続

Connect-MgGraph -Scopes "User.Read.All","Group.Read.All"

Azure ADユーザー検索

Get-MgUser -Filter "department eq 'IT'" -Top 100 |

Select-Object DisplayName, UserPrincipalName, Mail

Conditional Accessポリシー

Get-MgIdentityConditionalAccessPolicy |

Select-Object DisplayName, State

Intuneデバイス

Get-MgDeviceManagementManagedDevice -Top 50 |

Where-Object { $_.OperatingSystem -eq "Windows" }

Disconnect-MgGraph

Microsoft GraphはREST API全体をPowerShellでラップした結果として60+のサブモジュールを持ちます。`Microsoft.Graph.Authentication`だけ入れて、必要なサブモジュールをその都度取得するのが軽量で良いでしょう。

23. Windows Server 2025 の新機能

2024年11月にGAしたWindows Server 2025のDevOps関連主要変更:

- **Windows Server向けホットパッチ** — 再起動なしでセキュリティパッチ(Azure Arc登録時は無料)。

- **OpenSSHが既定搭載(サーバー側)** — `Add-WindowsFeature -Name OpenSSH-Server`。

- **Sysmonが既定統合** — セキュリティイベントログの強化。

- **DTrace** — Linuxのstrace / eBPFに相当。

- **WSL2 on Server** — サーバーSKUでもWSL2が動作。

- **SMB over QUIC** — VPNなしでインターネット越しのファイル共有。

- **Active Directoryの30年ぶりの大規模アップデート** — 32kページサイズ、OPTIONAL_FEATURE導入。

SSHを有効化

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Start-Service sshd

Set-Service sshd -StartupType Automatic

既定シェルをpwshに

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `

-Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force

これによりLinuxスタイルのワークフロー(SSH + 標準ツール)がWindowsでも一級市民になりました。

24. ベストプラクティス — 実戦的な推奨事項

長期運用のためのベストプラクティス:

1. **`#Requires -Version 7.4`** — スクリプト先頭に宣言、誤ったインタプリタを遮断。

2. **エイリアス禁止** — `gci`、`?`、`%`ではなく`Get-ChildItem`、`Where-Object`、`ForEach-Object`を使用。可読性と静的解析の両方が向上。

3. **承認された動詞(Approved Verbs)** — `Get-Verb`で確認。新規関数名は必ず`Get-`、`Set-`、`New-`、`Invoke-`などの公式動詞を使用。

4. **コード署名証明書** — 本番スクリプトは必ず署名: `Set-AuthenticodeSignature -FilePath script.ps1 -Certificate $cert`。

5. **実行ポリシー** — マシンは`RemoteSigned`または`AllSigned`、絶対に`Bypass`を恒久適用しないこと。

6. **Constrained Language Mode** — 外部入力を扱う環境では有効化を検討。

7. **PSScriptAnalyzer + PesterをCIゲートに** — マージ前に自動ブロック。

8. **モジュールマニフェスト(.psd1)** — バージョン、依存関係、エクスポート関数を明示。

9. **ロギング** — `Start-Transcript`でセッション全体を記録、または`Write-Information`/`Write-Verbose`を明確に区別。

10. **エラー処理** — 既定で`$ErrorActionPreference = 'Stop'`、try/catchで明示的に処理。

25. PowerShell Universal と PowerShell Studio

Ironman Softwareの**PowerShell Universal**はPowerShellスクリプトをWeb API/ダッシュボード/スケジューラとして即座に公開できるツールです。社内セルフサービスポータルの構築で最もよく使われます。

PSUのページ定義(疑似コード)

New-UDPage -Name "VM Restart" -Content {

New-UDTextbox -Id "vmName"

New-UDButton -Text "Restart" -OnClick {

$name = (Get-UDElement -Id "vmName").value

Restart-AzVM -Name $name -ResourceGroupName "prod-rg"

Show-UDToast "Restarted $name"

}

}

**PowerShell Studio (SAPIEN Technologies)**はGUIビルダーを含むフルIDEで、フォームベースの運用ツールを視覚的に作る際に便利です。VS Code + PowerShell拡張が標準ですが、フォーム作業が多いチームには依然として良い選択肢です。

26. 韓国 / 日本 / グローバルのWindows DevOps現場

**韓国の事例**:

- **NHN Cloud** — Windows VMとSQL Serverワークロード、独自のPowerShell自動化ライブラリ。

- **Samsung SDS** — グローバルサイト運用にSCCM + Intune + PowerShell DSC v3を導入中。

- **Naver Cloud** — Windowsサーバーホスティング、Hyper-Vベースのクラウドコンソール。

- **LG CNS** — SIプロジェクトのActive Directory + GPO + ConfigMgr標準パターン。

- **Kakao Enterprise** — Pester + PSScriptAnalyzerをCIゲートとして標準化。

**日本の事例**:

- **NEC** — 官公庁・金融システムのWindows運用、JIS認証された自動化ツール。

- **IIJ** — Windows VPSホスティング、WSUS + PowerShellパッチ自動化。

- **Microsoft Japan(東京)** — PowerShell 7.5のi18n、PSReadLine日本語入力の安定化に貢献。

- **サイバーエージェント** — ゲーム運用にWindowsコンテナを活用。

- **富士通** — エンタープライズSCCM/Intune SI事業。

**グローバルなトレンド**:

- Microsoft自身がBing/Officeインフラの相当部分をPowerShell 7で運用。

- GitHub Actionsの`windows-2022`、`windows-2025`ランナーにPS 7.5が既定で含まれる。

- Azure DevOps Pipelines + Azure PowerShellは依然として強力な組み合わせ。

Windows DevOpsは死んでいません。むしろPowerShell 7、WSL2、OpenSSH、DSC v3、Microsoft Graphが集約することでLinux DevOpsに近いワークフローが可能になり、同時にActive DirectoryやSCCMといったエンタープライズ資産もそのまま活用できます。2026年のWindows DevOpsエンジニアは両世界の最良のツールを手にしています。

References

1. PowerShell公式ドキュメント — https://learn.microsoft.com/powershell/

2. PowerShell GitHub — https://github.com/PowerShell/PowerShell

3. PowerShell Gallery — https://www.powershellgallery.com/

4. PSScriptAnalyzer — https://github.com/PowerShell/PSScriptAnalyzer

5. Pester — https://pester.dev/

6. PSReadLine — https://github.com/PowerShell/PSReadLine

7. WinGet (Windows Package Manager) — https://learn.microsoft.com/windows/package-manager/

8. Chocolatey — https://chocolatey.org/

9. Scoop — https://scoop.sh/

10. WSL2公式 — https://learn.microsoft.com/windows/wsl/

11. Windows Terminal — https://github.com/microsoft/terminal

12. Sysinternals — https://learn.microsoft.com/sysinternals/

13. Sysinternals Live — https://live.sysinternals.com/

14. DSC v3 — https://learn.microsoft.com/powershell/dsc/overview

15. Ansible Windows — https://docs.ansible.com/ansible/latest/os_guide/windows.html

16. Az PowerShell — https://learn.microsoft.com/powershell/azure/

17. AWS Tools for PowerShell — https://aws.amazon.com/powershell/

18. Microsoft Graph PowerShell SDK — https://learn.microsoft.com/powershell/microsoftgraph/

19. Windows Server 2025 — https://learn.microsoft.com/windows-server/get-started/whats-new-in-windows-server-2025

20. Mark Russinovich — https://learn.microsoft.com/sysinternals/community/mark-russinovich

21. Ironman Software PowerShell Universal — https://ironmansoftware.com/powershell-universal

22. SAPIEN PowerShell Studio — https://www.sapien.com/software/powershell_studio

23. GitHub CLI — https://cli.github.com/

24. NHN Cloud — https://www.nhncloud.com/

25. Samsung SDS — https://www.samsungsds.com/

현재 단락 (1/398)

2026年の現在、「DevOpsはLinuxだけのもの」という主張はもはや事実ではありません。Windows Server 2025がホットパッチとOpenSSHを既定で搭載して以来、Windowsは...

작성 글자: 0원문 글자: 19,917작성 단락: 0/398