1. ホーム
  2. スクリプト・コラム
  3. パワーシェル

CMDとWin powershellの違い

2022-01-08 05:56:49

CMDとpowershellはどちらもコマンドラインでの対話が可能で、バッチとpowershellスクリプトは機能的に同等である。

cmdをどう理解しているかはわかりませんが、以下はpowershellは.netがベースになっているので、.netの知識があれば何でもできるということです。

Windows PowerShell は、システム管理者向けに設計された新しい Windows コマンドラインシェルです。Windows PowerShell には、対話型プロンプトとスクリプト環境があり、これらは単独または組み合わせて使用することが可能です。

Windows PowerShell は、テキストを受け取って返す多くのシェルとは異なり、.NET Framework Common Language Runtime (CLR) と .NET Framework 上に構築されており、.NET Framework オブジェクトを受け入れて返します。この環境の根本的な変化は、Windowsを管理・設定するための新しいツールや方法をもたらします。

Windows PowerShellは、シェルに組み込まれたシンプルな単機能コマンドラインツールであるcmdlet(発音:コマンドレット)の概念を導入しています。Windows PowerShellには100以上の基本的なコアコマンドレットが含まれており、独自のコマンドレットを作成し、他のユーザーと共有することができます。

多くのシェルと同様に、Windows PowerShellは、コンピュータ上のファイルシステムへのアクセスを提供します。さらに、レジストリやデジタル署名付き証明書ストアなどの他のデータストアも、Windows PowerShellプロバイダを使用して、ファイルシステムと同様に簡単にアクセスすることができます。

簡単に言うと、Powershellはcmdのスーパーセットであり、cmdができることはすべてPowershellでもできるが、cmdができない多くの仕事をPowershellが追加でできる。

主に、システム管理機能、スクリプト言語、オンラインヘルプがより強力になっており、本当にcmdと同じように使うこともできますし、より深く学んで使うことも可能です

powershellの利点

できないことはない、考えるだけ。PowerShellを使えば、C/C++で書かれたDLLを読み込んで、中のコードを実行することもできますし、COMは言うに及ばず。PowerShellとcmdの最大の違い、そして他の*nix Shellとの最大の違いは、PowerShellのパイプが生の文字列ではなく.netオブジェクトを渡すことで、PowerShellのすべてが調和して共存できるため、魔法の扉を開くことができることだと私は思います。送ってくるデータが合法かどうか、送ってくるパラメータが正しい形式かどうか、推測する必要はありません。私たちは皆、豊富なメタデータを持つCLRを共有し、.netの世界を自由に歩き回り、探索することができるのです。ちなみに、Windowsのapt-getであるhttps://chocolatey.org/、PowerShellがベースになっています。

PowerShellが強力な理由

マイクロソフトは、非常に"ロープロファイル"会社、"少しソフトダウン"の意味を感じるようにMicrosoftという名前の、これは冗談です。Windowsオペレーティングシステムとオフィスソフトウェアは、非常に良い、マイクロソフトもそれをPowerOSとPowerOfficeに名前を付ける勇気なかったが、モナード(パワーシェルの前身)のリリース後2年間(2006)で、Microsoftは直接Windows PowerShell 1.0、及びquot;恥ずかしながら&quotというリリース このは少し控え目な表現です。

今日は、PowerShellがなぜ強力なのか、私の実体験をもとに少しまとめてみます。

<強い かつてない利便性

ストレージの計算におけるGB、MB、KB単位、配列宣言における1〜nと-1までの添え字の扱い、WYSIWYGで理解しやすい動詞と名詞の構成Cmdletなどです。

オブジェクト指向

オブジェクト指向は、プロセス指向よりも便利で実世界を記述しやすく、時代にキャッチアップしていると言えるでしょう。

.NETツリーとの連携

PowerShell は、.NET Framework プラットフォームの強力なクラスライブラリを使用することで、ほとんどすべてのことを可能にします。

強力な互換性

実行ファイル(exe)、バッチ bat、vb script など、Windows プラットフォーム上の他の呼び出しと完全な互換性があります。

プラットフォームベースの拡張性

マイクロソフトはアプリケーションというよりプラットフォームであることが強みですが、PowerShellも長い間プラットフォームであり、PowerShellがリリースされた翌年にはMicrosoft System Center Operations ManagerやSharePointがプラットフォームのコンポーネントを提供し、その後Office 365はもちろん、Active DirectoryやHyper-V、Windows Azureも提供されました。PowerShellは標準、仕様になっているのです。

使用例
PowerShellを初めて知った、ちょっと見てみたいという方のために、10の例をご紹介します。

[数学の計算] (39+79-51)*497/28 = ?
計算が速くできても、Enterキーを押すほどの速度はないはずです。

PS> (39+79-51)*497/28
1189.25


何日後とカウントするのは良いとして、何分後になったらどうするんだ?

$now=Get-Date
$day=[datetime]'2-14'
if($now -lt $day ){
$day.Subtract($now).TotalMinutes
}
else{
$day.AddYears(1).Subtract($now).TotalMinutes
}

[容量】 3GB > 3145726KB ?

PS> 3gb -gt 3145726kb
True


ID]はGUIDを生成できますか?

PS> [guid]::NewGuid()

Guid
----
0f283ab4-f402-400c-98ce-359442f11f1a

[ファイル】Windowsディレクトリにある実行可能なexeファイルのサイズはいくつですか?

dir $env:windir -Filter *.exe | measure -Sum Length

[Registry] レジストリパスHKEY_LOCAL_MACHINEの下にある'Enable64Bit'の値は何ですか。

(Get-ItemProperty -Path hklm:SOFTWARE\Microsoft\.NETFramework ).Enable64Bit

フィンガープリント [28DE15612AFF1CD69596AB17AF06AE86CB9C003B] の証明書 [certificate] は、証明書ストアにありますか?

ls Cert:\LocalMachine\My\ |
where { $_.Thumbprint -eq '28DE15612AFF1CD69596AB17AF06AE86CB9C003B' }

サービス]プリンターサービスは開始されましたか?

Get-Service spooler

[プロセス] 現在稼働しているIEのプロセスはいくつですか?

(Get-Process iexplore ).count


[Report] 実行中のすべてのプロセス情報を HTML レポートにエクスポートしますか?

Get-Process | ConvertTo-Html | Out-File a.html

powershellがどれだけ強力か分かっていただけたと思いますが、やはりWindowsプラットフォームではpowershellを使ったほうがいいでしょう。