Skip to content

MS_ShellScriptMigration

nishi_74322014 edited this page Aug 31, 2026 · 1 revision

シェル(スクリプト)の移行

概要

安定して利用できる CMDWSH も、移行時期に差し掛かった感はある。

補足(2026 年時点の状況): WSH は、既定で無効化する構成が増え、
新規に採用する理由はほぼ無くなっている。
CMD / BAT は削除されてはいないものの、
新規開発の対象からは外れており、本ページの言う「移行時期」は
すでに移行期の終盤にあると考えてよい。

詳細

移行先

以下が考えられる。

PowerShell

  • WSH を置き換える(同系列)。

  • しかし、CMDBAT は置き換えない(別物、併用可)。

移行メモ(正誤): 元ページの「同じ用に」は「同じ様に」の誤記と判断し、修正した。

補足(Windows PowerShell と PowerShell 7 は別物): 移行先を「PowerShell」と決める際は、

  • Windows PowerShell 5.1powershell.exe)— Windows 同梱、機能追加は終了
  • PowerShell 7 系pwsh.exe)— .NET 上のクロスプラットフォーム版、別途インストール

のどちらを指すのかを明確にする必要がある。
5.1 で書いたスクリプトが 7 でそのまま動くとは限らず、
Get-WmiObject の削除、既定エンコーディングの UTF-8 化などの非互換がある
(→ サーバ更改(バージョン・アップ移行))。

Bash

WSL の登場などにより、サンプル数の多い Bash が有利となるケースも増えてきている。

移行方法

PowerShell

(元ページ未記載)

補足(移行の進め方): CMD / WSH から PowerShell への移行は、
一括変換ツールが存在しないため、移行・コンバージョン方式で言う
ポーティング移行に相当する。実務上は、

  1. 外部コマンド呼び出し(netscreg など)を先に
    対応する PowerShell コマンドレットへ置き換える
  2. for /f などのテキスト解析を、オブジェクトのプロパティ参照へ置き換える
  3. エラー処理を %ERRORLEVEL% から try / catch$? へ寄せる

の順に進めると、差分が追いやすい。
なお、PowerShell からは cmd /c で既存の BAT をそのまま呼べるので、
全面書き換えではなく、外側から段階的に置き換える方針も採れる。

Bash

(元ページ未記載)

補足: WSL 上の Bash から Windows 側の実行ファイルを直接呼べる
(相互運用)ため、Windows 固有の管理操作が残る場合でも移行先として成立する。
ただし、WSL は既定でインストールされていない点と、
パス表記(/mnt/c/...)・改行コード(LF)・パーミッションの扱いが
Windows 側と異なる点は、移行時の定番の躓きどころになる。

参考

PowerShell

Bash


Tags: Windows, 移行

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally