PowerShell 101:LinuxとMacでのコマンドラインの代替手段

Windows®におけるコマンドラインインタフェース(CLI)は、遠い昔のMS-DOS®から現在のPowerShell 101まで、時の流れに抗して存在しています。 基本的なPowerShellを見てみましょう。

私が大学に通っていた1980年代は、プロプライエタリなソフトウェアが君臨していました。 スケジュールを印刷していたUnix®搭載の古いドイツ製コンピューターは、「現代の」パーソナルコンピューターに取って代わられようとしていた。 当時、マイクロソフトのソフトハウスはMS-DOS®と連携していたので、フロッピーディスクのdir、cls、formatなどのコマンドを覚えました…。

10年ちょっと前、レッドモンドでは、CLIに磨きをかけ、近代化し、パワーアップさせることにしたのです。 Monad®として誕生し、PowerShell®と改名されたPowerShellの基本、PowerShell101を紹介します。

powershell 101 1

説明基本的なPowershell – ロゴ
(ウィキペディア https://commons.wikimedia.org/wiki/File:PowerShell_5.0_icon.png)

PowerShellの基本

Linuxオペレーティングシステムは好調で、Pandora FMSのブログにも多くの記事があります。 また、独自システムの監視においても、Windows®を最大指数として、常に存在感を示しています。 そして、新しいバージョンが出るたびに、私たちはそこでテストとチェックを行っています。

このLinuxの件があったから、マイクロソフトはLinuxに付いているGNUの機能に対抗して、新しいコンセプトと共にツールの集大成を作ろうと思ったのだと思います。 PowerShell Coreは2016年からオープンソフトウェア(MITライセンス)として存在していますが、Windows®独自のコンポーネントであることを考慮し、現在はUbuntu、CentOS(Pandora FMSの推奨OS)、macOS、さらにはARMなど別のハードウェアアーキテクチャでも利用できるようにしています。

LinuxでのPowerShell Coreのインストール

Ubuntuでは、パッケージマネージャsnapをインストールする必要があります。sudo apt install snapでミッションが達成されるでしょう。 次に、snap install powershell -classicを実行します。

powershell 101 2

説明:snap install powershell – classic

ファーストコマンドズ

pwshコマンド(Windows®ではpowershell.exe)で起動すると、ターミナルウィンドウが表示され、”PS “とディレクトリの位置が表示されます。 どちらの環境でも、様相は非常によく似ているので、今後は一般化していくことにします。

そして、その記憶を実践に移そう。

  • cls:画面を「クリア」し、新しいコマンドのサイクルを実行するためのスペースを残す。 全く必要ないのですが、黒板にチョークで書いては消して、別のテーマの説明を始めるのと似ていますね。
  • dir -ad:ディレクトリのみをリストアップします。
  • echo message: 画面に特定のテキストを表示したいとき。 これは一見何の役にも立たないように見えるが、スクリプトに組み込むと、あるタスクの進行状況や同じタスクの結果を示すのに非常に有用である。

古いMS-DOSのコマンドでこれ以上遅らせることはない。 21世紀になっても、このような古い技術を使い続け、その過程でテキスト文字列(STDIN、STDOUT)と通信・対話するような古いプログラムを使い続ける必要があるだろう。

PowerShellの基本的なコマンドレット101

21世紀はすべてがより複雑になり、彼らは長年の経験を蓄積しているのです。 PowerShell 101は、Linuxで使っているような単純なツールではありません。 このツールにはコマンドレットがあり、cmdletと略称される。 つまり、今回テストしたコマンドは、実際には私たちが考えていたようなコマンドではなく、デフォルトのコマンドレットのエイリアスであり、これによって後方互換性が保たれているのです。 さて、まだまだあります。 デートの報酬に使われるコマンドデートのケースを分析してみよう。

本名はGet-Dateで、現在の日付と時刻を返す形式はエイリアスのそれとは若干異なるが、基本的にはどちらも同じことをする。 監視タスクでは、その値を非常に特殊な形式で提供する必要があります。このとき、コマンドレットはまったく異なる方法で仕事をします。

powershell 101 3

説明”日付と時間の変数を持つコマンドレットを使った作業”

コマンドレット Get-Date を使用すると、次のことができます。

  • パソコンの日付を表示する。
  • カスタムフォーマットで表示する。
  • メソッドを使う。この場合、2019年5月20日(1年のうち140日目)という日付が何番目の日なのかを可視化する。
  • カスタムフォーマットで日付変数を保存する。
  • この変数をテキスト文字列に変換し、ファイルに保存する。
  • パイプを使用して、あるコマンドレットと別のコマンドレットを通信していることに注意してください。 受け取ったディスクへの書き込みに使用したコマンドレットは、Add-Contentという名前です。 (Linuxを覚えていないのですか?)。
  • 読み込みに対応するのはGet-Contentで、そのエイリアスは…と呼ばれます。「Linuxでテキストファイルの内容を一覧表示するのに使われているのと同じです。

一呼吸おいて、これを確認してから次のポイントに進みます。

コマンドレットを使った作業

これらをベースに、基本的なPowershellを道具として考えるのをやめ、ツールボックスとして呼び起こすことができるようになります。 そのために、Get-Commandコマンドを使用します。

パラメータなしで使用すると、私たちがコンピュータにインストールしている多くのツールが戻ってきます。

特定のコマンドについて問い合わせる場合、例えばGet-Command Get-Dateは、コマンドの種類、名前、バージョン、ソース(所属するライブラリ)に関する情報を返す。 Get-Date については Microsoft.PowerShell.Utility に属するコマンドレットであることを示し、Clear-Host (clear screen, cls) については単に関数であることを示します。 エイリアスを入力すると、元のコマンドレットまたは関数が返されます。

名前を正確に覚えていない場合は、ワイルドカードを使用します。例えば、Get-Command *date*と入力すると、その文字列を含むすべてのコマンドのリストが表示されます。

基本的なPowershellのヘルプ

ヘルプは、Get-Helpコマンドでコンテンツをパソコンにダウンロードすることもできるので、リポジトリとしても考えていました。

  • Get-Help Get-Date: Get-Dateの使用方法、構文、エイリアスなどに関する完全な情報を表示します。
  • Get-Help Get-Date -Online: ウェブブラウザのインスタンスを開き、Get-Dateコマンドに関する最新のオンライン情報を表示します。
    オフラインで作業する場合、つまり更新されたヘルプを保存する場合。ヘルプを更新します。

Get-Helpを使って、Get-LocationとSet-Locationというコマンドを学びましょう。

例えば、フォルダやファイルを作成する場合、mdやmkdir(Linuxでは後者も全く同じ書き方です)ではなく、New-Itemコマンドを使うことにしましょう。

New-Item “path/name” -type directory

新規項目コマンド。

ディレクトリの “path/name”;引用符を挟む場合は必須。

パラメータ -type で、プロバイダとしてインストールしたものを指定します。ファイル、ディレクトリ、シンボリックリンク、ジャンクション、ハードリンクのいずれか。

必要なプロバイダをダウンロードしたり、独自のプロバイダを作成してコマンドに関連付けたりすることができます。 FTPクライアントとして動作するプログラムを開発し、それをプロバイダとして提供することで、誰でもPowerShellに統合できるように販売できる……と、想像は膨らみますが、待てよ、まだある。 これを順番にやっていけば、(ライセンスが許せば)クライアントが自分のプロジェクトにFTPプログラムをライブラリとして追加することができます。 いかがでしょうか?

注:PowerShellはAPI経由でも動作可能であり、セキュリティアナリストでさえ、Python言語と混合した独自のPowerShell環境を構築しています。

Pandora FMSと監視業務

Pandora FMS の柔軟性により、PowerShell を使って複雑なコマンドに素早くアクセスすることができます。 例えば、Windows環境では、どのパッチがインストールされているかを把握する必要があります。

Get-CimInstance -ClassName Win32_QuickFixEngineering -ComputerName

Get-Member コマンドでコンポーネントを可視化し、中身を抽出して、Pandora FMS for PowerShell で補完することができます!

Pandora FMSが提供できることをもっと知りたいと思いませんか? こちらでご確認ください。

もし、100台以上のデバイスを監視している場合は、以下のフォームから Pandora FMS チームにご連絡ください。

また、モニタリングのニーズがより限定的であれば、オープンソース版の Pandora FMS を自由に利用できることも覚えておいてください。 詳しくはこちらをご覧ください。

Shares