2006/07/14

元記事はhttp://winscript.s41.xrea.com/mt/archives/2005/09/com.htmlです。

PowerShellでは.NETのオブジェクトのほかに、COMのオブジェクトも呼び出すことができます。呼び出し方は$Fs = new-object -com Scripting.FileSystemObjectのようにします。

このサンプルは、深い階層に新しいフォルダを再帰的に作成していくスクリプトです。

function CreateFolderEx ($Path){
 $sParent=$Fs.GetParentFolderName($Path)
 if ($Fs.FolderExists($sParent) -And !$Fs.FolderExists($Path)) {
  [void]$Fs.CreateFolder($Path)
 } elseif ($Fs.FolderExists($Path)) {
 } else {
  CreateFolderEx($sParent)
  [void]$Fs.CreateFolder($Path)
 }
}
$Fs = new-object -com Scripting.FileSystemObject
CreateFolderEx "C:\test\test\aaaa\wwww\aaa" 

FolderExistsと($Path)の間にスペースを入れるとエラーになるのに注意です。(beta 2ではならなかったのに…)

function CreateFolderEx ($Path){

は、

function CreateFolderEx {
Param($Path)

と書くこともできますが、個人的にこちらの書き方は冗長じゃないかなあという気がします。betaとの互換性のために残されているだけかもしれません。

ちなみに、.NET FrameworkのSystem.IO.DirectoryInfoクラスを使うならこんな面倒なことは必要ありません。

$di = new-object System.IO.DirectoryInfo("C:\test\test\aaaa\wwww\aaa")
$di.Create()
元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/07/14/32456.aspx

2006/07/06

使用可能なCmdletを列挙し、cmdlet.txtに出力します。

get-command -type cmdlet|sort Name|out-file "cmdlet.txt"

使用可能なCmdletの数をカウントするには次のようにします。

get-command -type cmdlet|measure-object

RC1ではCount : 129と出ます。多いですね。これを分類してやろうと思っているのですが、いい分類方法はあるでしょうか。beta2の段階で出ていた書籍、Monad, by Andy Oakley では、

  1. System
  2. Objects
  3. History
  4. Cmdlet
  5. Providers
  6. Operating System Components
  7. Output Formatters
  8. Aliases、Miscellaneous
  9. Variables
  10. Input/Output
  11. Security
  12. Debugging

と分類されていたようです。とりあえずPowerShellをシェルとして使うにはCmdletの知識が不可欠なので、この情報はなるべく早めに提供していこうと思います。とりあえず1日1Cmdletのペースでデータベースを作れたらいいなぁと思います。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/07/06/31794.aspx


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

Books

Twitter