【無料ツール】画像をPDFに変換するPhotoPDF Appを公開しました!

【Windows Server入門 第1回】Linux脳を解き放て。「黒い画面」で管理するWindows ServerとPowerShellの真髄

記事内に広告が含まれています。
[PR]

  💡 サーバー構築やコマンドの練習には、VPSが圧倒的におすすめです。  

手元のパソコンや大切なメイン環境で検証を行うと、設定ミスでシステムを壊してしまったり、不要なパッケージが溜まって動作が不安定になるリスクがあります。

もしあなたが実務レベルのスキルを最短で身につけたいのであれば、月額ワンコインから使えて、失敗しても数分で初期状態にリセットできるVPS(仮想専用サーバー)を利用するのが、プロも実践する最も確実で安全な学習方法です。 「本記事は、10秒でサーバーが起動できる [ConoHa VPS](PR) の環境を使用して検証しています。」

▼ プロも推奨するVPS環境はこちら ▼

「WindowsはGUIだから簡単」という最大の誤解。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
普段はNginxのチューニングやDockerコンテナのオーケストレーションなど、黒い画面(ターミナル)と向き合っている皆さん。
突然ですが、Windows Serverの管理を任されたらどう感じますか?

「クリックするだけでしょ? 楽勝じゃん」
そう思って挑んだLinuxエンジニアが、数日後に「設定ファイルがどこにもない!」「ログがgrepできない!」「再起動しないと設定が反映されない!」と発狂する姿を、私は何度も見てきました。

コウ君

先生、まさにそれです…。
上司にAD(Active Directory)サーバーの構築を頼まれたんですけど、コントロールパネルと「設定」アプリを行ったり来たり。
やっと設定できたと思ったら、手順書に残そうにも「ウィンドウの右上の…」とかスクショを貼るしかなくて。
Ansibleで自動化したいのに、GUIじゃ無理ですよ! Windowsってなんでこんなにエンジニアに優しくないんですか?

リナックス先生

コウ君、それはあなたが「Windowsの本当の姿」を知らないからよ。
プロのWindowsエンジニアは、マウスなんてほとんど触らないわ。
彼らは黒い画面で、Linux以上に構造化されたデータを操っているの。
今日は、Linuxエンジニアのその「偏見」をぶち壊すために、Windowsインフラ界のスペシャリストを呼んできたわ。
入ってきて、ウィンドウズ先生!

ウィンドウズ先生

はじめまして、ウィンドウズ先生です。
Linuxエンジニアの皆さんが抱えるフラストレーション、よく理解できます。
「Everything is a file(すべてはファイルである)」というUNIX哲学と、Windowsの設計思想は水と油ですからね。
しかし、現代のWindows Serverは、PowerShellという強力な武器によって、Linux以上に「プログラマブル」なOSに進化しています。
この講座で、あなたのLinuxスキルを活かしつつ、Windowsをハックする方法を伝授しましょう。

本シリーズでは、Linuxエンジニアが躓きやすいポイント(メンタルモデルの違い)に焦点を当て、プロレベルのWindows Server構築・運用術を全8回で徹底解説します。

🟦 Windows Server入門講座(全8回)カリキュラム

現在地:【第1回】Linux脳を解き放て。「黒い画面」で管理するWindows ServerとPowerShellの真髄

  • 【第1回】Linux脳を解き放て。「黒い画面」で管理するWindows ServerとPowerShellの真髄
  • 【第2回】Active Directory (AD) 構築。世界を支配する認証基盤の仕組み
  • 【第3回】ファイルサーバーと権限管理。chmod 777が存在しない世界(NTFS/ReFS)
  • 【第4回】Windows版Webサーバー「IIS」入門。Nginx使いが知るべき作法の違い
  • 【第5回】WSL2とWindows Terminal。Windows上でLinuxを飼い慣らすハイブリッド開発環境
  • 【第6回】更新プログラムとの戦い。WSUS構築とWindows Updateの完全制御
  • 【第7回】トラブルシューティングとイベントビューア。grepできないログをどう読むか
  • 【第8回】Hyper-Vとコンテナ。WindowsコンテナとDockerの共存戦略

※参考:Linuxの基礎を復習したい方はNginx基本講座もご覧ください。


第1章:メンタルモデルの激突。「ファイル」vs「API」

ウィンドウズ先生

まず、LinuxエンジニアがWindowsを嫌う最大の理由、「設定の不透明さ」について解説します。
Linuxでは /etc 以下のテキストファイルを見れば全てが分かりますが、Windowsは違います。

Linux:テキストストリームの世界

Linuxの設定は「テキストファイル」であり、OSの状態は「ファイルシステム」に反映されます。
cat で読み、grep で探し、vim で書き換える。
これは「OSと人間が同じ言語(テキスト)で対話している」状態です。

Windows:APIとオブジェクトの世界

Windowsの設定は、レジストリ(バイナリDB)、WMI(CIMリポジトリ)、ADデータベースといった「構造化されたデータストア」に格納されています。
これらは人間が直接テキストエディタで読み書きすることを想定していません。

Windowsを操作するということは、テキストファイルを書き換えることではなく、「API(Application Programming Interface)を叩いて、OSにリクエストを送る」ことなのです。
GUIの画面も、PowerShellのコマンドも、裏側では同じAPI(Win32 APIや.NET Framework)を呼び出しています。

💡 プロの視点:なぜWindowsはテキスト設定じゃないのか?
「使いにくい!」と怒る前に、背景を知りましょう。
Windowsは巨大なエンタープライズ環境での一元管理を前提に設計されています。
テキストファイルは手軽ですが、数万台のPCの設定を整合性を保って書き換えるのは困難です(構文エラーのリスクなど)。
一方、API経由でアクセスするデータベース(レジストリやAD)であれば、型チェック、トランザクション、アクセス権限制御を厳密に行えます。
つまり、Windowsは「堅牢性と大規模管理」のために、あえてテキスト設定を捨てているのです。


第2章:GUIを捨てろ。「Server Core」がプロの標準

コウ君

でも先生、Windows Serverをインストールする時、「Desktop Experience(デスクトップ エクスペリエンス)」を選ばないと、画面が真っ暗で何もできないですよね?
やっぱりマウスがないと不安で……。

ウィンドウズ先生

それこそが「素人」の思考です。
LinuxサーバーにわざわざGNOMEやKDE(デスクトップ環境)を入れますか?入れませんよね。
リソースの無駄だし、Firefoxなどの余計なアプリが入ることでセキュリティホールが増えるからです。
Windowsも同じ。本番環境ではGUIを持たない「Server Core」が推奨されます。

Server Coreのメリット

Windows Serverにはインストールオプションが2つあります。

  1. Desktop Experience: 従来のWindows。GUIあり。重い。パッチ適用時の再起動が多い。
  2. Server Core: CUIのみ。コマンドプロンプトとPowerShellしか動かない。軽量。堅牢。

プロの現場では、Webサーバー、ADドメインコントローラー、ファイルサーバーなど、多くの役割でServer Coreが採用されます。
「ディスク容量削減」だけでなく、「GUI関連の更新プログラムが不要になるため、再起動回数が減る」という運用上のメリットが絶大だからです。

どうやって管理するのか?

「Server Coreの前に座って黒い画面でコマンドを打つ」わけではありません。
Windows 10/11の管理用端末から、リモート管理ツール(RSAT)Windows Admin Centerを使って、ネットワーク越しにGUIで操作するのが正解です。
サーバー自体にはGUIを持たせず、管理端末のGUIからAPIを叩いて操作する。これがモダンなWindows管理です。


第3章:PowerShellは「Bashの代わり」ではない

Linuxエンジニアが最も誤解しているのがPowerShellです。
「ああ、Windows版のBashでしょ? ls とか使えるし」と思っていると痛い目を見ます。

Bash:テキストのバケツリレー

Linuxのパイプラインは「テキスト(文字列)」を渡します。

# プロセス一覧から 'nginx' を含む行を探し、スペースで区切って2番目(PID)を取り出す
ps aux | grep nginx | awk '{print $2}'

これは「行指向」の処理であり、出力フォーマットが少しでも変わると(スペースの数が変わるなど)、スクリプトは動かなくなります。

PowerShell:オブジェクトのバケツリレー

PowerShellのパイプラインは「.NETオブジェクト」を渡します。
文字データではなく、「プロパティとメソッドを持ったデータの塊」が流れます。

# プロセス名が 'nginx' のものを探し、その Id プロパティを取り出す
Get-Process | Where-Object { $_.ProcessName -eq 'nginx' } | Select-Object Id

ここにはテキスト解析(grepやawk)は存在しません。
Get-Process はプロセスオブジェクトの配列を返し、Where-Object はそのプロパティを見てフィルタリングします。
データ構造が保証されているため、「出力フォーマットが変わってもスクリプトが壊れない」という強みがあります。

LinuxエンジニアのためのPowerShell翻訳ガイド

エイリアス(別名)を使えばLinuxライクに操作できますが、実体は異なります。

Linux (Bash) PowerShell (正式名称) 意味の違い
ls -l Get-ChildItem ファイル名一覧ではなく、FileInfoオブジェクトの配列を取得する。
ps aux Get-Process テキストではなく、System.Diagnostics.Processオブジェクトを取得する。
grep Select-String 文字列検索だけでなく、オブジェクトのプロパティ検索も可能。
curl Invoke-WebRequest HTMLテキストではなく、解析済みのWebResponseオブジェクトを返す。
service nginx restart Restart-Service nginx ServiceControllerオブジェクトを操作する。

💡 ウィンドウズ先生のワンポイント
PowerShellの真価は「構造化データの扱い」にあります。
例えば、JSONデータを扱う際、Linuxでは jq コマンドが必要ですが、PowerShellなら標準機能でオブジェクトに変換できます。

# JSONファイルを読み込んでオブジェクトとして扱う
$data = Get-Content config.json | ConvertFrom-Json
Write-Host $data.Database.ConnectionString

このように、モダンなインフラ管理(JSON/XML/YAML)において、PowerShellはBashよりも遥かに親和性が高いのです。


第4章:脱・RDP。SSHでWindowsを管理する時代

「Windowsサーバーの管理=リモートデスクトップ(RDP)」だと思っていませんか?
画面転送は帯域を食いますし、コピペもしづらく、何より自動化できません。
プロはRDPを「緊急時の最終手段」として扱い、普段は以下の方法で管理します。

1. OpenSSH Server for Windows

Windows Server 2019以降、ついにOpenSSHがOS標準機能になりました。
Linuxエンジニアにとって、これほど嬉しいことはありません。
sshd_config を書き、authorized_keys に公開鍵を置けば、いつものターミナルからWindowsにSSHログインし、PowerShellを叩けるのです。

# Windows側でのインストール(PowerShell管理者権限)
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

2. Windows Admin Center (WAC)

ブラウザベースの次世代管理ツールです。
サーバー内の証明書管理、ファイアウォール設定、イベントログ確認などを、洗練されたWeb UIで行えます。
RDPを開かなくても、ブラウザ上でPowerShellコンソールも開けます。

3. WinRM (Windows Remote Management)

Ansibleなどの構成管理ツールが使用するプロトコルです。
LinuxからAnsibleでWindowsを操作する場合、裏側ではSSHではなく、このWinRM(HTTP/HTTPSベースのSOAP通信)が使われます。
Infrastructure as Code (IaC) を実現するには必須の知識です。


第5章:実践!Linuxエンジニアが感動するPowerShell技

最後に、「これは便利!」と唸るPowerShellの実践例を紹介します。

事例1:メモリを食っているプロセスTOP5をkillする

Linux (Bash):

ps aux --sort=-%mem | head -n 6 | grep -v PID | awk '{print $2}' | xargs kill

(列の位置を数えたり、ヘッダーを除外したり、面倒ですよね…)

PowerShell:

Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5 | Stop-Process

解説:
「プロセスを取得」→「メモリ使用量(WorkingSet)で降順ソート」→「最初の5つを選択」→「停止」。
直感的で、かつ安全です。

事例2:イベントログから特定のエラーを検索する

Windowsのログ(イベントビューア)はバイナリ形式なので grep できません。
しかしPowerShellなら簡単です。

Get-EventLog -LogName System -EntryType Error -Newest 10 | Format-Table TimeGenerated, Message -Wrap

「システムログ」から「エラー」のみを「最新10件」取得し、「発生時刻とメッセージ」を見やすく表示します。


まとめ:Windowsは「敵」ではない。最強の「味方」にせよ。

お疲れ様でした!
第1回は、Linuxエンジニアが抱くWindowsへの誤解を解き、モダンな管理手法を紹介しました。

今回の重要ポイント:

  • Windowsは「テキスト」ではなく「オブジェクトとAPI」で管理するOSである。
  • 本番環境では「Server Core」を採用し、RDPではなくSSHやWACで管理する。
  • PowerShellはBashの真似事ではない。構造化データを操る強力な自動化ツールである。
ウィンドウズ先生

どうですか、コウ君。
「Windows=マウスでポチポチ」という古い常識を捨てれば、Windows Serverは非常に論理的で管理しやすいOSに見えてきませんか?
Linuxの知識があるあなたなら、PowerShellのオブジェクト指向にもすぐに馴染めるはずです。
AnsibleでWindowsをコード管理する未来も見えてきましたね。

さて、OSの基礎と管理ツールの使い方が分かったところで、次回はWindows Serverの「存在意義」とも言える核心部分に入ります。
世界中の企業の9割以上が導入していると言われる認証基盤、「Active Directory(AD)」です。

次回、第2回は「Active Directory (AD) 構築。世界を支配する認証基盤の仕組み」です。
ドメインコントローラー、フォレスト、ツリー、OU……聞き慣れない用語を整理し、実際にドメイン環境を構築する手順を解説します。
LinuxエンジニアもLDAP連携などで避けては通れない知識です。お楽しみに!

▼ Windows Serverを触ってみよう ▼

Server Coreも選べる
「おすすめVPS」

おすすめVPSを見る

Linux×Windowsの二刀流へ
「ITエンジニア転職」

転職エージェントを見る

コメント