Skip to content

MS_Scripting

nishi_74322014 edited this page Aug 12, 2026 · 2 revisions

スクリプティング

概要

シェル言語やスクリプト言語、ココでは、

  • BAT.bat ファイル)
  • VBScript.vbs ファイル)
  • PowerShell.ps1 ファイル)
  • その他、関連ツール

を使用してバッチ処理を作成する的な作業のトピック情報を纏めています。

詳細

特徴と使い分け

bat vbs PowerShell
特徴 環境変数やパスの扱いが簡単。外部コマンドの呼び出しが簡単。 VB や Excel の VBA に類似した言語。COM の呼び出しが簡単。 .NET との親和性。C# で cmdlet 開発も可能。System.Windows.Forms のクラスで GUI も作成可能。
向き 少数のコマンドを連続実行。 COM を多用した処理。テキストファイルの処理。 パイプラインを利用した高度なオブジェクト処理。
不向き エラー処理が複雑。引数が多い(10 個を超える)。 バイナリファイルの処理。暗号 / 認証情報などのテキスト以外の取り扱い。Declare 文がない、DimAs 型 がない。 WMI や COM(.NET でないオブジェクト)を多用する場合。バージョンが過渡期、旧 OS には PowerShell 本体のインストールが必要。
使いどころ 少数のコマンドを連続処理。vbs や PowerShell を呼び出すドライバとして。 旧環境との互換性や共通性を望む場合。 呼び出すコマンドが PowerShell の cmdlet。新規 OS 環境。
特殊文字の注意 データに「%」が多数含まれる場合に注意(変数として解釈される)。データに「"」が含まれる場合、文字列の区切りが壊れ、if 文や for 文で予定外のエラーになる。 データに「$」が含まれる場合、変数として解釈される。「,」を書くと配列になり、引数で「+」を使用すると文字連結にならない。「'」と「"」は意味が異なる。
エラーの扱い %ERRORLEVEL% で都度判定。 On Error Resume NextErr.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 の使い分け
(両者は共存インストールできる)。

移行のヒント

補足(移行の勘所): 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 の利点がほぼ失われる。

参考

言語

規格


Tags: 移行, シェル, インフラストラクチャ, Windows

NetDevInfraWiki

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

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally