-
Notifications
You must be signed in to change notification settings - Fork 0
MS_Scripting
nishi_74322014 edited this page Aug 12, 2026
·
2 revisions
- 戻る(シェル)
- スクリプティング
- BAT
- VBScript
- PowerShell
- Python on Windows(
MS_PythonOnWindows.md)
シェル言語やスクリプト言語、ココでは、
-
BAT(
.batファイル) -
VBScript(
.vbsファイル) -
PowerShell(
.ps1ファイル) - その他、関連ツール
を使用してバッチ処理を作成する的な作業のトピック情報を纏めています。
| bat | vbs | PowerShell | |
|---|---|---|---|
| 特徴 | 環境変数やパスの扱いが簡単。外部コマンドの呼び出しが簡単。 | VB や Excel の VBA に類似した言語。COM の呼び出しが簡単。 | .NET との親和性。C# で cmdlet 開発も可能。System.Windows.Forms のクラスで GUI も作成可能。 |
| 向き | 少数のコマンドを連続実行。 | COM を多用した処理。テキストファイルの処理。 | パイプラインを利用した高度なオブジェクト処理。 |
| 不向き | エラー処理が複雑。引数が多い(10 個を超える)。 | バイナリファイルの処理。暗号 / 認証情報などのテキスト以外の取り扱い。Declare 文がない、Dim に As 型 がない。 |
WMI や COM(.NET でないオブジェクト)を多用する場合。バージョンが過渡期、旧 OS には PowerShell 本体のインストールが必要。 |
| 使いどころ | 少数のコマンドを連続処理。vbs や PowerShell を呼び出すドライバとして。 | 旧環境との互換性や共通性を望む場合。 | 呼び出すコマンドが PowerShell の cmdlet。新規 OS 環境。 |
| 特殊文字の注意 | データに「%」が多数含まれる場合に注意(変数として解釈される)。データに「"」が含まれる場合、文字列の区切りが壊れ、if 文や for 文で予定外のエラーになる。 |
データに「$」が含まれる場合、変数として解釈される。「,」を書くと配列になり、引数で「+」を使用すると文字連結にならない。「'」と「"」は意味が異なる。 |
|
| エラーの扱い |
%ERRORLEVEL% で都度判定。 |
On Error Resume Next と Err.Clear して Err.Number で追って判定。 |
既定は、エラーメッセージを赤文字で表示して、続行。エラー処理する場合、各コマンドに都度 -EA を指定するか、try/catch と $ErrorActionPreference = "stop"。 |
移行メモ: 元ページの bat の特徴に「外部コマンドの飛び出しが簡単」
とあったが、文意から「呼び出し」と解釈して改めた。
補足(最新化:現在の選び方): 上表は 2010 年代前半の状況を反映している。
現在は次のように整理できる。
用途 推奨 Windows の運用自動化 PowerShell(一択に近い) クロスプラットフォーム PowerShell 7(旧 PowerShell Core)または Python 既存資産の保守 bat / vbs(新規作成はしない) CI / コンテナ内 bash / PowerShell VBScript は非推奨化が進行中である
(VBScriptを参照)。新規に選ぶ理由はない。また「PowerShell は旧 OS に本体のインストールが必要」という制約は、
Windows 7 以降に標準搭載されて以降ほぼ解消している。
現在の論点はむしろ Windows PowerShell 5.1 と PowerShell 7 の使い分け
(両者は共存インストールできる)。
- vb / vba と vbs の違い
- vbs から PowerShell へ移行のヒント
- VBScript のスクリプトを Windows PowerShell のスクリプトに変換する方法
補足(移行の勘所): vbs → PowerShell の移行で
最も考え方が変わるのは「パイプラインを流れるのが文字列ではなくオブジェクト」
という点である。' VBScript: COM を叩いて文字列を組み立てる Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder("C:\temp") For Each file In f.Files WScript.Echo file.Name & vbTab & file.Size Next# PowerShell: オブジェクトのまま絞り込み・整形する Get-ChildItem C:\temp -File | Where-Object Length -gt 1MB | Select-Object Name, Length | Sort-Object Length -Descending文字列を切り貼りする発想のまま移すと、
PowerShell の利点がほぼ失われる。
- BAT / CMD
- VBScript
- PowerShell
- Python on Windows(
MS_PythonOnWindows.md)
Tags: 移行, シェル, インフラストラクチャ, Windows
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。