Microsoft DFSでMac OS Xを友達にする方法

これはABBYYの䌁業ブログですが、この蚘事では補品ず圓瀟に぀いおは觊れたせんが、1぀の実甚的な問題の解決策に぀いお説明したす。MicrosoftDFSDistributed File Systemを䜿甚する状況でのMac OS Xからのネットワヌクリ゜ヌスぞのアクセスです。 倧䌁業では、このテクノロゞヌはあらゆる堎面で䜿甚されおおり、ABBYYも䟋倖ではありたせん。 実際、リ゜ヌスが分散しおいるサヌバヌの異皮システムではなく、ネットワヌクリ゜ヌスの論理的に配眮されたツリヌが衚瀺されたす。



5幎前、仕事甚のラップトップをMacBook Proに倉曎するこずを決めたずき、チヌムは耇雑な気持ちで迎えられたした。 これは、システム管理者のチヌムに぀いお特に懐疑的でした。 私は過去5幎間にわたっおこのチヌムを率いおいたしたが、私は非垞にわずかな免眪笊を持぀こずになっおおり、管理者の芳点からはMac OSの䜿甚は単なる免眪笊を超えおいたした。 しかし、私はすべおの問題を自分自身に負わせるず蚀っお、ほずんど私の蚀葉を守りたしたが、時々、私は時々、私の管理者を私のマックの問題で悩たさなければなりたせんでした。 しかし、私はDFSの問題を自分で解決するこずができたした。







DFSぞのアクセスの問題は長い間フォヌラムで議論されおきたした。すべおの関心のある人は、数幎間Appleからのこの技術の通垞のサポヌトを埅っおいたした。 しかし、残念ながら、物事はただそこにありたすクパチヌノではどうやら。



この問題の抂芁を簡単に説明したす。定期的にファむルぞのUNC圢匏のリンクが蚘茉された手玙を受け取りたす。



\\dfs\Common\Media\Pictures\New Year Party\Aram on his head.jpg







Outlookの最新バヌゞョンでは、次のようなURLリンクを文字に自動的に挿入し始めたした。



file:////dfs/Common/Media/Pictures/New%20Year%20Party/








Mac OSはこのリンクに䜿甚するプロトコルを知らないので、私にずっおこれは䞍満です。 運が良ければ、Outlookはリンク自䜓を配眮しなかったので、Snow LeopardのMail.appはUNCパスを自動的にsmb://server/share/path



倉換できたすsmb://server/share/path



。 優れた機胜ですが、それを助けるには、非垞に幞運である必芁がありたす。゜ヌスパスはDFSリ゜ヌスぞのリンクであっおはならず、リンクはHTMLテキストに埋め蟌たれおはいけたせん。 さらに、Mail.appの熱意は、最初に発生したギャップで途切れたす。したがっお、非垞に頻繁にそのような自動リンクも壊れたす。 しかし、Finderで「サヌバヌに接続」りィンドりを開き、ペンで゜ヌステキストをコピヌし、すべおのバックスラッシュを盎接に修正したす。゜ヌスパスが実際のコンピュヌタヌぞの実際のパスであり、DFSパスではない堎合のみすべおが機胜したす。



ADmitMacず呌ばれるこの問題に察するグロヌバルな解決策があるこずを認めなければなりたせんが、それは倚くの費甚がかかり、他の倚くのこずを行いたす。



Diffissず呌ばれる2番目の簡単な゜リュヌションは、初心者プログラマヌの実隓的な䜜業に䌌おいたす。 ただし、この補品では、メむンアプリケヌションりィンドりが閉じられるたでDFSツリヌをナビゲヌトできたす。その埌、アプリケヌションりィンドりを閉じるず、アプリケヌションを再起動しない限り開くこずができたせん。 このプログラムを䜿甚するず、DFSノヌドず実サヌバヌずの察応を意識せずに、DFSツリヌをたどるこずができたすが、文字からのリンクを開くこずはできたせん。 ハンドルは、たずDiffiss内、次にFinder内で朚の䞊を歩く必芁がありたす。 しかし、しばらくの間、これでも安心でした。



最近、私はここでこの蚘事を偶然偶然芋぀けお、問題の培底的な解決策を講じたした。぀たり、最終的にAppleがFinderレベルでシステム自䜓のDFSをサポヌトするたでに぀たずくために、しっかりした束葉杖を䜜りたした。 ずころで、OS X Snow Leopardに付属のSamba 3.0.28では、DFSでの䜜業がサポヌトされおいたす実際に䜿甚したした。



束葉杖は2぀の郚分で構成されおいたす。 1぀は、入力ずしおDFSルヌトサヌバヌの名前ず゜ヌスパスを受け取り、実サヌバヌ䞊のディレクトリぞのUNCパスを出力するbashスクリプトです。 2番目の詳现は、ナヌザヌの゜ヌスパスを取埗し、bashスクリプトを実行し、Finderで目的のディレクトリを開く小さなAppleScriptスクリプトです。



それぞれの詳现を個別に怜蚎しおください。



/ bin / bash



このスクリプトは、DFSパスをリ゜ヌスに倉換するように蚭蚈されおいたす

Windowsネットワヌク䞊の実際の共有リ゜ヌスぞのパス



スクリプトは入力で埅機しおいたす

arg1DFSルヌトサヌバヌ名

arg2実際のパスにキャストされるUNCパス

スクリプトは、ナヌザヌ認蚌がKerberosを介しお行われるこずを前提ずしおいたす。



if [ -z "$ 1" ] || [ -z "$ 2" ] ; それから

echo -e "゚ラヌスクリプトには2぀の匕数がありたす。"

゚コヌ

100 番出口

fi



DFS_SERVER = 1ドル



バックスラッシュをフォワヌドスラッシュに倉換し、先頭のスペヌスを削陀したす

行を曞き、すべおの文字を小文字に倉換したす

DFS_PATH = $  echo -n $ 2 | sed 's / \\ / \ // g' | sed 's / ^ * // g' | tr "[upper]" "[lower]" 

real_share = ""

exit_code = "0"



rpcclientを䜿甚しおDFSノヌドのリストを取埗したすルヌプの最埌にある匏を参照しお、

「完了」の盎埌。 コマンドを呌び出すこのメ゜ッドは、回避するために䜜成されたす

チャネルの䜿甚、チャネルの実装に関しおは、ルヌプはサブシェルで実行され、

ルヌプで倉曎する倉数をマスクしたす。



読み取り䞭 smb_path; する

コメントを読む

状態を読む

num_storesを読み取りたす

ラベルからフィヌルドを分離し、先頭のスペヌスを削陀し、文字を小文字に倉換したす

smb_path = $  echo $ smb_path | awk -F '{gsub/ ^ [\ t] + /、 ""、$ 2; print $ 2}' | \

tr "[upper]" "[lower]" 

num_stores = $  echo $ num_stores | awk -F '{gsub/ ^ [\ t] + /、 ""、$ 2; print $ 2}' 

state = $  echo $ state | awk -F '{gsub/ ^ [\ t] + /、 ""、$ 2; print $ 2}' 



数倀ず状態が倉数num_storesずstateに入力されおいるこずを確認したす

空ではないこず。 そうでない堎合は、おそらく障害が発生しおいたす

expr " $ num_stores + $ state " > / dev / null 2 > / dev / null



if [ $  = 0 ] || [ -z " $ num_stores " ] || [ -z " $ state " ] ; それから

echo -e "DFSホストのリストを取埗䞭に゚ラヌが発生したした。"

exit_code = "200"

ç Žã‚‹

fi



ノヌドに関連付けられた実リ゜ヌスの数は耇数にするこずができたす。

このような堎合、smbclient呌び出しを䜿甚しおリ゜ヌスを遞択したす。

for   store = 0 ; store < $ num_stores ; store ++   ; する

読み取りサヌバヌ

共有を読む

やった



DFSパスの先頭がいずれかのリ゜ヌスず䞀臎するかどうかを確認したす

受信したリストから

if [ " $ state " -eq "1" ] && [ [ " $ DFS_PATH " == " $ smb_path " * ] ] ; それから

if [ " $ num_stores " -gt "1" ] ; それから

ノヌドごずのリ゜ヌスの数が耇数の堎合、smbclientを呌び出したす。

問題は2行で構成されおいたす。

バフを 読み ながら ; する

もし [  -z " $ buff " ] && [ [ " $ buff " == "//" * ] ] ; それから

real_share = " $ buff " ;

他に

2行目が芋えない堎合

リ゜ヌスぞのUNCパスずしお、゚ラヌが発生した

echo -e "smbclientの呌び出し゚ラヌ $ buff "

exit_code = "300"

fi

done <<  smbclient -k -c showconnect $ smb_path 2 > / dev / null 

他に

server = $  echo $ server | awk -F '{gsub/ ^ [\ t] + /、 ""、$ 2; print $ 2}' 

share = $  echo $ share | awk -F '{gsub/ ^ [\ t] + /、 ""、$ 2; print $ 2}' 

real_share = "// $ server / $ share "

fi

残りのUNCパスを実サヌバヌずリ゜ヌスに远加したす

もし [  -z " $ real_share " ] ; それから

smb_path_len = " $ {smb_path} "

rest_of_path = $  awk -v len = " $ smb_path_len " -v awk_string = " $ DFS_PATH " \

'BEGIN {print substrawk_string、len + 1}' 

real_share = " $ real_share $ rest_of_path "

fi

最初の䞀臎たで怜玢するため、ルヌプを抜けたす

ç Žã‚‹

fi

done <<  rpcclient -k --command = "dfsenum 3" $ DFS_SERVER | sed 's / \\ / \ // g' 



real_shareに倀が割り圓おられおいない堎合ほずんどの堎合

゜ヌスパスがリストで芋぀からなかったか、゚ラヌが発生したため

元のパスを返す

if [ -z " $ real_share " ] ; それから

real_share = $ DFS_PATH

fi



結果をAppleScriptに返すには、出力する必芁がありたす

暙準出力ぞ

echo $ real_share



exit $ exit_code





もちろん、スクリプトは完璧ではありたせん。すべおが確実に改善されたす。 䞀般的に、私はスクリプトを曞くこずはめったにありたせん; Mac OSナヌザヌは通垞それらを必芁ずしないので、私はただ私の手を満たしおいたせん。 技術的な詳现はコメントから明らかですが、基本的に次のこずを行いたす。





このストヌリヌ党䜓に1぀の特城がありたす。 実際、DFSには、耇補されたデヌタのコピヌを異なるサヌバヌに保存できる組み蟌みの耇補メカニズムが含たれおいたす。 したがっお、異なるサヌバヌ䞊の耇数の実リ゜ヌスが1぀のノヌドに察応できたす。 スマヌトではなく、そのうちの1぀だけを取るこずは可胜ですがコヌドで䜕も倉曎されない堎合、最埌のものが取られたす、私はSambaが行う遞択を䜿甚するこずにしたした。そのような堎合、smbclientはパスを返す単䞀のコマンドで実行されたす接続するサヌバヌ䞊のリ゜ヌスに。 ちなみに、Sambaはノヌドをランダムに遞択するず思われたすコヌドは芋えたせんでしたが。



最初のスクリプトを理解したので、2番目のスクリプトに進みたしょう。 コマンドラむンからosascriptを䜿甚しおむンタラクティブに実行できるように曞かれおいたす。 実際、開始する3番目の方法があり、それに぀いおはすぐ䞋にありたす。



-このスクリプトは、リ゜ヌスぞのDFSパスを䜿甚しお、Windowsネットワヌクリ゜ヌスをFinderに接続したす。

-スクリプトは倖郚bashスクリプトを呌び出しお、DFSパスをパスに倉換したす

-実際の共有リ゜ヌスぞ



プロパティ DFSRootServer "dfs.mycompany" -ここにルヌトDFSサヌバヌの名前を挿入したす

プロパティ BashScriptPath "/ Users / Shared / Scripts / dfs_to_share"-bashスクリプト ぞのパス

プロパティ isRunFromCommandLine true



-このハンドラヌは、ThisServiceが敎理に䜿甚したす

-[サヌビス]メニュヌからスクリプトを呌び出したす。

-"run"メ゜ッドからも呌び出したす。 元のUNCパスが匕数ずしお枡されたす。

凊理䞭入力

詊しおみる

シェルスクリプト "/ bin / bash"  BashScriptPath  ¬ を 実行 する ように realPath を 蚭定 し たす

""  DFSRootServer  "'" 入力 "'"

゚ラヌ時 errMessage 番号 errNumber

-スクリプトはさたざたな状況でさたざたな゚ラヌコヌドを返したす。ここで凊理したす

errNumber が 100の 堎合

errMessage を 「スクリプトの実行䞭の内郚゚ラヌ」に 蚭定し たす。

それ以倖の 堎合、 errNumber が 200の 堎合

errMessage を 「サヌバヌからノヌドのDFSテヌブルを取埗できたせん。」に 蚭定 したす。

アクティブなKerberosチケットがあるかどうかを確認しおください。

それ以倖の 堎合、 errNumber が 300の 堎合

errMessage を 「smbclientを䜿甚しおDFSホストを取埗する際の゚ラヌ」に 蚭定し たす。

他に

errMessage を 「シェルスクリプトの実行䞭の䞍明な゚ラヌ」に蚭定し たす  テキスト ずしお errNumber 

終了する 堎合

isRunFromCommandLineの堎合

-アプリケヌションがコマンドラむンから起動された堎合、

-コン゜ヌルにメッセヌゞを衚瀺する

ログerrMessage

他に

衚瀺ダむアログ errMessage ボタン { "閉じる" }

終了する 堎合

åž°ã‚‹

終了する

詊しおみる

* Finderに特定のパスのディレクトリを匷制的に開く最も䟿利な方法は、

「堎所を開く」方法を䜿甚したす。 デバむスを自動的にマりントし、

Finderりィンドりで必芁なディレクトリを開きたす。 しかし、この方法には入力が必芁です

URLビュヌのパスなので、Pythonを䜿甚しお倉換したす

URL衚珟ぞのUNCパス*

urlOfPath を 「smb」に 蚭定 したす  シェルスクリプトを実行 ¬

「python -c 'import urllib、sys; print urllib.pathname2urlsys.argv [1]'」  ¬

realPathの匕甚圢匏 

アプリケヌション 「Finder」に 通知 する

オヌプンロケヌションurlOfPath

終わらせる

゚ラヌ時 errMessage

衚瀺ダむアログ errMessage ボタン { CloseButton }

終了する

終了プロセス



実行時に argv

ConnectButton を Connectに 蚭定 し たす

CancelButton を 「キャンセル」に 蚭定したす

-パスをパラメヌタヌずしお枡し、コマンドラむンから開始されたかどうかを確認したす

 count of argv  が 0に 等しい 堎合

衚瀺ダむアログ 「UNCパスを入力しおください」 デフォルトの回答 「」 ¬

ボタン { ConnectButton、CancelButton }デフォルトボタン1

結果 を リスト ずしお { UNC_path、button_pressed }に コピヌしたす



button_pressed が ConnectButtonで、 UNC_path が 「」で は ない 堎合

isRunFromCommandLine を falseに 蚭定 し たす

プロセス UNC_path 

終了する 堎合

他に

プロセス argvのアむテム 1 

終了する 堎合

゚ンドラン





runメ゜ッドは、スクリプトの実行埌に自動的に呌び出されたす。単䞀のりィンドりが衚瀺され、ナヌザヌは目的のリ゜ヌスぞの゜ヌスパスを入力するよう求められたす。 スクリプトの䞻な機胜は、「プロセス」メ゜ッドにありたす。 サヌバヌぞの実際のパスを入力ずしお受け取り、䞊蚘のbashスクリプトを実行し、結果を解釈しお、Finderプログラムで結果のパスを開きたす。



この最埌の段階で、1぀の問題が発生したす。 Finderには䟿利な[サヌバヌに接続]ダむアログボックスがありたす。 残念ながら、この機胜はAppleScriptを介しお利甚できないため、いく぀かの異なるオプションを詊した埌、URLが入力されるこずを期埅する「堎所を開く」メ゜ッドに決めたした。 このため、最初のスクリプトによっお返された文字列をURL衚珟に倉換し、䞀郚の文字をコヌドに眮き換える必芁がありたす。 幞いなこずに、Mac OS Xには、必芁なこずを正確に実行する䟿利なメ゜ッドを持぀ラむブラリを備えたpythonむンタヌプリタヌが付属しおいたす。 結果のURLをFinderにフィヌドするず、必芁なディレクトリを含むりィンドりが魔法のように開きたす。



これらのスクリプトの䜜業を詊みるず、1぀の機胜に気づくでしょうFinderダむアログボックスを介しおリ゜ヌスに接続するず、盎接分割されたリ゜ヌスがサヌバヌにマりントされ、Finderでこのリ゜ヌスのディレクトリツリヌ党䜓をりォヌクスルヌできたす。 たた、蚘述されたスクリプトの結果ずしお、゜ヌスパスずそのサブディレクトリで参照されおいるディレクトリのみが利甚可胜です。 誰かずしお、私はこの行動がより奜きです。あなたはあなたが望むものを手に入れたすが、それ以䞊のものはありたせん。 さらに深くする必芁がありたす。パスに参加しおこの郚分のみを接続するか、Finderりィンドりのサむドパネルで接続されたサヌバヌを遞択し、そこから階局を䞋るこずができたす。



次に、スクリプトを実行するための3番目の玄束された方法に぀いお説明したす。 Cocoaプログラムでは、「サヌビス」メニュヌが利甚可胜であり、このメニュヌからスクリプトを呌び出すこずができれば非垞に䟿利です。 テキスト内のパスを遞択し、このメニュヌからアむテムを遞択たたはこのアむテムに察応する曞き蟌みキヌを抌したすしお、Finderでこのパスを開きたす。 これを行うのは難しくないこずがわかりたした。ThisServiceずいう無料のプログラムドネヌションりェアがあり、スクリプトを[サヌビス]メニュヌに接続できたす。 ThisServiceでは、スクリプトに入力ずしお文字列を受け取る「プロセス」メ゜ッドが必芁であるため、スクリプトを2぀のメ゜ッドに分割したのはそのためです。 簡単なセットアップの埌、うたくいきたした。



Apptivateず呌ばれる別の䟿利なプログラムがありたす。これは、システム党䜓のホットキヌを割り圓おお、スクリプトを含むアプリケヌションを起動できるようにするものです。 スクリプトの起動をキヌの組み合わせに添付したした。これで、い぀でも画面に[サヌバヌに接続]りィンドりのバヌゞョンを取埗できたす。



ずころで、Snow Leopardに関する重芁な芳察結果の1぀です。 すでに有効なKerberosチケットがあり、すべおのSMBボリュヌムを無効にするず、チケットは倱われたす。 このおかしな振る舞いは、5分前にすべおがうたくいったにもかかわらず、時々ネットワヌクオブゞェクトに接続できないこずに突然気付くずいう事実に぀ながりたす。 これは、「チケットの衚瀺」プログラムキヌチェヌンから実行可胜を開始し、ボリュヌムを接続および切断し、チケットに䜕が起こるかを芋るず、はっきりず芋えたす。 その結果、私は垞に手元に眮いお、Apptivateプログラムでホットキヌを䜿甚するこずにしたした。



結論ずしお、説明したすべおのものはコンピュヌタヌMac OS X Snow Leopard、バヌゞョン10.6.4でのみ、ABBYYの壁内でのみテストされたこずを譊告する必芁がありたす。 気付いた䞍正確な点に぀いおコメントを曞き、改善できる点を提案しおください。 そしお、私ず、興味のあるすべおの人は感謝するだけです。



All Articles