PowerShellとdosコマンド(コマンドプロンプト)の違い
- 評価
- クリップ 0
- VIEW 3,472
バッチを作成する際の、PowerShell(以下PS)とdos(以下dos)の違いについてご教示頂きたいです。
私は、PSを用いてのバッチ作成は経験したことはありますが、
dosを用いてのバッチ作成はほぼ未経験です。(dirくらいしか思い浮かびません笑)
したがって、2つにどのような違いがあるのか、理解できておりません。
私の基礎的な認識
- PS = dos + vb
- dosはPSでほぼ使える(使えないコマンドってあるのでしょうか?)
- PSでは、環境に対応するポリシーに変更してからでないと実行できない。(batファイルなどから、ポリシー変更させて実行)
- PSでは、DBにアクセス・操作できる。
- PSでは、Excelを操作できる。
- PSでは、csvやtxtファイルを扱える(書き込み、取得)
- PSでは、csvを表として扱い、レコードの抽出等ができる。
- PSでは、IE上の画面を操作できる。(入力、ボタン押下)
- PSでは、アラートを出すことができる。
- PSでは、プログレスバーを表示させることができる。
- PSでは、ファイルの操作ができる(移動、コピー、削除、リネーム、実行)
- PSでは、フォルダの操作ができる(移動、コピー、削除、リネーム)
- PSでは、読み取り専用の解除ができる。
- PSでは、アセンブリの読み込みができる。
- PSでは、エンコーディングができる。
- PSでは、変数、メソッドを定義でき、if文やfor文などの処理も可能。
- PSでは、Try-Catch処理が可能。
- PSでは、実行環境のホスト名を取得可能。
- PSでは、サーバへのサクセスが可能。
ざっと思いつく限りは、上記の通りなのですが、
①上記PowerShellでできる処理は、dosだとどこまでできるのか。(4はできない、11はできるなど)
②他にPSとdosの主立った違いはあるか。(dosではできないがPSだとできる、dosで書くよりPSで書いた方が速い(行数だったり処理速度だったり)など)
③dosでも実行可能な処理の場合、PSを用いる利点はあるか(dosじゃだめなのか)
④逆に、PSよりコマンドプロンプトで書いた方が良い場合はありますか?
ブレインストーミング的な内容で恐縮ですが、
部分的な回答でも全く問題ないので、ご回答頂けると幸いです。
追記
皆さま、ご回答ありがとうございます。
ご回答・および調査から、個人的な見解としては、
「コマンドプロンプトでもPowerShellでできるほとんどのことできそう・・・?DBからデータ取得したりinsertしたり。。。」と
「PowerShellの利点は、オブジェクトを扱える点と、.NET Frameworkとやらを使える点なのかな」といったぼんやりとした認識ですが、
.NET Frameworkが使えると何ができるようになるのか、いまいちピンときてません。
.NET Frameworkの主だった機能は何で、(共通言語ランタイムはどこのサイトでも書かれてましたが)
PowerShellにおいて、.NET Frameworkが使えるようになるとできるようになることとはなんでしょうか?
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+2
どちらも他のプログラムを呼び出すことができ、その組み合わせで仕事をします。
そして互いに互いを呼び出すことができるので、できないことはもう片方を呼び出してやらせることができます。
しかし、私がこの二つの最も大きな違いと認識しているのは、パイプラインです。
呼び出したコマンドはそれ単体で仕事をするのではなく、標準入出力をつなぎ合わせてパイプラインを形作ります。
これにより、小さなコマンドの組み合わせでデータの複雑な加工が容易にできます。
コマンドプロンプトの場合、パイプラインを流れるのはテキストです。
これは Linux でよく使われているシェルと同じですね。
teratail で「シェル芸ならね」を検索すると、パイプラインを巧みに使ってほんの一行で様々なコマンドを組み合わせて複雑な処理をしている人を発見できます。
PowerShell の場合は、パイプラインを流れるのは単なるテキストではなく、メソッドとプロパティを持ったオブジェクトです。
これはとても画期的なことです。
コマンドを組み合わせて呼び出すのがグルー言語の役目ですが、PowerShell を使うとその組み合わせの世界が大きく広がります。
より多くの情報を受け渡しすることで、各コマンドはより柔軟にそれを扱うことができます。
これにより、コマンドプロンプトしか無かった時には、他の言語を使ってコマンドを作らなければ実現できなかったことが、PowerShell では既存のコマンドの組み合わせでできるようになりました。
例えばソートにしても、コマンドプロンプトのために用意された sort.exe は、渡されたテキストを文字コード順に並び替えるものなのに対し、PowerShell のソートは日付やファイルサイズなど、そのオブジェクトの持つプロパティによって並び替えます。
ファイルの一覧を取得し、曜日でグループ化し、それぞれのグループをファイルサイズで降順に並び替えるようなことが一行でできます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
+1
コマンドプロンプトからpowershell使えるので
そう意味ではpowershellで出来てコマンドプロンプトにできないことは基本的にないと思います。
普通に答えるならばpowershellならコマンドプロンプトでは使えなかった NET Frameworkが
使えたりコンソールの出力で色指定ができる等でしょうか
PSを用いる利点は 優れたコマンドレットが多数あり、さらに簡単にFunctionやClassが作成出来たり、
コマンドプロンプトよりも人の言語に近いので扱いやすいことなどでしょうか
でも私が一番の利点だと思っていることは コマンドプロンプトよりもpowershellの方が後から出てきたものでありこれから作成するスクリプトの寿命がpowershellの方が長くなりそうなことでしょうか...
--追記--
コマンドプロンプトの方がいいのは まだwin10の回復オプションにあるのがコマンドプロンプトなので
普段から使っていれば いざというときにこまらない
powershellでもコマンドプロンプトの記述が普通に使えるので
コマンドプロンプトが消えたとしてもpowershellをコマンドプロンプトの時と同様に使えば
当分困らない
っといったところでしょうか?
--追記--
大きく違うところ追加で
powershellはオブジェクト指向なとこですかね
正直 違うところを探すよりもおんなじ所を探したほうが早いと思います。
同じとこ以外は全部違うということで
--追記--
pepperleaf様の回答を見て少し考えなおしたのですが、一言に"違い"と言ってもその言葉が本質的に何を指しているかによって大きく変わってくると私は思います。
例えばですがコマンドプロンプトで特定のプロセスを停止出来るかと問われれば 少し触れる人であれば出来る というと思います。
その方法を問えば大抵はTaskListやTaskKillを使う方法を答えると思います。
ですが、TaskListの正体はTaskList.exe TaskKillの正体はTaskKill.exeです。
コマンドプロンプト...言い方を変えればcmd.exeではないのです。
でもそんなことを言ったらコマンドプロンプトで出来ることがかなり減ってしまうと思うのですが.....
話を戻しますがあなたの言う"違い"とは何を指して言っているのでしょうか。
見た目でしょうか、利便性でしょうか、それぞれのexe単体で実現可能な内容でしょうか、それともあらゆる手段を使用した場合での実現可能な内容でしょうか
違いは 具体的にやりたいことが決まった時にそれを基準に考えたほうがいいと思うのですが
どうでしょうか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
私の基礎的な認識
こちらの認識はちょっと不正確と思います。
DOS(コマンドプロンプト?) から、PowerShellを呼び出す事ができ、またその逆も出来ます。従って、相互に呼び出す事で、互いのできる事は全てできますが、それは違いでも何でもありません。
また、Excelを操作できるとかありますが、.Netの機能を呼び出す事ができる事であってPowerShellだからという事ではありません。(ちなみにExcelは入っていないと使えないが)
どちらもシェルスクリプト(Unix的言い方では)です。
上手い説明ないかと思ったら、過去にも同様の質問がありました。
コマンドプロンプトとWindows PowerShellの違いについて
こちらを見て頂くのが早いかと。
まあ、ざっくりと言って、コマンドプロンプト(DOS)が MS-DOS時代の コマンドライン入力とそのバッチ処理(実質、シーケンシャル処理) に対し、Linux(Unix)等を意識し、より便利に使えるようにしたものが、PowerShellと思っています。.NETが素で呼べるのが便利な気もしますが、賛否ありそうな感じ。(環境依存) その一方、バッチファイル(DOSコマンド)のシンプルさが無くなって、ちょっと使うには面倒になった気もします。
Googleで、 powershell command prompt 違い(一部、Google補完あり)で検索したら、色々と解説が見つかりました。参考にされるのも良いかと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
//Windows 7 以降、PowerShell はプレインストールされてるので
//今更 dosコマンドを使う意味合いは薄いような気もしますが…
まず、いろんな意味で双方は別物ですから、違うのは当然ですね。
古い車とスーパーカーを比較しいてるようなものですから、
似たような使い方はできても「だからなに?」って感じでしょう。
dosコマンドで出来ることは限られますから、まずは自分で
調べてみられてはいかがでしょうか。時間もかからないでしょう。
そういう意味で PowerShell は学習コストが高いですから
(強いて言えば)そういう違いもあるってことで。
//例えば、古い環境で動いていた .bat を PowerShell に移行したい
//などという場合なら違いを調べる動機にはなるのかなあ。
//ただ、以前使えていた dosコマンドが現在の環境では提供されていない
//もしくはオプションが変わっている、ということはありそうなので、
//すんなりいかないこともあるかもしれませんねえ。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.20%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる