2007/06/05

Download details: Windows PowerShell Graphical Help File
http://www.microsoft.com/downloads/details.aspx?FamilyID=3b3f7ce4-43ea-4a21-90cc-966a7fc6c6e8&DisplayLang=en

こちらでダウンロードできます。英語版です。
といっても付属ヘルプをコンバートしたもの+VBScriptの関数をPowerShellでどう書くかのまとめのようです。

私が前書いた、付属ヘルプをHTML化するスクリプトを使った方が現状では日本語ユーザー的にはいいかもしれません。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/06/05/79473.aspx

2006/12/08

コマンドレットオンラインヘルプ作成
http://blogs.wankuma.com/mutaguchi/archive/2006/11/07/43965.aspx
の続編です。本文中のコマンドレットにリンクを張るようにしました。その他いろいろ改善。
旧バージョンをお使いの方は一度*.htmlを削除してください。ファイル名が変わりました。

function Sanitize{
    #サニタイズ処理
    param ([string]$strSource)
    return ($strSource.Replace("&","&").Replace("<","<").Replace(">",">"))
}
 
function MakeLink{
    #用語にリンクを張る
    param ([string]$strSource)
    foreach ($key in $keys){
        $strSource = $strSource -replace "(\s)($key)(\s)",
        ("`$1`$2`$3")
    }
    return ($strSource);
}
 
#キーワードを格納するArrayList
$keys = new-object System.Collections.Arraylist
get-help -category all | ?{"Cmdlet","Provider","HelpFile" -contains $_.category}|
%{if ($_.Name -ne $null) {[void] $keys.Add($_.Name)}}
 
# "Cmdlet","Provider","HelpFile"のカテゴリを持つヘルプをHTML化
get-help -category all | ?{"Cmdlet","Provider","HelpFile" -contains $_.category}|
%{"
" + 
$(MakeLink $(Sanitize (get-help $_.Name -detail|out-string))).Replace("`r`n","
") + "戻る
"| out-file($_.name + ".html")} $temp="" # ヘルプのHTMLのインデックスを作成する # Aliasのヘルプ get-help -category Alias |sort name| %{$temp+=""} # Cmdlet,Provider,HelpFileの各ヘルプ get-help -category all | ?{"Cmdlet","Provider","HelpFile" -contains $_.category} | sort category,name| %{$temp+=""} $temp+="
名前種類簡易説明
" + $_.name + "" + $_.category + "" + $_.synopsis + "
" + $_.name + "" + $_.category + "" + $_.synopsis + "
" out-file index.html -inputobject $temp

コマンドレットとパイプを多用するスクリプトの見やすい記法ってなんかないですかね?自分で読んでもよくわかりませんなこれw

あと気づいたこと。メソッドを呼び出すときはmethodname (parameter)のようにメソッド名と引数の間にスペースを入れてはいけない!VBSとかになれているとはまります。

関数の呼び出しはfuncname param1 param2のようにする(引数は,で区切るのではない!)。関数の戻り値を読むときは$(funcname param1 param2)のようにする。関数中で何か値が返されるとそれがそのまま関数の戻り値になる(returnは明示しなくてもいいということ。複数の値を返すと戻り値は[object[]]の配列になる。逆に値を返したくない場合は[void]にキャスト)

-replace演算子でサブマッチ文字列は$1,$2..に格納される。$は変数の頭文字なので ` (アクサン グラーブ)でエスケープし、`$1とする。もしくは''(シングルクォーテーション)でくくり'$1'のようにする。

そうそう、
get-help -category all | ?{"Cmdlet","Provider","HelpFile" -contains $_.category}|
は、なんで
get-help -category Cmdlet,Provider,HelpFile
にしなかったかというと、このようにしてもなぜかAliasが含まれてしまうからです。Cmdletを指定するとAliasが含まれる仕様のようです。
でも-containsの使い方がわかってよかったです(ちょっとトリッキー?)

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/12/08/49387.aspx

PowerShellのヘルプを読むには、Get-Help コマンドレット名や、Get-Help ヘルプトピックス名(abount_*)と引きますが、実は他にもプロバイダ(ファイルシステムやレジストリなどをドライブとして扱うためのプログラム)ごとのヘルプというものもあって、その一覧は

get-help -category provider

のようにすると得られます。しらなかったー。このことはabout_providerにちょろっと書いてあるだけでうっかりすると見落としますが、重要なことが書いてあるので一度読んでおきましょう。

なお、すべてのヘルプをみるにはget-help -category allとします。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/12/08/49301.aspx

2006/11/07

前回作ったワンライナーは見にくいので、スクリプト(*.ps1)に書き下ろしてみました。今回はabout...help.txtなファイルもHTML化してみました。だいぶ便利になってきましたね。

function Sanitize{
 #サニタイズ処理
 param ([string]$strSource)
 return ($strSource.Replace("&","&").Replace("<","<").Replace(">",">"))
}
 
# コマンドレットのヘルプのHTMLを作成する
get-command -commandtype cmdlet|
%{"

" + $(Sanitize (get-help $_.Name -detail|out-string)).Replace("`r`n","
") + "

"| out-file($_.name + ".html")} #about...help.txtのHTMLを作成する get-childitem -path $pshome\ja -filter about*.txt| %{"

" + (get-content $_.fullname -encoding UTF8|%{$(Sanitize($_))+"
"}) + "

"| out-file($_.name + ".html")} $temp="
    " # コマンドレットのヘルプのHTMLのインデックスを作成する get-command -commandtype cmdlet| %{$temp+="
  • " + $_.name + "
  • "} # about...help.txtのHTMLのインデックスを作成する get-childitem -path $pshome\ja -filter about*.txt| %{$temp+="
  • " + $_.name + "
  • "} $temp+="
" out-file index.html -inputobject $temp
元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/11/07/43965.aspx

cmd.exeでdir /bとすると、カレントにあるファイル名・ディレクトリ名だけを出力します。以下、例。

C:\WINDOWS\system32\windowspowershell\v1.0>dir /b
certificate.format.ps1xml
dotnettypes.format.ps1xml
examples
filesystem.format.ps1xml
help.format.ps1xml
ja
powershell.exe
powershellcore.format.ps1xml
powershelltrace.format.ps1xml
pwrshmsg.dll
pwrshsip.dll
registry.format.ps1xml
types.ps1xml

同じことをPowerShellにやらせるにはどうすればいいか、考えてみました。

【案1】

PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> ls|format-wide -c 1

    ディレクトリ: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\system32\Win
    dowsPowerShell\v1.0

[examples]
[ja]
certificate.format.ps1xml
dotnettypes.format.ps1xml
filesystem.format.ps1xml
help.format.ps1xml
powershell.exe
powershellcore.format.ps1xml
powershelltrace.format.ps1xml
pwrshmsg.dll
pwrshsip.dll
registry.format.ps1xml
types.ps1xml

Format-Wideコマンドレットを使った例。うーんちょっと違う。でもディレクトリに[]が付くのでわかりやすいかも。これはこれで。

【案2】

PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> ls|select name
Name
----
examples
ja
certificate.format.ps1xml
dotnettypes.format.ps1xml
filesystem.format.ps1xml
help.format.ps1xml
powershell.exe
powershellcore.format.ps1xml
powershelltrace.format.ps1xml
pwrshmsg.dll
pwrshsip.dll
registry.format.ps1xml
types.ps1xml

Select-Objectコマンドレットを使ってNameプロパティだけをもったPSCustomObjectのArrayを作っているのでこんな感じに出力されます。
Name
----
が邪魔ですね。

【案3】

PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> ls|%{$_.name}
examples
ja
certificate.format.ps1xml
dotnettypes.format.ps1xml
filesystem.format.ps1xml
help.format.ps1xml
powershell.exe
powershellcore.format.ps1xml
powershelltrace.format.ps1xml
pwrshmsg.dll
pwrshsip.dll
registry.format.ps1xml
types.ps1xml

これでdir /bと同じ結果になりました。Foreach-ObjectでNameプロパティだけを取り出して出力しているわけです。

【案4】

PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> ls|split-path -leaf
examples
ja
certificate.format.ps1xml
dotnettypes.format.ps1xml
filesystem.format.ps1xml
help.format.ps1xml
powershell.exe
powershellcore.format.ps1xml
powershelltrace.format.ps1xml
pwrshmsg.dll
pwrshsip.dll
registry.format.ps1xml
types.ps1xml

Split-Pathコマンドレットを-leafオプション付きで使っても同様の出力が得られました。これ実は何故こうなるのかよくわからないんですけど、たぶんパイプを渡るときに、System.IO.DirectoryInfoオブジェクトやSystem.IO.FileInfoオブジェクトのNameプロパティが渡されてるか、ToString()メソッドが実行されているのでしょうね。ps1xmlファイルの何らかの記述でこうなっているのかもしれません。でもまあ仕組みが分からなくてもこの動作は非常に合理的であります。

【案5】

PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> ls -name
examples
ja
certificate.format.ps1xml
dotnettypes.format.ps1xml
filesystem.format.ps1xml
help.format.ps1xml
powershell.exe
powershellcore.format.ps1xml
powershelltrace.format.ps1xml
pwrshmsg.dll
pwrshsip.dll
registry.format.ps1xml
types.ps1xml

ていうかこんなことをしなくても、Get-ChildItemコマンドレットには-nameオプションがあり、dir /bと同じ効果が得られるのでした。ヘルプの見落としでこんな回りくどいことを考えていたのです。すみません、こんなオチで。でもまあ同じことをやるのに色んな手段があるということが分かったので良しとしましょう。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/11/07/43902.aspx

2006/11/01

PowerShellのコマンドレットのヘルプを引くには、get-help コマンド名 -detailなどとしますが、コマンドラインでいちいち打つのは邪魔くさい、一覧のヘルプファイルが欲しい、という場合に便利なワンライナーを書いてみました。

カレントにファイルが作成されますので、適宜cdで移動してください。

コマンドレットのヘルプのHTMLを作成するワンライナー

get-command -commandtype cmdlet|%{"

" + (get-help $_.Name -detail|out-string).Replace("&","&").Replace("<","<").Replace(">",">").Replace("`n","
") +"

"|out-file($_.name + ".html")}

HTMLのインデックスを作成するワンライナー

$temp="";out-file index.html -inputobject $temp

これを実行すると、カレントディレクトリに、コマンドレットのヘルプが記述された「コマンドレット名.html」というファイルが、登録されている数だけ作成され、インデックスとなるファイルが「index.html」として作成されます。

あとはindex.htmlを開いて読みたいコマンドレットのリンクをクリックしてください。
関連リンクに実際にリンクを張るなど、改造しだすといろいろできると思いますが、まずはワンライナーとしてここに載せておきます。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/11/01/43172.aspx

2006/09/28

Windows Power ShellのRC2
http://blogs.wankuma.com/naka/archive/2006/09/27/39719.aspx

Shigeya Tanabe's blog : Windows PowerShell 1.0 RC2 公開
http://blogs.technet.com/stanabe/archive/2006/09/27/459209.aspx

中さん、田辺さんのブログより。

パッケージがいっぱいありますが重要なのはこのあたりの模様。

ダウンロードの詳細 : Windows XP 用 Windows PowerShell 1.0 RC2 更新プログラム パッケージ (ローカライズ版) (KB923567)
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=e504a78b-173e-4975-a669-49cf0fec9c07

ダウンロードの詳細 : Windows Server 2003 用 Windows PowerShell 1.0 RC2 更新プログラム パッケージ (ローカライズ版) (KB923567)
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=0b73e858-cd36-4f10-9756-f6fee2bbdb4a

すみません、忙しくて(本当か?)検証してる暇がありません。ローカライズが始まったということで、各種ヘルプが日本語化されてるものと思われます。

Windows PowerShell : Windows PowerShell RC2 Now Available
http://blogs.msdn.com/powershell/archive/2006/09/26/Windows_PowerShell_RC2_Now_Available.aspx

によると、

RC2では
 ・ADSIにダイレクトにアクセスできるようになった。
 ・WMIのアクセスが容易になった。
 ・XORという論理演算子の追加。
 ・ヘルプの改善。
という変更が加えられたようです。

Windows PowerShell 1.0はQ4 CY06(2006年中とのことです)にリリースとのこと。

結局英語版の間は満足な情報が出せませんでした…。これから精進します。とりあえずは10月乗り切らないと…。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/09/28/39914.aspx

新しい記事のページへ


Copyright © 2005-2018 Daisuke Mutaguchi All rights reserved
mailto: mutaguchi at roy.hi-ho.ne.jp
プライバシーポリシー

Twitter

Books