필사 모드: モダンPowerShell & Windows DevOps 2026 完全ガイド - PowerShell 7.5・WinGet・Sysinternals・DSC v3・Windows Terminal・WSL2 徹底解説
日本語「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は...