AppleScript 救急隊

The ForeSight Inc. AppleScript救急隊 ASQsについて Download (サンプル&デモ)


ビジネスで有効活用を目指す

われらがAppleScript救急隊


MacPower誌




Vol.7 Mac OS8でのFinder スクリプティング(2)

前回から、Mac OS 8のFinderに新しく搭載された機能を使ったプログラミングについて紹介している。今回は、前回触れなかった「ファイル共有」および「利用者&グループ」コントロールパネルの操作を自動化するスクリプティングについて紹介しよう。


ファイル共有のスクリプティングを強化

Mac OS 8以前のFinderにも、ファイル共有のオン/オフをスクリプティングするための命令は用意されていたが、新Finderではこの部分がさらに強力になった。「ファイル共有」コントロールパネルがスクリプタブルになり、ファイル共有命令のスクリプティング機能追加[*1]も用意された。これにより、今まで以上に共有に関するさまざまな情報の取得と制御が可能になった。それぞれに重なる機能も多いので、軽く説明しておこう。
コントロールパネルとスクリプティング機能追加の違いを、にまとめた。どちらも同じような操作ができるが、接続しているユーザーの切断や共有中のアイテムの情報(shared item)を取得するためには、コントロールパネル経由で制御する必要がある。ただし、毎回コントロールパネルを開くことになるため、ロスが気になる人や画面がうっとうしいと感じる人は、スクリプティング機能追加で操作するほうがいいだろう。

「ファイル共有」コントロールパネル

接続しているユーザーを特定した切断

共有されている項目の状態表示

共有設定で設定されている情報の取得と変更(現在の共有の状態、所有者やコンピューターの名前、接続しているユーザーの情報など)

ファイル共有命令スクリプティング機能追加

ファイル共有の状態の取得

ファイル共有の状態変更。起動と停止

共有設定の設定内容の取得と変更

表 「ファイル共有」コントロールパネルとスクリプティング機能追加の違い


TOPへ

ファイル共有のオン/オフをスクリプトからコントロール

ファイル共有を実際にコントロールするようなスクリプトを、当面使う必要がない人でも、共有のオン/オフのスクリプトは覚えておくと便利だろう。ファイルやフォルダーを大量に操作するスクリプトを動かすときに、ファイル共有がオンになっているかオフになっているかでパフォーマンスにかなり影響がでる(グラフ)。


グラフ ファイル共有のオン/オフ、それぞれの状態について「オリジナルのファイルを複製したあとファイル名を変更する作業を500回繰り返す」という単純なスクリプトを作り、処理にかかる時間を比較した。
テスト環境はPower Mac 7300/180、MacOS 8英語版+JLK 1.2だ。バーが短いほど高速
ファイル共有がオンになっていると、オフのときにくらべて1.7倍もスクリプトの処理に時間がかかってしまうことがわかる。必要がなければ、ファイル共有は切ってしまうほうが、スクリプトの処理パフォーマンスは上がる。
もちろん、そのマシンに誰かが接続するのを待っている必要があるなら、スクリプトの冒頭でファイル共有をオフにして、最後に再びファイル共有をオンにするという方法もある。

if (file sharing) is false then
try
set file sharing to true
on error
display dialog "ファイル共有で、エラーが発生しました"
end try
repeat while sharing starting up
-- 共有が完了するまで待つ
end repeat
end if

ファイル共有のオン/オフの命令を出して、共有状態になったかどうかを監視する必要があるときは、上記のようなrepeat文で状態を監視できる。ただし、スクリプトからこの監視を行っていると、ファイル共有の起動にかかる時間が長くなってしまうようだ。

接続ユーザーの一覧を取得する

 コントロールパネルを使う場合は、次のようなスクリプトで現在接続しているユーザーの一覧を取得できる。

tell application "ファイル共有"
get every connected user
end tell

connected userは、接続しているユーザーを指すクラスである。このクラスはnameやidというプロパティーを持つが、バグのせいでいきなりnameやidのリストを取ることはできないようだ。つまり、

tell application "ファイル共有"
get name of every connected user
end tell


というスクリプトを書いても、正しい結果は返ってこない(ちなみに実行すると、""という値が返ってきてしまう)。nameやidのリストが必要なときは、いったんconnected userのリストを取得してから、nameやidのリストを自分で作成することになる。この手のバグは、ファイル共有に限らず、後述する「利用者&グループ」コントロールパネルにもある。上記のスクリプトを正しく動かすには、

set UserName to {}
tell application "ファイル共有"
set ConUsers to every connected user
repeat with aUser in ConUsers
set end of UserName to name of aUser
end repeat
end tell
get UserName

となる。現在接続しているユーザーの情報を取得できたら、特定のユーザーだけを自動切断することができる。ちなみに全ユーザーの接続を切断するスクリプトは、下記のようになる。

tell application "ファイル共有"
disconnect every connected user
end tell

例えば、接続名にロケーション情報が含まれていれば、特定のロケーションからの接続だけ切断するということもできる。スクリプトは以下のとおり。

tell application "ファイル共有"
set ConUsers to every connected user
repeat with aUser in ConUsers
if (name of aUser) contains "総務部" then
disconnect aUser
end if
end repeat
end tell
get UserName

の設定ができる。


「利用者&グループ」コントロールパネルもスクリプト対応に


図1 「利用者&グループ」コントロールパネル。AppleTalkネットワークに接続する際の利用者のアクセス権を設定する

「利用者&グループ」コントロールパネル(図1)もスクリプタブルになった。これにより、ユーザーやグループの登録/変更/削除bといったことがAppleScriptから簡単にできるようになった。
 ただ、ユーザーがどのグループに属しているか、グループに属しているユーザーは誰かといった情報の取得や設定ができないのは残念。グループを設定しても、そのグループにユーザーを所属させることはできない。そこで、今回は大量のユーザーリストの中から、特定のユーザーをグループに所属させるのに便利なサポートスクリプトを作ってみよう。SampleScripts Vol.7に納められている、
「Make User List」「Change User Name」「Restore User Name」の3本を参照してほしい。
「Make User List」は、現在登録されているユーザー名のリストを取得するスクリプト。「Change User Name」は、ルールファイルに出てくるユーザーを「USER-125」のように、「USER-」+(ID番号)という名前に変更するスクリプトだ。もし「USER-」で始まるユーザーがすでに存在するようであれば、ぶつからないような文字列を使うスクリプトに変更するほうがいいだろう。実行すると「どのユーザーをどういう名前に変更したか」のログファイルを残す。これであらかじめリストアップしたユーザーがコントロールパネル上でひとかたまりになったので、まとめてグループに登録してしまえばよい。
グループへの登録が完了したら、スクリプト「Restore User Name」を起動する。「Change User Name」で作成したログファイルがどこにあるか聞いてくるので、このファイルを指定する。変更したユーザー名をすべて元に戻してくれるというわけだ。もちろん、グループ情報の中の登録ユーザー名も元に戻っている(図2)。


図2 グループ設定サポートスクリプトの処理の流れ



スクリプティングの将来は明るい

2回にわたってMac OS 8でのAppleScriptの新しい機能を紹介した。AppleScriptは今まで以上に重要な要素となっており、コントロールできる部分もどんどん多くなってきている。まだバグも残っているようだが、米アップル社のAppleScriptチームは把握しているようだ。みなさんもいろいろ試してみて、実際の業務に役立てていただきたい。


[*1]
スクリプティング機能追加

AppleScriptで使える命令を拡張するためのファイル。
「機能拡張」フォルダー内の「スクリプティング機能追加」フォルダーにある。


TOP

AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp

主催 株式会社フォーサイト   後援 アップルコンピュータ株式会社

(c)1996-2010 The ForeSight Inc. All rights reserved.
Appleは、米国アップルコンピュータ社の登録商標です。
AppleScriptは、米国アップルコンピュータ社の商標です。
その他記載の会社名・製品名・ソフトウェア名は一般にその会社の登録商標または商標です。