このページの本文へ

前へ 1 2 次へ

Apple Geeks 第184回

オープンソース化された「PowerShell」をMacで使う

2016年08月26日 10時00分更新

文● 海上忍(@u_shinobu)、編集●ハイサイ比嘉

  • この記事をはてなブックマークに追加
  • 本文印刷

OS XでPowerShellを使うということ

 Windowsではシステム管理を含む"高度な"処理が可能なPowerShellだが、OS Xではどうなのか。Macではどのように利用されるのか、実用性の観点からその機能を見てみよう。

 対話的に処理を進めるCUIツール(シェル)としての役割だが、デフォルトで大量のエイリアスが定義されていることもあり、さほど苦労しないはず。bashのようにTABキーを使ったファイルやコマンドレットの入力補完も効くため、冗長な文字列を呻吟しながらタイプする必要はない。なお、外部コマンドをシームレスに利用できるWindows版同様、OS X版も/bin/usr/binにある(UNIX由来の)コマンドを実行できる。

 接頭辞が「Get」で始まるコマンドレットは、システムや対象オブジェクトから情報を取得する機能を備える。カレントディレクトリのフルパスを取得する「Get-Location」を実行すると、POSIXの流儀で「/Users/shinobu/Desktop」などと返してくれるし、日付を取得する「Get-Date」は「2016年8月23日火曜日 17:04:09」のようにローカライズを行なう。実行中のプロセスを取得する「Get-Process」も、OS Xに付属のpsコマンドとは書式が異なるものの、PIDやプロセス名を表示してくれた。なお、「Get-Command」を実行すれば実行可能なコマンドレットを一覧できる。

 UNIXシェルにないPowerShellの利点のひとつが、メソッドを利用できることだ。前述した「Get-Date」でいえば「(Get-Date).AddDays(-1)」とすると1日前の値を返してくれるし、「(Get-Date).AddMonths(-1) 」とすれば1ヵ月前だ。確かに、このような機能を使うスクリプトが多数あれば、他のプラットフォームで使いたくなる気持ちもわかる。

Get-Dateコマンドレットでメソッドを指定すれば、1日前や1ヵ月前の日付を取得することも容易だ

 「Import-Csv」もPowerShellらしいコマンドレットといえる。UNIX系OSにも、awkなどCSVをハンドリングできるコマンドはいくつか存在するが、このImport-Csvは一見してわかりやすい。「Import-Csv ○○○.csv」と実行するとCSVファイルを読み込めることはともかくとして、「Import-Csv SPEC.csv | Where-Object {$_.項目 -eq "OS"}」などとしてWhere-Objectコマンドレットにパイプすれば、条件にあう行を抽出することなど朝飯前だ。

CSVファイルをハンドリングするためのコマンドレットが用意されている

 一方、WindowsでPowerShellの利用価値を高める要素となっているWMI(Windows Management Instrumentation)に関連したコマンドレットは、OS X版では利用できない。スクリプトの実行セキュリティポリシーや、システムを終了する「Stop-Computer」や再起動する「Restart-Computer」といった管理者権限が必要な機能は、基本的に実装されていないと考えていいだろう。OS Xには存在しないレジストリに関する機能も同様だ。

WindowsとOS Xはセキュリティ機構がまったく異なるため、PowerShellの実行ポリシーは変更できなかった

Microsoftの新時代に向けた取り組み

 Windowsで作成したPowerShellスクリプトは、システムに依存する部分は動作しない可能性大だが、それでもif文やswitch文、論理演算など言語体系としてはほぼそのまま移植されている。.NET Frameworkが提供するクラスも利用でき、変数や型も.NETのものだ。根っからのOS Xユーザーには興味の薄い領分かもしれないが、Windowsで培ったノウハウを生かせるという意味だけでなく、Microsoftの新時代に向けた取り組みとして評価したい。


前へ 1 2 次へ

カテゴリートップへ

この連載の記事

ASCII.jp RSS2.0 配信中