質問者
リファレンスとかマニュアルはどこかにありますでしょうか

質問
-
こんにちは。yakkennと申します。
PowerShellを最近使うようにしているのですが、やりたいことが付属のマニュアルやクイックリファレンスに乗っていればいいのですが、思うように探せないか、全く該当するものがないことがあります。MSDNにはPowerShell自体のクラスライブラリの説明がありますが、そのようなものではなく、言語リファレンスのような感じのものがないかと思っております。少し前もバイト配列の記述方法がわからず、かなりネットを探しました。
みなさんはどこで情報を仕入れてますでしょうか。公式サイトにある外部リンク(PowerShell Memo等)については既に知っており、よくお世話になっております。
すべての返信
-
たとえば変数は$varとか、配列は@()ということをどこで調べているかということですか?
http://www.wankuma.com/seminar/20070112osaka5/Default.aspx
結構今のドキュメントはわかりづらいですよね。
ベータ時代のドキュメントがいちばんよかったです。
-
yakken さんのお気持ち、よくわかります。
私も PowerShell に付属のドキュメントや、吉岡さんの書かれた「PowerShell 宣言」等を参照して日々精進しておりますが、それらだけではカバーしきれていない情報が多々あるように感じます。
たぶん、PowerShell でできることが膨大な範囲にわたるためであろうと好意的に解釈していますが、言語としての基本的な構文の説明が不足している場合も見受けられる気がします。
たとえば、function の中で .NET Framework のあるクラスのメソッドを呼んで、戻り値(その後の処理に必要でない)を受け取るのを忘れるか $null にリダイレクトをするのを忘れると function の戻り値が Object[] に拡張されてしまう(詳しくは こちら を参照してみてください)という仕様は読んだことがなかったです。どこかに書かれていたのを見落としただけかもしれませんが・・・
それから、標準のドキュメントについてくるチートシートの最後のページにある「解析」の話なんかはかなり重要かと思うのですがほかのところでは見たことがない気がします。
他にもいろいろあった気がしますが忘れてしまいました。
今のところ、PowerShell の世界に足を踏み込んだ瞬間はとてもハッピーだったのにもう一歩足を進めようとしたらとたんに先が真っ暗・・・というような気分です。
-
確かに、リファレンスがないのは痛いですよね。
昔、Monadの頃は、winfx.msdn.microsoft.comの情報が非常に有用で、
文法などの解説も多々あったのですが、現在、winfx.msdn.microsoft.comは削除されています。(ーー;
特に以下のページが有用でした。(過去形)
▼MSH Language and Syntax
http://winfx.msdn.microsoft.com/library/default.asp?url=/library/en-us/monad_gettingstarted/html/353eeb29-e32c-496e-a6a0-ae592bdeb0e9.asp
さて、上記の情報を、ググってみたところ、winfx.msdn.microsoft.comと同様の情報が書かれたPDFを見つけましたので載せておきます。
Monadの頃の情報なので、PowerShellと完全に同じではありませんが、
コアな仕様はあまり変わっていないはずです。 -
私はしょうがなく海外のサイト、本に手を伸ばし始めました。
http://blogs.msdn.com/powershell/
http://thepowershellguy.com/blogs/posh/default.aspx (あれ?エラーになる)
など。本は、
http://www.amazon.co.jp/dp/1932394907/
この本はPowerShellの開発者によって書かれたものなのでかなり「Inside」的かと思います。
-
中さん、bear.mini さん、p-nixさん、吉岡さん返事ありがとうございます。
自分の求めているものは、インストール時のリファレンスとかサンプルではなく、これらに表現されていないものというんでしょうか、いわばInside的なものになるのかなと思います(bear.miniさんの投稿とほとんど同じかもしれません)。PowerShellのコアが.Net2.0でありC#のような文法でかけるので、「それじゃあC#流に書こう」とするとエラーになったりするので、マニュアルにない何かがあるんだなと思っております。
一番違和感を覚えたのは、ADSIを利用してActiveDirectoryからユーザの一覧をダンプしようとした時でした。
$root = [ADSI]""
でドメインのルートを取得して、$rootをget-memberでメンバ情報を表示すると、プロパティしか表示されません。しかし、$rootの実際の型はC#で表現するとDirectoryEntryクラスかなと思うのですが、このクラスにはメソッドもあります。System.DirectoryServiceネームスペースの各クラスは、ほとんどが利用し終わったらDisposeメソッドを呼ぶようにとありますので、$root.Dispose()と書くと、そんなメンバはないとエラーになります。いろいろ探した結果、$root.psbase.Dispose()ならOKということがわかりましたが、「psbaseって?」ということになりました。このように「これ何だろう?」と思うことがPowerShellには多くあるような気がします。
-
中さんのおっしゃる通りで、ADSI、WMI、そしてXMLなど様々なデータをPSという同じ土俵に乗せることをまず第一に考えているようです。
http://blogs.msdn.com/powershell/archive/2006/11/24/what-s-up-with-psbase-psextended-psadapted-and-psobject.aspx
そのために元のクラスが持っていたメソッド、プロパティを一部隠すことによって共通化を図っているようです。
しかし、それでは隠してしまったプロパティにアクセスすることができなくなるので、その抜け道として PSBase がある、みたいです。
上述の本ではPSBaseについて「This member allows you to get at the object directory,bypassing all of the synthetic member lookup.(P236)」と説明されていました。PSBase を使うべきかの判断には、(ADSI苦手なのでXMLを例にします。)
$d = [xml] "<top><a>one</a><b>two</b><c>3</c></top>"
と、変数にセットした後にまず、
$d | gm -type "method,property"
に求めるメソッド、プロパティがあるか、なければ
$d.psbase | gm -type "method,property"
にあるか、という手順で地道に調べるしかないでしょうね。しかし、そうは言っても
$d = [xml] "<top><a>one</a><b>two</b><c>3</c></top>"
$ne = $d.CreateElement("e")
$ne.psbase.InnerText = "abcde"
$d.top.AppendChild($ne)とか見ると、なんでそこだけpsbaseいるんだよ、とか言いたくもなりますけど。(´・ω・`)
、というわけで未熟者の私でも上記サイト、本があればこのくらいなら調べられたのでyakkenさんならきっともっといろいろ見つけることができると思います。 -
get-help about で全体的なヘルプが見られますが、書かれていないこともたくさんありますし、ほしい情報が見つけやすいとは言えませんね。
あと、一般的な情報として Channel 9 内の Wiki も参考になるかと思います。(英語)
Windows PowerShell Wiki
http://channel9.msdn.com/wiki/default.aspx/Channel9.WindowsPowerShellWiki
特に、クイックスタートは簡素ですが有用だと思います。
Windows PowerShell QuickStart
http://channel9.msdn.com/wiki/default.aspx/Channel9.WindowsPowerShellQuickStart
# 日本語版があってもいいかもしれませんね。
-
回答いただいた皆様、ありがとうございます。
米国ダウンロードセンターに、それなりに詳しいヘルプがダウンロード可能になりました。
psbase等の裏の仕組みについては、記述がないようですが、今後に期待(いつも出ますよね、Inside XXXXって)したいと思います。