1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コマンドプロンプトとPowerShellの違いとは?

1
Posted at

はじめに

Windowsでコマンドを実行するとき、

  • コマンドプロンプト
  • PowerShell

の2つが存在します。

昔からWindowsを使っている方であればコマンドプロンプトに馴染みがある一方、近年ではPowerShellが標準的に利用されるようになっています。

本記事では、

  • Windowsコマンド環境の歴史
  • コマンドプロンプトとPowerShellの違い
  • PowerShell ISEとPowerShell (x86)
  • それぞれの使いどころ

について整理します。

Windowsコマンド環境の歴史

まずは歴史的な流れを見てみましょう。

MS-DOS

Windowsが普及する前は、MS-DOSというCUI(Character User Interface)のOSが利用されていました。

この頃はキーボードからコマンドを入力して操作するのが一般的でした。

コマンドプロンプト

Windows NT系OSの登場により、MS-DOSの後継としてコマンドプロンプトが登場しました。

現在でもWindowsに標準搭載されていて、

  • バッチファイル(.bat)
  • コマンドファイル(.cmd)

の実行環境として利用されています。

PowerShell

2006年にWindows PowerShellが登場しました。

コマンドプロンプトとは異なり、オブジェクト指向を採用し、.NETを基盤としてシステム管理や自動化を行うために設計されています。

現在ではWindowsだけでなく、

  • Linux
  • macOS

でも利用できます。

その後、PowerShell Coreとしてオープンソース化され、現在は単に「PowerShell」と呼ばれています。

PowerShell Coreからクロスプラットフォームに対応し、PowerShell 7ではその流れを引き継いでいます。

コマンドプロンプトとPowerShellの違い

項目 コマンドプロンプト PowerShell
実行ファイル cmd.exe powershell.exe / pwsh.exe
扱うデータ 文字列 オブジェクト
スクリプト .bat、.cmd .ps1
対応OS Windows Windows、Linux、macOS
.NET利用 ×
JSON操作 ×
REST API ×

最も大きな違いは、

コマンドプロンプトは文字列を扱い、
PowerShellはオブジェクトを扱う

という点です。

コマンドプロンプト

メリット

  • 軽量で起動が速い
    dir copy delなどの簡単な操作はコマンドプロンプトで十分です。
     
  • DOSコマンドとの互換性
    古い管理ツールや業務システムとの互換性があります。

デメリット

  • 文字列しか扱えない
    例えば、tasklistの結果は単なる文字列です。
    特定のプロセスだけ取得したい場合は、tasklist | findstr chromeのように文字列検索を行う必要があります。
     
  • 自動化には限界がある
    JSONやXMLを扱ったり、REST APIを呼び出したりするには工夫が必要です。
    複雑な管理処理を書くには向いていません。

PowerShell

メリット

  • オブジェクトを扱える
    PowerShellではGet-Processを実行すると、各プロセスは単なる文字列ではなく、Name Id CPU WorkingSetなどのプロパティを持ったオブジェクトとして取得されます。
    例えばCPU使用時間が100秒を超えるプロセスだけ取得するには、Get-Process | Where-Object CPU -gt 100のように簡単に記述できます。
     

  • .NETライブラリが利用できる
    PowerShellは.NET上で動作しています。
    そのため、[System.IO.File]::Exists("sample.txt")のように.NETのクラスライブラリを直接利用できます。
     

  • JSON・CSV・XMLを簡単に扱える
    JSONならGet-Content sample.json | ConvertFrom-Json
    CSVならImport-Csv Export-Csv
    XMLなら[xml]$xml = Get-Content sample.xml
    といったコマンドレットが用意されています。
     

  • REST APIを簡単に呼び出せる
    Invoke-RestMethodを利用するだけでREST APIを呼び出せます。
    Webサービスとの連携が非常に簡単です。
     

  • Windows管理との相性が良い
    PowerShellでは

    • Active Directory
    • Microsoft 365
    • Azure
    • Exchange
    • SharePoint

    などの管理も行えます。
    Microsoft製品の管理では事実上の標準となっています。

デメリット

  • 学習コストがやや高い
    オブジェクトやパイプラインなど、コマンドプロンプトとは考え方が異なります。
     
  • バッチファイルとは文法が異なる
    if文やfor文などもPowerShell独自の書き方になります。
    そのため、cmd経験者でも最初は戸惑うことがあります。

PowerShell ISEとPowerShell (x86)

PowerShell ISEとは

PowerShell ISE(Integrated Scripting Environment)は、PowerShell専用の統合開発環境です。

主な機能は次のとおりです。

  • スクリプト編集
  • 構文の色分け
  • コード補完
  • デバッグ
  • ブレークポイント

PowerShellスクリプトを開発しやすい環境として長年利用されてきました。

現在は新機能の追加は終了しており、MicrosoftはVisual Studio Code + PowerShell拡張機能の利用を推奨しています。

PowerShell (x86)とは

  • Windows PowerShell
  • Windows PowerShell (x86)

の2つがあります。
これは32bit版と64bit版の違いです。

通常版(64bit)

64bit DLLや64bit COMコンポーネントへアクセスできます。

通常はこちらを利用します。

x86版(32bit)

古い32bitアプリケーションやCOMコンポーネントとの互換性を保つための環境です。

  • 古いActiveX
  • 32bit Office
  • 古いCOMライブラリ

などを利用する場合に必要になります。

現在では利用する機会はかなり少なくなっています。

それぞれの使いどころ

新規開発でコマンドプロンプト用のバッチファイルを新たに作成するケースは少なくなっており、自動化や運用スクリプトを書くのであればPowerShellを選択するのが一般的です。

  • 既存バッチの保守
  • 古い業務システム
  • 簡単なファイル操作

であればコマンドプロンプトでも十分です。

おわりに

コマンドプロンプトは長年Windowsを支えてきたコマンド環境であり、現在でも多くの既存システムで利用されています。

一方、PowerShellはオブジェクト指向や.NETとの連携を取り入れた高機能なシェルであり、
Microsoftが継続的に機能改善を行っているプラットフォームです。

既存のバッチファイルを無理にPowerShellへ移行する必要はありませんが、新しくスクリプトを書くのであればPowerShellを選ぶことをおすすめします。

また、PowerShellを学ぶ際はPowerShell ISEではなく、Visual Studio CodeとPowerShell拡張機能を利用すると、今後も長く活用できる開発環境を構築できます。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?