-
Notifications
You must be signed in to change notification settings - Fork 0
MS_ShellScriptMigration
- 戻る(シェル(スクリプティング)、各種、技術毎の移行性)
- シェル(スクリプト)の移行
安定して利用できる CMD も WSH も、移行時期に差し掛かった感はある。
補足(2026 年時点の状況): WSH は、既定で無効化する構成が増え、
新規に採用する理由はほぼ無くなっている。
CMD / BAT は削除されてはいないものの、
新規開発の対象からは外れており、本ページの言う「移行時期」は
すでに移行期の終盤にあると考えてよい。
以下が考えられる。
-
WSH を置き換える(同系列)。
-
しかし、CMD や BAT は置き換えない(別物、併用可)。
-
CMD と同じ様に、CLI を実行可能。
-
シェルの場合、
オブジェクトベースのシェルなので、- オブジェクトとしてパイプする。
- 標準出力をテキストとしてパイプできない。
-
スクリプティングの場合、
- BAT の制御構文とは異なる。
- 実行セキュリティポリシー機能がある。
-
移行メモ(正誤): 元ページの「同じ用に」は「同じ様に」の誤記と判断し、修正した。
補足(Windows PowerShell と PowerShell 7 は別物): 移行先を「PowerShell」と決める際は、
- Windows PowerShell 5.1(
powershell.exe)— Windows 同梱、機能追加は終了- PowerShell 7 系(
pwsh.exe)— .NET 上のクロスプラットフォーム版、別途インストールのどちらを指すのかを明確にする必要がある。
5.1 で書いたスクリプトが 7 でそのまま動くとは限らず、
Get-WmiObjectの削除、既定エンコーディングの UTF-8 化などの非互換がある
(→ サーバ更改(バージョン・アップ移行))。
WSL の登場などにより、サンプル数の多い Bash が有利となるケースも増えてきている。
(元ページ未記載)
補足(移行の進め方): CMD / WSH から PowerShell への移行は、
一括変換ツールが存在しないため、移行・コンバージョン方式で言う
ポーティング移行に相当する。実務上は、
- 外部コマンド呼び出し(
net、sc、regなど)を先に
対応する PowerShell コマンドレットへ置き換えるfor /fなどのテキスト解析を、オブジェクトのプロパティ参照へ置き換える- エラー処理を
%ERRORLEVEL%からtry/catchと$?へ寄せるの順に進めると、差分が追いやすい。
なお、PowerShell からはcmd /cで既存の BAT をそのまま呼べるので、
全面書き換えではなく、外側から段階的に置き換える方針も採れる。
(元ページ未記載)
補足: WSL 上の Bash から Windows 側の実行ファイルを直接呼べる
(相互運用)ため、Windows 固有の管理操作が残る場合でも移行先として成立する。
ただし、WSL は既定でインストールされていない点と、
パス表記(/mnt/c/...)・改行コード(LF)・パーミッションの扱いが
Windows 側と異なる点は、移行時の定番の躓きどころになる。
-
コマンド プロンプトは PowerShell に置き換えられます
https://support.microsoft.com/ja-jp/help/4027690/windows-powershell-is-replacing-command-prompt -
MS開発者がツイート「コマンドプロンプトじゃなくPowerShellを使ってね」 | マイナビニュース
https://news.mynavi.jp/article/20200528-1044875/ -
コマンドプロンプトからPowerShellに乗り換えるための小さな本 - Qiita
https://qiita.com/tadnakam/items/f51e03021b95eb39f34b
- 本 Wiki 内
Tags: Windows, 移行
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。