マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

以前から、オブジェクトベースのプログラム、スクリプト(WSH、perl)などは存在したが、
PowerShellが唯一のオブジェクト・ベースのシェル(perlに似ている)である。

# OSレイヤから少々遠いためシェルというよりシェルスクリプトという意見もある。

詳細

テキストベースからオブジェクトベースへ。

皆、

違いに混乱する。

オブジェクトのパイプラインとは?

オブジェクトへメンバー追加する。

スクリプト

function dirinfo {
  param(
   [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
   [object]$dir,

   [boolean]$totalup = $false 
  )

  # 空っぽの配列
  $dirs = @()

  # $dir へ プロパティ追加
  $dir | Add-Member -MemberType NoteProperty -Name TotalFiles -Value 0
  $dir | Add-Member -MemberType NoteProperty -Name TotalSize -Value 0

  foreach ($f in (get-childitem $dir.FullName)) {
    if ( $f.Attributes -band [System.IO.FileAttributes]::Directory ) {
      # サブフォルダの情報
      $ret = dirinfo $f $totalup
      if ( $totalup ) {
        # 末尾の情報を $dir へ加算
        $dir.TotalFiles += $ret[-1].TotalFiles
        $dir.TotalSize += $ret[-1].TotalSize
      }
      $dirs += $ret   # サブフォルダ全体を覚える
    } else {
      $dir.TotalFiles += 1
      $dir.TotalSize += $f.Length
      $dirs += $f
    }
  }
  $dirs += $dir   # $dir自身を末尾に覚える

  # 覚えたものをまとめて返す
  write-output $dirs
}

実行例

参考


Tags: :シェル, :インフラストラクチャ, :Windows


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS