Contents

Windows 上の Bash に勝つ 5 つの PowerShell トリック

<本文>/images/windows-powershell-vs-powershell.jpg

Bash は、多くの開発者、特に主に Linux で作業する開発者にとって、間違いなく頼りになるシェルです。強力で柔軟性があり、何年にもわたって厳密にテストされています。ただし、Windows では、最新の機能、使いやすさ、OS との緊密な統合により、PowerShell の人気が高まっています。

明確にしておきますが、あらゆる状況において PowerShell が Bash よりも優れていると言っているわけではありませんが、PowerShell は Windows 向けに特別に設計されているため、Bash に限らず他のシェルよりも Windows OS の言語をよりよく理解できると言っても過言ではありません。

私はこれらのシェルを両方ともかなり長い間使用してきましたが、Windows システムの管理と自動化に関しては常に Bash よりも優れたパフォーマンスを発揮する PowerShell のトリックをいくつか見つけました。

プレーンテキストの代わりにオブジェクトを操作する

PowerShell の最大のスーパーパワー

Bash と PowerShell の主な違いの 1 つは、出力の処理方法です。 Bash では、すべてのコマンドの出力は単なるテキストです。役立つ情報を抽出したい場合は、通常、grep、awk、cut などのツールを使用して出力を解析する必要があります。これは、パターンと文字列操作を記憶することを意味します。もちろん、それは実行可能ですが、すぐに乱雑になり、保守が困難になる可能性があります。

PowerShell は、Bash とは異なり、すべてをテキストではなくオブジェクトとして扱います。つまり、Get-Process などのコマンドを実行すると、文字列を解析せずにさらに並べ替え、フィルタリング、書式設定できる構造化データが得られます。

たとえば、次のコマンドを見てください。 Where-オブジェクト CPU-gt 100 |オブジェクト名、CPU の選択

PowerShell でこのコマンドを実行すると、100 を超える CPU ユニットを使用しているシステム上のプロセスが、その名前と使用状況とともに一覧表示されます。基本的には、CPU 使用率の高いプロセスをすばやく見つけるためです。コマンドを個別に実行すると、データはパイプライン全体で構造化されたままになります。これは、複雑なタスクをスクリプト化する必要がある場合に大きな利点です。 Bash はネイティブではこれを行うことができません。

Windows エコシステム全体へのアクセス

レジストリの調整からシステム管理まで

/images/reading-windows-startup-registry-entry-using-powershell.jpg

前に述べたように、PowerShell は Windows OS のネイティブ言語を最も効果的に話します。これは、レジストリ、タスク スケジューラ、WMI (Windows Management Instrumentation)、実行中のプロセス、サービスなどのシステム レベルのコンポーネントにアクセスできることを意味します。 Bash には、Windows 上のこれらの機能へのアクセス機能が組み込まれていません。

たとえば、システムの起動時にどのアプリが実行されるかを確認したいとします。 PowerShell では、次のコマンドを実行するだけでそれを知ることができます: Get-ItemProperty-Path “HKCU:\Software\Microsoft\Windows\CurrentVersion\Run” このコマンドを通じてレジストリに直接クエリを実行しています。さらに、同じ簡単さでレジストリ キーを無効化、削除、または変更するスクリプトを作成できます。それだけでなく、次のような簡単なコマンドを使用して、Windows 上で実行されているサービスを開始または停止することもできます。 Start-Service-Name wuauserv

このような統合は、個別の GUI ツールやカスタム C# スクリプトの必要性を排除するため、システム管理者にとって非常に価値があります。

コマンドレットとモジュールを使用したタスクの自動化

Windows 用に構築された再利用可能なコマンド

/images/installing-module-to-manage-windows-updates-from-powershell.jpg

PowerShell が Bash を圧倒するもう 1 つの分野、そして PowerShell について私が気に入っている点の 1 つは、コマンドレットの使用です。これらは、Get-Process、Start-Service、Remove-Item など、簡単に理解できる動詞と名詞のパターンに従う、専用の小さなコマンドです。これらは説明的であり、その目的が容易に予測できます。

Bash では、ツールごとにまったく異なる構文を覚える必要があります。さらに、PowerShell は、さらに多くの機能を追加するモジュールの広範なエコシステムもサポートしています。たとえば、コマンド ライン経由で Wi​​ndows Update を管理したい場合は、PSWindowsUpdate モジュールをインストールするだけです。

インストール後、次のコマンドを使用して最新の Windows Update をインストールします: Install-WindowsUpdate-AcceptAll-AutoReboot

これにより、設定を開かなくても Windows が更新されます。 Windows 更新プログラムとは別に、Active Directory、Microsoft 365、Azure、さらには AWS を管理するためのモジュールなど、追加の便利なモジュールがあります。 Bash にも同様の機能がありますが、PowerShell の方が Windows エコシステムとよりよく統合されています。

スマート コマンドによるファイルとフォルダーの管理

ファイル処理を簡単に行う方法

/images/using-a-powershell-command-to-find-files-larger-than-100mb-in-a-folder.jpg

見てみると、Bash と PowerShell はどちらもファイルを非常にうまく処理します。ただし、Windows では、PowerShell のアプローチはより一貫性があり、柔軟です。 Windows OS では、単純な PowerShell コマンドを使用してファイルを管理する方が簡単だと思います。

たとえば、フォルダー内のすべての PDF ファイルをバックアップ フォルダーにコピーするには、PDF ファイルが存在するフォルダーで PowerShell を起動し、次のコマンドを使用します: *.pdf C:\Backup

同様に、特定のフォルダー内の 100MB を超えるファイルをすべて検索するには、PowerShell を起動してそのフォルダー内で次のコマンドを使用します。 Where-オブジェクト {$_.Length-gt 100MB}

PowerShell の動詞-名詞構文のおかげで、これらのコマンドはすべて同じ構造に従います。 Bash では、ファイルを適切に管理するためにさまざまなツールとフラグが必要になります。

リモート化と自動化が簡単に

複数のシステム間で問題なく作業できる

/images/enabling-psremoting-on-powershell.jpg

PowerShell の非常に過小評価されている強みは、リモート処理のサポートです。 PowerShell Remoting (PSRemoting) を使用すると、WinRM (Windows リモート管理) 経由でリモート マシン上でコマンドを実行できます。システムに組み込まれているため、サードパーティの SSH サーバーは必要ありません。

たとえば、5 台の PC でサービスを再起動するとします。 Bash では、SSH アクセス、共有キー、ループが必要です。 PowerShell では、次のコマンドを使用するだけです: Invoke-Command-ComputerName PC1、PC2、PC3、PC4、PC5-ScriptBlock { Restart-Service spooler }

簡潔で、スケーラブルで、安全です。資格情報を渡したり、スクリプトをリモートで実行したり、スケジュールされたジョブを使用したりできます。これは、複数のマシンを管理する必要があるエンタープライズ環境や IT 環境で非常に役立ちます。すべてのマシンに単一のコントロール パネルがあるようなものですが、スクリプトを介してコマンド ラインで使用します。

PowerShell は、より優れたスクリプト作成と使いやすさを提供します。

すでに述べたように、Bash が、特に Linux マシンにとってどれほど素晴らしいものであるかについては、疑いの余地がありません。ただし、主に Windows で作業している場合は、PowerShell に切り替えると、他のシェルよりも OS をより適切に制御できるようになります。 Bash よりもはるかに多くの機能とツールを提供します。

Linux では依然として Bash が主な選択肢かもしれませんが、Windows では PowerShell が明らかに勝者です。

*️⃣ 出典リンク:

PowerShell、CPU 使用率が高い、システム起動時に実行されるアプリ、PowerShell への切り替え、