Powershellスクリプト一覧




10進数を2進数に表示

> [convert]::tostring(1234,2)
10011010010
> [convert]::tostring(-2,2)
11111111111111111111111111111110

Operating Systemの確認

> Get-WmiObject Win32_OperatingSystem | `
   Format-List caption, CSDVersion, OSArchitecture, SystemDirectory, WindowsDirectory
出力結果例
caption          : Microsoft Windows 7 Home Premium
CSDVersion       : Service Pack 1
OSArchitecture   : 32 ビット
SystemDirectory  : C:\windows\system32
WindowsDirectory : C:\windows


ディスク一覧表示

Get-InventoryDrivetype.ps1
$hash = @{
  2 = "Removable disk"
  3 = "Fixed local disk"
  4 = "Network disk"
  5 = "Compact disk"
}

Get-WmiObject Win32_LogicalDisk |
  Select DeviceID, VolumeName,
  @{ LABEL='TypeDrive' ; EXPRESSION={$hash.item([int]$_.DriveType)}  }
出力結果例
> .\Get-InventoryDrivetype.ps1

DeviceID                                VolumeName                              TypeDrive
--------                                ----------                              ---------
C:                                                                              Fixed local disk
D:                                                                              Fixed local disk
E:                                                                              Compact disk
F:                                      HD-PU2                                  Fixed local disk
G:                                                                              Fixed local disk
H:                                      HDD-BACKUP                              Fixed local disk

インストールされているすべてのソフトウェアの一覧表示

Get-InstalledSoftware1.ps1
## Uninstall キー内にリストされているすべてのソフトウェアを取得する
## $keys には、Microsoft.Win32.RegistryKey 型の オブジェクトが格納されている
$keys = Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

# DisplayName と DisplayVersion があるものだけ格納
$items = $keys | Foreach-Object { Get-ItemProperty $_.PsPath;} | `
           Where-Object -FilterScript { $_.DisplayName -and $_.DisplayVersion }

# 表示
$items | select-object DisplayName, DisplayVersion | Format-Table -autosize
出力例
> .\Get-InstalledSoftware1.ps1

DisplayName                                                 DisplayVersion
-----------                                                 --------------
Adobe AIR                                                   3.9.0.1030
Adobe Digital Editions 2.0                                  2.0
Adobe Flash Player 15 ActiveX                               15.0.0.152
Adobe Flash Player 15 Plugin                                15.0.0.152
Applian FLV and Media Player 3.1.1.12                       3.1.1.12
...

スタートアップ項目の一覧表示

> Get-WmiObject   Win32_StartupCommand | Select-Object Name, command, Location, User | Format-List

プロセスのロードモジュール一覧を表示する。

> get-process powershell|select modules|foreach-object{$_.modules}  | `
sort @{e={$_.baseaddress -as [int]}} | `
select @{Name="   Address"; Expression={ "0x{0:X8}" -f $_.baseaddress.ToInt32();}},`
@{Name="Size(KB)"; Expression={ $_.Size } }, modulename |ft -autosize


   Address Size(KB) ModuleName
---------- -------- ----------
0x04560000      320 System.Management.Automation.resources.dll
0x047B0000     2888 System.Data.dll
0x05A50000     5168 PresentationFramework.dll
0x077A0000    14020 PresentationFramework.ni.dll
0x08F60000     1064 nvSCPAPI.dll
0x0F220000    14780 nvd3dum.dll
...

ロードモジュールのフルパス表示

Get-Process powershell | Select-Object Modules | Foreach-object{$_.Modules}  | `
Sort-Object -Property @{ Expression ={ $_.BaseAddress -as [int] } } | `
Select-Object -Property @{Name="   Address"; Expression={ "0x{0:X8}" -f $_.BaseAddress.ToInt32();}}, `
@{Name="Size(KB)"; Expression={ $_.Size } }, ModuleName, FileName | Format-Table -AutoSize -Wrap
 
   Address Size(KB) ModuleName                                          FileName
---------- -------- ----------                                          --------
0x04560000      320 System.Management.Automation.resources.dll          C:\windows\assembly\GAC_MSIL\System.Management.Automation.resources\1.0.0.0_ja_31bf3856ad364e35\System.Management.Automation.resources.dll
0x047B0000     2888 System.Data.dll                                     C:\windows\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll
0x05A50000     5168 PresentationFramework.dll                           C:\windows\assembly\GAC_MSIL\PresentationFramework\3.0.0.0__31bf3856ad364e35\PresentationFramework.dll
0x077A0000    14020 PresentationFramework.ni.dll                        C:\windows\assembly\NativeImages_v2.0.50727_32\PresentationFramewo#\f703846404bb66a4ae03ef8133755007\PresentationFramework.ni.dll
0x08F60000     1064 nvSCPAPI.dll                                        C:\Program Files\NVIDIA Corporation\3D Vision\nvSCPAPI.dll
...

モジュールの製品と製品バージョンを表示

> Get-Process powershell | Select-Object Modules | Foreach-object{$_.Modules}  | `
Sort-Object -Property @{ Expression ={ $_.BaseAddress -as [int] } } | `
Select-Object -Property @{Name="   Address"; Expression={ "0x{0:X8}" -f $_.BaseAddress.ToInt32();}}, `
@{Name="Size(KB)"; Expression={ $_.Size } }, ModuleName, Product, ProductVersion | `
Format-Table -AutoSize -Wrap

   Address Size(KB) ModuleName                                          Product                                         ProductVersion
---------- -------- ----------                                          -------                                         --------------
0x04560000      320 System.Management.Automation.resources.dll          Microsoft (R) Windows (R) Operating System      6.1.7600.16385
0x047B0000     2888 System.Data.dll                                     Microsoft® .NET Framework                       2.0.50727.5420
0x05A50000     5168 PresentationFramework.dll                           Microsoft® .NET Framework                       3.0.6920.5453
0x077A0000    14020 PresentationFramework.ni.dll                        Microsoft® .NET Framework                       3.0.6920.5453
0x08F60000     1064 nvSCPAPI.dll                                        NVIDIA GeForce 3D Vision                        7.17.13.1100
0x0F220000    14780 nvd3dum.dll                                         NVIDIA Windows WDDM D3D driver                  9.18.13.1100
0x21C30000      456 powershell.exe                                      Microsoft® Windows® Operating System            6.1.7600.16385
...

ディレクトリのみ表示する

> Get-ChildItem "c:\programing" -Recurse | ?{$_.GetType().Name -eq "DirectoryInfo" } | `
ForEach-Object { $_.FullName }

ディレクトリのみ表示。更新時刻も一緒に表示

> Get-ChildItem "c:\programing" -Recurse | ?{$_.GetType().Name -eq "DirectoryInfo" } | `
ForEach-Object { "{0},{1}" -f $_.FullName, $_.LastWriteTime }
もしくは、
> Get-ChildItem "c:\programing" -Recurse | ?{$_.GetType().Name -eq "DirectoryInfo" } | `
ForEach-Object { "{0}`t{1}" -f $_.FullName, $_.LastWriteTime }


ファイルのみ表示

> Get-ChildItem "c:\programing" -Recurse | ?{$_.GetType().Name -eq "FileInfo" } | `
ForEach-Object { $_.FullName }

ファイルのみ表示。更新時刻も一緒に表示

> Get-ChildItem "c:\programing" -Recurse | ?{$_.GetType().Name -eq "FileInfo" } | `
ForEach-Object { "{0},{1}" -f $_.FullName, $_.LastWriteTime } 

UTF-8 BOM付きでファイルを保存する

get-content a.txt | Out-File -Encoding "UTF8" b.txt

UTF-8 BOM付きでファイルを、BOMなしで保存する。

$MyPath = "C:\Programing\powershell\YES_BOM.txt"
$MyFile = Get-Content $MyPath
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
[System.IO.File]::WriteAllLines($MyPath, $MyFile, $Utf8NoBomEncoding)


Set-Content を -Encoding 指定なしの場合は、SJIS で出力する。

Get-Content .\SJIS.txt | Set-Content SET-Content_sjis.txt
Get-Content .\SET-Content_sjis.txt
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は B0D7-FFEB です

 C:\Programing\powershell\work\FromSJIS_To_UTF8 のディレクトリ

2018/10/13  11:34    <DIR>          .
2018/10/13  11:34    <DIR>          ..
2018/10/13  11:34                 0 SJIS.txt
               1 個のファイル                   0 バイト
               2 個のディレクトリ  214,832,488,448 バイトの空き領域

Set-Content を -Encoding UTF8 指定した場合は、UTF-8 の BOMありで出力する。

Get-Content .\SJIS.txt | Set-Content -Encoding UTF8 SET-Content_utf8_BOM.txt

BOMなしのファイルを出力する場合は、[System.IO.File]::WriteAllLines()を使用する。

$UTF8BOMFile = Get-Content .\SET-Content_utf8_BOM.txt
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines("$PWD\SET-Content_utf8_NOBOM.txt", $UTF8BOMFile, $Utf8NoBomEncoding)

Set-Content を -Encoding BigEndianUnicode 指定した場合は、UTF16(BigEndian)で出力する。

Get-Content .\SJIS.txt | Set-Content -Encoding BigEndianUnicode  SET-Content_utf16_BigEndian.txt

Set-Content を -Encoding Unicode 指定した場合は、UTF16(LittleEndian)で出力する。

Get-Content .\SJIS.txt | Set-Content -Encoding Unicode  SET-Content_utf16_LittleEndian.txt

Set-Content を を -Encoding ASCII 指定した場合は、ASCII (7 ビット) 文字セットのエンコードを使用して出力する。

Get-Content .\SJIS.txt | Set-Content -Encoding ASCII  SET-Content_ASCII.txt
→日本語文字は文字化けする。

Set-Content を を -Encoding Byte 指定した場合

Get-Content .\SJIS.txt | `
Set-Content -Encoding Byte  SET-Content_Byte.txt
→以下のエラーメッセージが出力されて、実行に失敗する。
Set-Content : byte エンコードを続行できません。byte エンコードを使用するときは、コンテンツの種類が byte でなければなりません。
発生場所 行:1 文字:37
+ Get-Content .\SJIS.txt | Set-Content <<<<  -Encoding Byte  SET-Content_Byte.txt
    + CategoryInfo          : InvalidArgument: (:) [Set-Content]、PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.SetContentCommand
・・・省略
→そのため、改行コードを指定して連結する。
(Get-Content .\SJIS.txt) -join "`r`n" | `
ForEach-Object { [Text.Encoding]::UTF8.GetBytes($_) }  | `
Set-Content -Encoding Byte  SET-Content_Byte.txt
→最後の改行文字が欠落してしまうようだ。
 そのため、Out-String で明示的に改行を含んだ文字列に変換する。
(Get-Content .\SJIS.txt) | `
Out-String | `
ForEach-Object { [Text.Encoding]::UTF8.GetBytes($_) }  | `
Set-Content -Encoding Byte  SET-Content_Byte_1.txt

もしくは、以下のように、最終行の文末に改行を入れる場合は、全体を()で括り、改行コードを文字列連結する。
((Get-Content .\SJIS.txt) -join "`r`n" ) + "`r`n" | ` 
ForEach-Object { [Text.Encoding]::UTF8.GetBytes($_) }  | `
Set-Content -Encoding Byte  SET-Content_Byte_2.txt

Powershell V3 移行であれば、-Raw を指定すれば、改行文字も含まれる。
Get-Content -Raw .\SJIS.txt | `
ForEach-Object { [Text.Encoding]::UTF8.GetBytes($_) }  | `
Set-Content -Encoding Byte  SET-Content_Byte_3.txt

Set-Content を を -Encoding String 指定した場合は、SJIS で出力する。

Get-Content .\SJIS.txt | `
Set-Content -Encoding String  SET-Content_String_SJIS.txt


環境変数Pathを1行ずつ表示する(長い書き方)

> Get-Content env:path | ForEach-Object { $_.replace( ";", ";`n" ) }

環境変数Pathを1行ずつ表示する(簡易版)

> $env:path -split ";"

H:\archives フォルダ配下で、ファイルの更新日時が、2014/05/18 から、2014/06/01 までのファイルを表示する。

> Get-ChildItem . -Recurse | ?{$_.GetType().Name -eq "FileInfo" -and ($_.LastWriteTime) `
-ge [DateTime]"2014/05/18" -and ($_.LastWriteTime) -lt [DateTime]"2014/06/01"} | `
select lastwritetime, FullName | ft -autosize

netstat の結果に、プロセスのコマンドラインを連結して表示する。

$info = new-object System.Text.StringBuilder

#キー:プロセスID、値:プロセスIDのコマンドライン
$hash = @{}

$results = netstat -ano | Select-String -Pattern '\s+(TCP|UDP)'


#Loop through each line of results   
foreach( $result in $results )
{
  [void]$info.append( $result );
  [void]$info.append( " " );

  # get Process ID
  $resultItems = $result.line.split( ' ', [System.StringSplitOptions]::RemoveEmptyEntries )

  if( $resultItems[0] -eq 'TCP' )
  {
    $process_id = $resultItems[4]
  }
  else
  {
    # UDP
    $process_id = $resultItems[3]
  }


  if( $hash.ContainsKey( $process_id ) )
  {
    $cmdline = $hash[$process_id]
    [void]$info.append( $cmdline )

  } else {

    # プロセスIDのコマンドラインを取得する
    $process_info = Get-WmiObject -class win32_process -Filter "ProcessId = '$process_id'"
    $process_commandline = $process_info.CommandLine
    [void]$info.append( $process_commandline )

    #ハッシュテーブルに登録
    [void]$hash.Add( $process_id, $process_commandline )
  }

  [void]$info.append( "`r`n" )

}

$info.ToString()
---------------------------------------------------------------------------------------------------
●実行例
> .\Query-NetstatInfoCmdline.ps1
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       956
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  ...
  TCP    127.0.0.1:9421         0.0.0.0:0              LISTENING       5124 "C:/Users/nakajima/AppData/Local/Akamai/netsession_win.exe" --client
  TCP    127.0.0.1:27015        0.0.0.0:0              LISTENING       2000
  TCP    127.0.0.1:49196        0.0.0.0:0              LISTENING       980
  TCP    127.0.0.1:49207        127.0.0.1:4573         ESTABLISHED     608 "C:\Program Files\Motorola Mobility\Motorola Device Manager\MotoHelperAgent.exe"
  TCP    127.0.0.1:49212        127.0.0.1:27015        ESTABLISHED     4352 "C:\Program Files\iTunes\iTunesHelper.exe"
  TCP    127.0.0.1:49726        127.0.0.1:49727        ESTABLISHED     5920 "C:\Program Files\Mozilla Thunderbird\thunderbird.exe"
  TCP    127.0.0.1:49727        127.0.0.1:49726        ESTABLISHED     5920 "C:\Program Files\Mozilla Thunderbird\thunderbird.exe"

フォーマット演算子を使用した例

> 1..8 | ForEach { $n="1" * $_; "{0,9} x {0,9} = {1}" -f $n, ("$n * $n" | Invoke-Expression) }
        1 x         1 = 1
       11 x        11 = 121
      111 x       111 = 12321
     1111 x      1111 = 1234321
    11111 x     11111 = 123454321
   111111 x    111111 = 12345654321
  1111111 x   1111111 = 1234567654321
 11111111 x  11111111 = 123456787654321
> 1..8 | ForEach { $n = "1" * $_; "{0,-9} x {0,9} = {1}" -f $n, ("$n * $n" | Invoke-Expression) }
1         x         1 = 1
11        x        11 = 121
111       x       111 = 12321
1111      x      1111 = 1234321
11111     x     11111 = 123454321
111111    x    111111 = 12345654321
1111111   x   1111111 = 1234567654321
11111111  x  11111111 = 123456787654321

コピースクリプト

# copyの基本となるディレクトリ配下にあるファイル群だけを、copy元の
# ディレクトリ配下から copy先のディレクトリにコピーする

# copyの基本となるディレクトリ
$sourceBaseDir = "C:\Programing\powershell\ScriptCenter"

# copy元のディレクトリ
$copyFromDir = "C:\Programing\powershell\work"

# copy先のディレクトリ
$copyToDir = "C:\Programing\powershell\work1"

# copyの基本となるディレクトリとファイルの一覧
$sourceBaseList = @()
$sourceBaseList = Get-ChildItem -Recurse $sourceBaseDir

# $sourceBaseList には、以下のどちらかの型のオブジェクトが格納される。
# ディレクトリ : System.IO.DirectoryInfo
# ファイル     : System.IO.FileInfo

foreach( $item in $sourceBaseList )
{

    # copy先の絶対パス文字列を作成する
    $copyTo = $item.FullName.replace( $sourceBaseDir, $copyToDir )

    # copy先の絶対パスの場所が存在しない場合
    if( !$(Test-Path -Path $copyTo) )
    {
        # ディレクトリかどうか?
        if( $item.PSIsContainer )
        {
            # ディレクトリが存在しないので、作成する
            New-Item $copyTo -itemType Directory | Out-Null
        }
        # ファイルの場合
        else
        {
            # copy先の、ファイルのcopy先ディレクトリ名の取得
            $copyToParentDir = Split-Path -Parent $copyTo
            # copy先の親ディレクトリが存在するか?
            if( !$(Test-Path -Path $copyToParentDir) )
            {
                # copy先の親ディレクトリが存在しないので作成する
                New-Item $copyToParentDir -itemType Directory | Out-Null
            }
            
            # copy元の絶対パス文字列を作成する
            $copyFrom = $item.FullName.replace( $sourceBaseDir, $copyFromDir )

            # copy先ディレクトリにコピー
            Copy-Item $copyFrom -destination $copyToParentDir
        }
    }
}

フォルダサイズTop10出力スクリプト(forPowershell3.0以上)

Param( $RootFolder = "C:\Program Files" )

# RootFolder直下のファイルサイズの合計を求める
$Items = ( Get-ChildItem -Path $RootFolder  -ErrorAction "SilentlyContinue" | `
            Where-Object { $_.GetType().Name -eq "FileInfo" } | `
            Measure-Object -Property Length -Sum ) 
[Array]$Folders = [PSCustomObject]@{ 
                    "Fullname" = $RootFolder;
                    "Size(MB)" = ( "{0:N1}" -F ($Items.Sum/1MB) );
                }

# RootFolder 配下のフォルダごとのファイルサイズの合計を求める
$Items = ( Get-ChildItem -Path $RootFolder -Recurse -ErrorAction "SilentlyContinue" | `
            Where-Object {$_.GetType().Name -eq "DirectoryInfo"} )

$Folders += ForEach( $i in $Items )
            {
                $SubFolderItems = ( Get-ChildItem -Path $i.FullName -ErrorAction "SilentlyContinue" | `
                Where-Object {$_.GetType().Name -eq "FileInfo"} | `
                Measure-Object -Property Length -Sum )
        
                [PSCustomObject]@{
                    "Fullname" = $i.FullName;
                    "Size(MB)" = [decimal]( "{0:N1}" -F ($SubFolderItems.Sum/1MB) );
                }
            }

$Folders | Sort "Size(MB)" -Descending | Select-Object -First 10 | Format-Table -AutoSize

フォルダサイズTop10出力スクリプト(forPowershell2.0以上)

Param( $RootFolder = "C:\Program Files" )

# RootFolder直下のファイルサイズの合計を求める
$Items = ( Get-ChildItem -Path $RootFolder -ErrorAction "SilentlyContinue" | `
            Where-Object { $_.GetType().Name -eq "FileInfo" } | `
            Measure-Object -Property Length -Sum ) 

$ObjectProperties = @{
                         "FullName" = $RootFolder;
                         "Size(MB)" = ( "{0:N1}" -F ($Items.Sum/1MB) );
                    }
[Array]$Folders = New-Object PSObject -Property $ObjectProperties

<# 
[Array]$Folders = [PSCustomObject]@{ 
                    "Fullname" = $RootFolder;
                    "Size(MB)" = ( "{0:N1}" -F ($Items.Sum/1MB) )
                }
#>

# RootFolder 配下のフォルダごとのファイルサイズの合計を求める
$Items = ( Get-ChildItem -Path $RootFolder -Recurse -ErrorAction "SilentlyContinue" | `
            Where-Object {$_.GetType().Name -eq "DirectoryInfo"} )

$Folders += ForEach( $i in $Items )
            {
                $SubFolderItems = ( Get-ChildItem -Path $i.FullName -ErrorAction "SilentlyContinue" | `
                Where-Object {$_.GetType().Name -eq "FileInfo"} | `
                Measure-Object -Property Length -Sum )

                $ObjectProperties = @{
                         "FullName" = $i.FullName;
                         "Size(MB)" = [decimal]( "{0:N1}" -F ($SubFolderItems.Sum/1MB) )
                }

                New-Object PSObject -Property $ObjectProperties
            }

<#        
                [PSCustomObject]@{
                    "Fullname" = $i.FullName;
                    "Size(MB)" = [decimal]( "{0:N1}" -F ($SubFolderItems.Sum/1MB) )
                }
            }
#>

$Folders | Sort "Size(MB)" -Descending | Select-Object -First 10 | Format-Table -AutoSize

ファイル一覧が記載されたファイルリストを読み込んで、フルパスと最終更新時刻を表示する(foreach版)

$filepath = "GetLsastWriteTimeFileList.txt"
$fullName =""
$lastWriteTime = ""
$format = ""
$lines = Get-Content $filepath

function doForeach
{
  param( $filepath )

  process
  {
    # foreach でループする方法
    foreach($line in $lines) {
      if($line -ne "" ) {
        if(Test-Path -Path $line) {
          # フルパスと最終更新日時を取得する
          $item = Get-Item -Path $line
          $fullName = $item.FullName
          $lastWriteTime = $item.LastWriteTime
          $format = "{0}`t`t`t{1}" -f $fullName, $lastWriteTime
          Write-Host $format
        }
      }
    }
  }
}

doForeach $filepath

ファイル一覧が記載されたファイルリストを読み込んで、フルパスと最終更新時刻を表示する(1行版)

Get-Content .\GetLsastWriteTimeFileList.txt | ForEach-Object { Get-Item  $_ } | `
  Select-Object FullName, LastWriteTime | Format-Table

# GetLsastWriteTimeFileList.txt の内容
C:\Programing\powershell\returnDataFromFunction.ps1.exp
H:\src\file\file-4.26.tar.gz

文字列からハッシュ値を表示する

[CmdletBinding()]
param
    (
        [parameter(Mandatory = 1, Position = 0, ValueFromPipeline = $true)]
        [string]$targetString,

        [parameter(Mandatory = 0, Position = 1, ValueFromPipelineByPropertyName =$true)]
        [ValidateSet("MACTripleDES", "MD5", "RIPEMD160", "SHA1", "SHA256", "SHA384", "SHA512")]
        [string]$Algorithm = "SHA256"
    )
$crypto = [System.Security.Cryptography.HashAlgorithm]::Create($Algorithm)
$utf8 = new-object -TypeName System.Text.UTF8Encoding
[byte[]]$hash = $crypto.ComputeHash($utf8.GetBytes($targetString))
[System.BitConverter]::ToString($hash).Replace("-", [string]::Empty)

修正プログラムをインストール日時の昇順(古い順番)でソートして表示する。

> Get-HotFix  |Select-Object HotFixID, InstalledOn |Sort-Object InstalledOn | Format-Table -autosize

修正プログラムを修正プログラムのIDの昇順でソートして表示する。

> Get-HotFix  |Select-Object HotFixID, InstalledOn |Sort-Object HotFixID | Format-Table -autosize

Get-HotFixコマンドレットの出力オブジェクトから ScriptProperty のみを表示する。

> Get-HotFix | Get-Member -MemberType ScriptProperty


   TypeName: System.Management.ManagementObject#root\cimv2\Win32_QuickFixEngineering

Name        MemberType     Definition
----        ----------     ----------
InstalledOn ScriptProperty System.Object InstalledOn {get=if ([environment]::osversion.version.build -ge 7000)...

Get-HotFixコマンドレットの出力オブジェクトから ScriptProperty の定義を表示する。

> Get-Hotfix | Get-Member -MemberType ScriptProperty | Select-Object -ExpandProperty Definition
System.Object InstalledOn {get=if ([environment]::osversion.version.build -ge 7000)
                  {
                    # WMI team fixed the formatting issue related to InstalledOn
                    # property in Windows7 (to return string)..so returning the WMI's
                    # version directly
                    [DateTime]::Parse($this.psBase.properties["InstalledOn"].Value)
                  }
                  else
                  {
                    $orig = $this.psBase.properties["InstalledOn"].Value
                    $date = [datetime]::FromFileTimeUTC($("0x" + $orig))
                    if ($date -lt "1/1/1980")
                    {
                      if ($orig -match "([0-9]{4})([01][0-9])([012][0-9])")
                      {
                        new-object datetime @([int]$matches[1], [int]$matches[2], [int]$matches[3])
                      }
                    }
                    else
                    {
                      $date
                    }
                  };}

プロパティ名の一覧を表示するスクリプト(GetDetailPropertyName.ps1)

# Shell objectを作成する
$objShell = New-Object -ComObject Shell.Application

# Folder オブジェクトを取得する(ディレクトリはどこでも良い)
$objFolder = $objShell.namespace("D:\Programing\powershell")

# プロパティ名の一覧を表示する
0..330 | foreach { "{0,3}:{1}" -f $_, $objFolder.getDetailsOf($Null, $_) }


################################################################################
# 後処理
################################################################################
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($objFolder);
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($objShell)
[GC]::Collect()


# 参考URL
# PowerShell の GetDetailsOf を使ってファイルの詳細プロパティを取得する
# https://neos21.net/blog/2019/11/11-01.html
# Shell.Application プロパティ
# https://learn.microsoft.com/ja-jp/windows/win32/shell/shell-application
# Shell.NameSpace メソッド
# https://learn.microsoft.com/ja-jp/windows/win32/shell/shell-namespace
# Folder.GetDetailsOf メソッド
# https://learn.microsoft.com/ja-jp/windows/win32/shell/folder-getdetailsof
# 816_ファイルのプロパティ
# http://mrxray.on.coocan.jp/Delphi/plSamples/816_FileProperty.htm
# PowerShellで複数ファイルのプロパティを取得する方法(準備編)
# https://tagook.blogspot.com/2016/10/powershell.html


(Windows Server 2012 R2 での実行結果)
  0:名前
  1:サイズ
  2:項目の種類
  3:更新日時
  4:作成日時
  5:アクセス日時
  6:属性
  7:オフラインの状態
  8:利用可能性
  9:認識された種類
 10:所有者
 11:分類
 12:撮影日時
 13:参加アーティスト
 14:アルバム
 15:年
 16:ジャンル
 17:指揮者
 18:タグ
 19:評価
 20:作成者
 21:タイトル
 22:件名
 23:分類項目
 24:コメント
 25:著作権
 26:トラック番号
 27:長さ
 28:ビット レート
 29:保護
 30:カメラのモデル
 31:大きさ
 32:カメラの製造元
 33:会社
 34:ファイルの説明
 35:プログラム名
 36:継続時間
 37:オンライン
 38:再帰
 39:場所
 40:任意出席者アドレス
 41:任意出席者
 42:開催者住所
 43:開催者名
 44:アラーム時刻
 45:必須出席者アドレス
 46:必須出席者
 47:リソース
 48:会議の状態
 49:空き時間情報
 50:合計サイズ
 51:アカウント名
 52:進捗状況
 53:コンピューター
 54:記念日
 55:秘書の名前
 56:秘書の電話
 57:誕生日
 58:住所 (会社)
 59:市 (会社)
 60:国/地域 (会社)
 61:私書箱 (会社)
 62:郵便番号 (会社)
 63:都道府県 (会社)
 64:番地 (会社)
 65:FAX 番号 (会社)
 66:会社のホーム ページ
 67:会社電話
 68:コールバック番号
 69:自動車電話
 70:子供
 71:会社代表電話
 72:部署
 73:電子メール アドレス
 74:電子メール2
 75:電子メール3
 76:電子メールの一覧
 77:電子メール表示名
 78:表題2
 79:名
 80:氏名
 81:性別
 82:名2
 83:趣味
 84:住所 (自宅)
 85:市 (自宅)
 86:国/地域 (自宅)
 87:私書箱 (自宅)
 88:郵便番号 (自宅)
 89:都道府県 (自宅)
 90:番地 (自宅)
 91:自宅 FAX
 92:自宅電話
 93:IM アドレス
 94:イニシャル
 95:役職
 96:ラベル
 97:姓
 98:住所 (郵送先)
 99:ミドル ネーム
100:携帯電話
101:ニックネーム
102:勤務先所在地
103:住所 (その他)
104:ほかの市区町村
105:他の国/地域
106:他の私書箱
107:他の郵便番号
108:他の都道府県
109:他の番地
110:ポケットベル
111:肩書き
112:市区町村 (郵送先)
113:国/地域
114:私書箱 (郵送先)
115:郵便番号 (郵送先)
116:都道府県
117:番地 (郵送先)
118:プライマリ電子メール
119:通常の電話
120:職業
121:配偶者
122:サフィックス
123:TTY/TTD 電話
124:テレックス
125:Web ページ
126:内容の状態
127:内容の種類
128:取得日時
129:アーカイブ日時
130:完了日
131:デバイス カテゴリ
132:接続済み
133:探索方法
134:フレンドリ名
135:ローカル コンピューター
136:製造元
137:モデル
138:ペアリング済み
139:クラス
140:状態
141:状態
142:クライアント ID
143:共同作成者
144:コンテンツの作成日時
145:前回印刷日
146:前回保存日時
147:事業部
148:ドキュメント ID
149:ページ数
150:スライド
151:総編集時間
152:単語数
153:期限
154:終了日
155:ファイル数
156:ファイル拡張子
157:ファイル名
158:ファイル バージョン
159:フラグの色
160:フラグの状態
161:空き領域
162:
163:
164:共有の種類
165:ビットの深さ
166:水平方向の解像度
167:幅
168:垂直方向の解像度
169:高さ
170:重要度
171:添付
172:削除
173:暗号化の状態
174:フラグの有無
175:終了済
176:未完了
177:開封の状態
178:共有
179:製作者
180:日付時刻
181:フォルダー名
182:フォルダーのパス
183:フォルダー
184:参加者
185:パス
186:場所ごと
187:種類
188:連絡先の名
189:履歴の種類
190:言語
191:最終表示日
192:説明
193:リンクの状態
194:リンク先
195:URL
196:
197:メディアの作成日時
198:リリース日
199:エンコード方式
200:エピソード番号
201:プロデューサー
202:発行元
203:シーズン番号
204:サブタイトル
205:ユーザー Web URL
206:作者
207:
208:添付ファイル
209:BCC アドレス
210:BCC
211:CC アドレス
212:CC
213:会話 ID
214:受信日時
215:送信日時
216:送信元アドレス
217:差出人
218:添付ファイルの有無
219:送信者アドレス
220:送信者名
221:ストア
222:送信先アドレス
223:To do タイトル
224:宛先
225:経費情報
226:アルバムのアーティスト
227:アルバム アーティストで並べ替え
228:アルバム ID
229:アルバムで並べ替え
230:参加アーティストで並べ替え
231:ビート数/分
232:作曲者
233:作曲者で並べ替え
234:イニシャル キー
235:コンパイルの一部
236:雰囲気
237:セットのパート
238:期間
239:色
240:保護者による制限
241:保護者による制限の理由
242:使用領域
243:EXIF バージョン
244:イベント
245:露出補正
246:露出プログラム
247:露出時間
248:絞り値
249:フラッシュ モード
250:焦点距離
251:35mm 焦点距離
252:ISO 速度
253:レンズ メーカー
254:レンズ モデル
255:光源
256:最大絞り
257:測光モード
258:向き
259:人物
260:プログラムのモード
261:彩度
262:対象の距離
263:ホワイト バランス
264:優先度
265:プロジェクト
266:チャンネル番号
267:この回のタイトル
268:字幕
269:再放映
270:SAP
271:放送日
272:プログラムの説明
273:記録時間
274:ステーション コール サイン
275:局名
276:概要
277:抜粋
278:自動要約
279:検索のランキング
280:秘密度
281:共有ユーザー
282:共有状態
283:
284:製品名
285:製品バージョン
286:サポートのリンク
287:ソース
288:開始日
289:共有中
290:課金情報
291:完了
292:仕事の所有者
293:タイトルで並べ替え
294:総ファイル サイズ
295:商標
296:ビデオ圧縮
297:ディレクター
298:データ速度
299:フレーム高
300:フレーム率
301:フレーム幅
302:ビデオの向き
303:総ビット レート
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:


(Windows Server 2016 での実行結果)
  0:名前
  1:サイズ
  2:項目の種類
  3:更新日時
  4:作成日時
  5:アクセス日時
  6:属性
  7:オフラインの状態
  8:利用可能性
  9:認識された種類
 10:所有者
 11:分類
 12:撮影日時
 13:参加アーティスト
 14:アルバム
 15:年
 16:ジャンル
 17:指揮者
 18:タグ
 19:評価
 20:作成者
 21:タイトル
 22:件名
 23:分類項目
 24:コメント
 25:著作権
 26:トラック番号
 27:長さ
 28:ビット レート
 29:保護
 30:カメラのモデル
 31:大きさ
 32:カメラの製造元
 33:会社
 34:ファイルの説明
 35:プログラム名
 36:継続時間
 37:オンライン
 38:再帰
 39:場所
 40:任意出席者アドレス
 41:任意出席者
 42:開催者住所
 43:開催者名
 44:アラーム時刻
 45:必須出席者アドレス
 46:必須出席者
 47:リソース
 48:会議の状態
 49:空き時間情報
 50:合計サイズ
 51:アカウント名
 52:
 53:進捗状況
 54:コンピューター
 55:記念日
 56:秘書の名前
 57:秘書の電話
 58:誕生日
 59:住所 (会社)
 60:市 (会社)
 61:国/地域 (会社)
 62:私書箱 (会社)
 63:郵便番号 (会社)
 64:都道府県 (会社)
 65:番地 (会社)
 66:FAX 番号 (会社)
 67:会社のホーム ページ
 68:会社電話
 69:コールバック番号
 70:自動車電話
 71:子供
 72:会社代表電話
 73:部署
 74:電子メール アドレス
 75:電子メール2
 76:電子メール3
 77:電子メールの一覧
 78:電子メール表示名
 79:表題2
 80:名
 81:氏名
 82:性別
 83:名2
 84:趣味
 85:住所 (自宅)
 86:市 (自宅)
 87:国/地域 (自宅)
 88:私書箱 (自宅)
 89:郵便番号 (自宅)
 90:都道府県 (自宅)
 91:番地 (自宅)
 92:自宅 FAX
 93:自宅電話
 94:IM アドレス
 95:イニシャル
 96:役職
 97:ラベル
 98:姓
 99:住所 (郵送先)
100:ミドル ネーム
101:携帯電話
102:ニックネーム
103:勤務先所在地
104:住所 (その他)
105:ほかの市区町村
106:他の国/地域
107:他の私書箱
108:他の郵便番号
109:他の都道府県
110:他の番地
111:ポケットベル
112:肩書き
113:市区町村 (郵送先)
114:国/地域
115:私書箱 (郵送先)
116:郵便番号 (郵送先)
117:都道府県
118:番地 (郵送先)
119:プライマリ電子メール
120:通常の電話
121:職業
122:配偶者
123:サフィックス
124:TTY/TTD 電話
125:テレックス
126:Web ページ
127:内容の状態
128:内容の種類
129:取得日時
130:アーカイブ日時
131:完了日
132:デバイス カテゴリ
133:接続済み
134:探索方法
135:フレンドリ名
136:ローカル コンピューター
137:製造元
138:モデル
139:ペアリング済み
140:クラス
141:状態
142:状態
143:クライアント ID
144:共同作成者
145:コンテンツの作成日時
146:前回印刷日
147:前回保存日時
148:事業部
149:ドキュメント ID
150:ページ数
151:スライド
152:総編集時間
153:単語数
154:期限
155:終了日
156:ファイル数
157:ファイル拡張子
158:ファイル名
159:ファイル バージョン
160:フラグの色
161:フラグの状態
162:空き領域
163:
164:
165:グループ
166:共有の種類
167:ビットの深さ
168:水平方向の解像度
169:幅
170:垂直方向の解像度
171:高さ
172:重要度
173:添付
174:削除
175:暗号化の状態
176:フラグの有無
177:終了済
178:未完了
179:開封の状態
180:共有
181:製作者
182:日付時刻
183:フォルダー名
184:フォルダーのパス
185:フォルダー
186:参加者
187:パス
188:場所ごと
189:種類
190:連絡先の名
191:履歴の種類
192:言語
193:最終表示日
194:説明
195:リンクの状態
196:リンク先
197:URL
198:
199:
200:
201:メディアの作成日時
202:リリース日
203:エンコード方式
204:エピソード番号
205:プロデューサー
206:発行元
207:シーズン番号
208:サブタイトル
209:ユーザー Web URL
210:作者
211:
212:添付ファイル
213:BCC アドレス
214:BCC
215:CC アドレス
216:CC
217:会話 ID
218:受信日時
219:送信日時
220:送信元アドレス
221:差出人
222:添付ファイルの有無
223:送信者アドレス
224:送信者名
225:ストア
226:送信先アドレス
227:To do タイトル
228:宛先
229:経費情報
230:アルバムのアーティスト
231:アルバム アーティストで並べ替え
232:アルバム ID
233:アルバムで並べ替え
234:参加アーティストで並べ替え
235:ビート数/分
236:作曲者
237:作曲者で並べ替え
238:ディスク
239:イニシャル キー
240:コンパイルの一部
241:雰囲気
242:セットのパート
243:期間
244:色
245:保護者による制限
246:保護者による制限の理由
247:使用領域
248:EXIF バージョン
249:イベント
250:露出補正
251:露出プログラム
252:露出時間
253:絞り値
254:フラッシュ モード
255:焦点距離
256:35mm 焦点距離
257:ISO 速度
258:レンズ メーカー
259:レンズ モデル
260:光源
261:最大絞り
262:測光モード
263:向き
264:人物
265:プログラムのモード
266:彩度
267:対象の距離
268:ホワイト バランス
269:優先度
270:プロジェクト
271:チャンネル番号
272:この回のタイトル
273:字幕
274:再放映
275:SAP
276:放送日
277:プログラムの説明
278:記録時間
279:ステーション コール サイン
280:局名
281:概要
282:抜粋
283:自動要約
284:関連度
285:ファイルの所有権
286:秘密度
287:共有ユーザー
288:共有状態
289:
290:製品名
291:製品バージョン
292:サポートのリンク
293:ソース
294:開始日
295:共有中
296:同期状況
297:課金情報
298:完了
299:仕事の所有者
300:タイトルで並べ替え
301:総ファイル サイズ
302:商標
303:ビデオ圧縮
304:ディレクター
305:データ速度
306:フレーム高
307:フレーム率
308:フレーム幅
309:ビデオの向き
310:総ビット レート
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:


(Windows 10、Windows Server 2019 での実行結果)
  0:名前
  1:サイズ
  2:項目の種類
  3:更新日時
  4:作成日時
  5:アクセス日時
  6:属性
  7:オフラインの状態
  8:利用可能性
  9:認識された種類
 10:所有者
 11:分類
 12:撮影日時
 13:参加アーティスト
 14:アルバム
 15:年
 16:ジャンル
 17:指揮者
 18:タグ
 19:評価
 20:作成者
 21:タイトル
 22:件名
 23:分類項目
 24:コメント
 25:著作権
 26:トラック番号
 27:長さ
 28:ビット レート
 29:保護
 30:カメラのモデル
 31:大きさ
 32:カメラの製造元
 33:会社
 34:ファイルの説明
 35:マスター キーワード
 36:マスター キーワード
 37:
 38:
 39:
 40:
 41:
 42:プログラム名
 43:継続時間
 44:オンライン
 45:再帰
 46:場所
 47:任意出席者アドレス
 48:任意出席者
 49:開催者住所
 50:開催者名
 51:アラーム時刻
 52:必須出席者アドレス
 53:必須出席者
 54:リソース
 55:会議の状態
 56:空き時間情報
 57:合計サイズ
 58:アカウント名
 59:
 60:進捗状況
 61:コンピューター
 62:記念日
 63:秘書の名前
 64:秘書の電話
 65:誕生日
 66:住所 (会社)
 67:市 (会社)
 68:国/地域 (会社)
 69:私書箱 (会社)
 70:郵便番号 (会社)
 71:都道府県 (会社)
 72:番地 (会社)
 73:FAX 番号 (会社)
 74:会社のホーム ページ
 75:会社電話
 76:コールバック番号
 77:自動車電話
 78:子供
 79:会社代表電話
 80:部署
 81:電子メール アドレス
 82:電子メール2
 83:電子メール3
 84:電子メールの一覧
 85:電子メール表示名
 86:表題2
 87:名
 88:氏名
 89:性別
 90:名2
 91:趣味
 92:住所 (自宅)
 93:市 (自宅)
 94:国/地域 (自宅)
 95:私書箱 (自宅)
 96:郵便番号 (自宅)
 97:都道府県 (自宅)
 98:番地 (自宅)
 99:自宅 FAX
100:自宅電話
101:IM アドレス
102:イニシャル
103:役職
104:ラベル
105:姓
106:住所 (郵送先)
107:ミドル ネーム
108:携帯電話
109:ニックネーム
110:勤務先所在地
111:住所 (その他)
112:ほかの市区町村
113:他の国/地域
114:他の私書箱
115:他の郵便番号
116:他の都道府県
117:他の番地
118:ポケットベル
119:肩書き
120:市区町村 (郵送先)
121:国/地域
122:私書箱 (郵送先)
123:郵便番号 (郵送先)
124:都道府県
125:番地 (郵送先)
126:プライマリ電子メール
127:通常の電話
128:職業
129:配偶者
130:サフィックス
131:TTY/TTD 電話
132:テレックス
133:Web ページ
134:内容の状態
135:内容の種類
136:取得日時
137:アーカイブ日時
138:完了日
139:デバイス カテゴリ
140:接続済み
141:探索方法
142:フレンドリ名
143:ローカル コンピューター
144:製造元
145:モデル
146:ペアリング済み
147:クラス
148:状態
149:状態
150:クライアント ID
151:共同作成者
152:コンテンツの作成日時
153:前回印刷日
154:前回保存日時
155:事業部
156:ドキュメント ID
157:ページ数
158:スライド
159:総編集時間
160:単語数
161:期限
162:終了日
163:ファイル数
164:ファイル拡張子
165:ファイル名
166:ファイル バージョン
167:フラグの色
168:フラグの状態
169:空き領域
170:
171:
172:グループ
173:共有の種類
174:ビットの深さ
175:水平方向の解像度
176:幅
177:垂直方向の解像度
178:高さ
179:重要度
180:添付
181:削除
182:暗号化の状態
183:フラグの有無
184:終了済
185:未完了
186:開封の状態
187:共有
188:製作者
189:日付時刻
190:フォルダー名
191:フォルダーのパス
192:フォルダー
193:参加者
194:パス
195:場所ごと
196:種類
197:連絡先の名
198:履歴の種類
199:言語
200:最終表示日
201:説明
202:リンクの状態
203:リンク先
204:URL
205:
206:
207:
208:メディアの作成日時
209:リリース日
210:エンコード方式
211:エピソード番号
212:プロデューサー
213:発行元
214:シーズン番号
215:サブタイトル
216:ユーザー Web URL
217:作者
218:
219:添付ファイル
220:BCC アドレス
221:BCC
222:CC アドレス
223:CC
224:会話 ID
225:受信日時
226:送信日時
227:送信元アドレス
228:差出人
229:添付ファイルの有無
230:送信者アドレス
231:送信者名
232:ストア
233:送信先アドレス
234:To do タイトル
235:宛先
236:経費情報
237:アルバムのアーティスト
238:アルバム アーティストで並べ替え
239:アルバム ID
240:アルバムで並べ替え
241:参加アーティストで並べ替え
242:ビート数/分
243:作曲者
244:作曲者で並べ替え
245:ディスク
246:イニシャル キー
247:コンパイルの一部
248:雰囲気
249:セットのパート
250:期間
251:色
252:保護者による制限
253:保護者による制限の理由
254:使用領域
255:EXIF バージョン
256:イベント
257:露出補正
258:露出プログラム
259:露出時間
260:絞り値
261:フラッシュ モード
262:焦点距離
263:35mm 焦点距離
264:ISO 速度
265:レンズ メーカー
266:レンズ モデル
267:光源
268:最大絞り
269:測光モード
270:向き
271:人物
272:プログラムのモード
273:彩度
274:対象の距離
275:ホワイト バランス
276:優先度
277:プロジェクト
278:チャンネル番号
279:この回のタイトル
280:字幕
281:再放映
282:SAP
283:放送日
284:プログラムの説明
285:記録時間
286:ステーション コール サイン
287:局名
288:概要
289:抜粋
290:自動要約
291:関連度
292:ファイルの所有権
293:秘密度
294:共有ユーザー
295:共有状態
296:
297:製品名
298:製品バージョン
299:サポートのリンク
300:ソース
301:開始日
302:共有中
303:可用性の状態
304:状態
305:課金情報
306:完了
307:仕事の所有者
308:タイトルで並べ替え
309:総ファイル サイズ
310:商標
311:ビデオ圧縮
312:ディレクター
313:データ速度
314:フレーム高
315:フレーム率
316:フレーム幅
317:球形
318:ステレオ
319:ビデオの向き
320:総ビット レート
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:

(Windows 11 での実行結果)
  0:名前
  1:サイズ
  2:項目の種類
  3:更新日時
  4:作成日時
  5:アクセス日時
  6:属性
  7:オフラインの状態
  8:利用可能性
  9:認識された種類
 10:所有者
 11:分類
 12:撮影日時
 13:参加アーティスト
 14:アルバム
 15:年
 16:ジャンル
 17:指揮者
 18:タグ
 19:評価
 20:作成者
 21:タイトル
 22:件名
 23:分類項目
 24:コメント
 25:著作権
 26:トラック番号
 27:長さ
 28:ビット レート
 29:保護
 30:カメラのモデル
 31:大きさ
 32:カメラの製造元
 33:会社
 34:ファイルの説明
 35:マスター キーワード
 36:マスター キーワード
 37:
 38:
 39:
 40:
 41:
 42:プログラム名
 43:継続時間
 44:オンライン
 45:再帰
 46:場所
 47:任意出席者アドレス
 48:任意出席者
 49:開催者住所
 50:開催者名
 51:アラーム時刻
 52:必須出席者アドレス
 53:必須出席者
 54:リソース
 55:会議の状態
 56:空き時間情報
 57:合計サイズ
 58:アカウント名
 59:
 60:進捗状況
 61:コンピューター
 62:記念日
 63:秘書の名前
 64:秘書の電話
 65:誕生日
 66:住所 (会社)
 67:市 (会社)
 68:国/地域 (会社)
 69:私書箱 (会社)
 70:郵便番号 (会社)
 71:都道府県 (会社)
 72:番地 (会社)
 73:FAX 番号 (会社)
 74:会社のホーム ページ
 75:会社電話
 76:コールバック番号
 77:自動車電話
 78:子供
 79:会社代表電話
 80:部署
 81:電子メール アドレス
 82:電子メール2
 83:電子メール3
 84:電子メールの一覧
 85:電子メール表示名
 86:表題2
 87:名
 88:氏名
 89:性別
 90:名2
 91:趣味
 92:住所 (自宅)
 93:市 (自宅)
 94:国/地域 (自宅)
 95:私書箱 (自宅)
 96:郵便番号 (自宅)
 97:都道府県 (自宅)
 98:番地 (自宅)
 99:自宅 FAX
100:自宅電話
101:IM アドレス
102:イニシャル
103:役職
104:ラベル
105:姓
106:住所 (郵送先)
107:ミドル ネーム
108:携帯電話
109:ニックネーム
110:勤務先所在地
111:住所 (その他)
112:ほかの市区町村
113:他の国/地域
114:他の私書箱
115:他の郵便番号
116:他の都道府県
117:他の番地
118:ポケットベル
119:肩書き
120:市区町村 (郵送先)
121:国/地域
122:私書箱 (郵送先)
123:郵便番号 (郵送先)
124:都道府県
125:番地 (郵送先)
126:プライマリ電子メール
127:通常の電話
128:職業
129:配偶者
130:サフィックス
131:TTY/TTD 電話
132:テレックス
133:Web ページ
134:内容の状態
135:内容の種類
136:取得日時
137:アーカイブ日時
138:完了日
139:デバイス カテゴリ
140:接続済み
141:探索方法
142:フレンドリ名
143:ローカル コンピューター
144:製造元
145:モデル
146:ペアリング済み
147:クラス
148:状態
149:状態
150:クライアント ID
151:共同作成者
152:コンテンツの作成日時
153:前回印刷日
154:前回保存日時
155:事業部
156:ドキュメント ID
157:ページ数
158:スライド
159:総編集時間
160:単語数
161:期限
162:終了日
163:ファイル数
164:ファイル拡張子
165:ファイル名
166:ファイル バージョン
167:フラグの色
168:フラグの状態
169:空き領域
170:
171:
172:グループ
173:共有の種類
174:ビットの深さ
175:水平方向の解像度
176:幅
177:垂直方向の解像度
178:高さ
179:重要度
180:添付
181:削除
182:暗号化の状態
183:フラグの有無
184:終了済
185:未完了
186:開封の状態
187:共有
188:製作者
189:日付時刻
190:フォルダー名
191:ファイルの場所
192:フォルダー
193:参加者
194:パス
195:場所ごと
196:種類
197:連絡先の名
198:履歴の種類
199:言語
200:最終表示日
201:説明
202:リンクの状態
203:リンク先
204:URL
205:
206:
207:
208:メディアの作成日時
209:リリース日
210:エンコード方式
211:エピソード番号
212:プロデューサー
213:発行元
214:シーズン番号
215:サブタイトル
216:ユーザー Web URL
217:作者
218:
219:添付ファイル
220:BCC アドレス
221:BCC
222:CC アドレス
223:CC
224:会話 ID
225:受信日時
226:送信日時
227:送信元アドレス
228:差出人
229:添付ファイルの有無
230:送信者アドレス
231:送信者名
232:ストア
233:送信先アドレス
234:To do タイトル
235:宛先
236:経費情報
237:アルバムのアーティスト
238:アルバム アーティストで並べ替え
239:アルバム ID
240:アルバムで並べ替え
241:参加アーティストで並べ替え
242:ビート数/分
243:作曲者
244:作曲者で並べ替え
245:ディスク
246:イニシャル キー
247:コンパイルの一部
248:雰囲気
249:セットのパート
250:期間
251:色
252:保護者による制限
253:保護者による制限の理由
254:使用領域
255:EXIF バージョン
256:イベント
257:露出補正
258:露出プログラム
259:露出時間
260:絞り値
261:フラッシュ モード
262:焦点距離
263:35mm 焦点距離
264:ISO 速度
265:レンズ メーカー
266:レンズ モデル
267:光源
268:最大絞り
269:測光モード
270:向き
271:人物
272:プログラムのモード
273:彩度
274:対象の距離
275:ホワイト バランス
276:優先度
277:プロジェクト
278:チャンネル番号
279:この回のタイトル
280:字幕
281:再放映
282:SAP
283:放送日
284:プログラムの説明
285:記録時間
286:ステーション コール サイン
287:局名
288:概要
289:抜粋
290:自動要約
291:関連度
292:ファイルの所有権
293:秘密度
294:共有ユーザー
295:共有状態
296:
297:製品名
298:製品バージョン
299:サポートのリンク
300:ソース
301:開始日
302:共有中
303:可用性の状態
304:状態
305:課金情報
306:完了
307:仕事の所有者
308:タイトルで並べ替え
309:総ファイル サイズ
310:商標
311:ビデオ圧縮
312:ディレクター
313:データ速度
314:フレーム高
315:フレーム率
316:フレーム幅
317:球形
318:ステレオ
319:ビデオの向き
320:総ビット レート
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:



Excelファイルのページ数を数えるスクリプト

################################################################################
# 初期化
################################################################################
# Application オブジェクト (Excel)の作成
$excel = New-Object -ComObject Excel.Application;
# Excelアプリケーションを非表示に設定する
$excel.Visible = $false;
# 警告やメッセージを非表示に設定する
$excel.DisplayAlerts = $false;
# プリンターとの通信を無効に設定する
$excel.PrintCommunication = $false;

# Workbooks コレクションを取得する
$workbooks = $excel.Workbooks;


################################################################################
# Excelファイルリストの取得
################################################################################
$excelFileLists = @();
$excelFileLists = Get-Content -Encoding default excelFileLists.txt;

foreach ($excelFile in $excelFileLists) {

  "-" * 80;
  "Excelファイル : {0}" -f $excelFile;

  # Excelブックを開く(Workbook オブジェクトを取得する)
  $book = $workbooks.Open($excelFile);

  # 共有ブックのユーザーの個人用ビューに印刷設定が含まれないように設定する
  $book.PersonalViewPrintSettings = $false

  # WorkSheets コレクションを取得する
  $workSheets = $book.WorkSheets;

  # WorkSheetsの数を取得する
  $workSheetsCount = $workSheets.Count;

  # WorkSheetsの数だけ繰り返し処理をする
  for ($i = 1; $i -le $workSheetsCount; $i++) {

    # Worksheet オブジェクトを取得する
    $workSheet = $book.Sheets[$i];

    # PageSetup オブジェクトを取得する
    # PageSetup オブジェクトとは、ページ レイアウトの設定全体を表すオブジェクトである
    $pageSetup = $workSheet.PageSetup;

    # Pages コレクションを取得する
    $pages = $pageSetup.Pages;

    # ページ数を取得する
    $pageCount = $pages.Count;

    # ワークシート名を取得する
    $sheetName = $workSheet.Name;

    "シート名 : {0}, ページ数 : {1}" -f $sheetName, $pageCount

    # for文の中で取得したオブジェクトを解放する
    [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($pages);
    [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($pageSetup);
    [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($workSheet);

    $pages = $null;
    $pageSetup = $null;
    $workSheet = $null;
  }

  # Excelブックを閉じる
  [void]$book.Close();


  [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($workSheets);
  [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book);

  $workSheets = $null
  $book = $null
}


################################################################################
# 後処理
################################################################################

[void]$excel.Quit();

[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbooks);
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

$workbooks = $null
$excel = $null

[GC]::Collect()


# 参考URL
# PowershellでExcelファイルの印刷ページ数を取得する
# https://mk-55.hatenablog.com/entry/2020/04/13/083000
# Application オブジェクト (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.application(object)
# Application.Workbooks プロパティ (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.workbooks
# Workbooks.Open メソッド (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbooks.open
# Workbook オブジェクト (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbook
# Workbook.Worksheets プロパティ (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbook.worksheets
# Workbook.Sheets プロパティ (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbook.sheets
# Worksheet.PageSetup プロパティ (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.worksheet.pagesetup
# PageSetup オブジェクト (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.pagesetup
# PageSetup.Pages プロパティ (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.pagesetup.pages
# Pages オブジェクト (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.pages
# Pages.Count プロパティ (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.pages.count
#
# Worksheet.Name プロパティ (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.worksheet.name
#
# Application.PrintCommunication プロパティ (Excel)
# https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.printcommunication

Wordファイルのページ数を数えるスクリプト(Shell.Application COMオブジェクトを使用する)

################################################################################
# 初期処理
################################################################################
# Shell objectを作成する
$objShell = New-Object -ComObject Shell.Application;


################################################################################
# Wordファイルリストの取得
################################################################################
$wordFileLists = @();
$wordFileLists = Get-Content -Encoding default wordFileLists.txt;

# ヘッダーの表示
"wordファイル名}, ページ数"

foreach ($wordFile in $wordFileLists) {

  # フォルダ名を取得する
  $folderName = [System.IO.Path]::GetDirectoryName($wordFile);
  # ファイル名を取得する
  $fileName = [System.IO.Path]::GetFileName($wordFile);

  # Folder オブジェクトを取得する
  $objFolder = $objShell.namespace($folderName);
  # FolderItem オブジェクトを取得する
  $item = $objFolder.ParseName($fileName);

  # ページ数を表示する
  $pageCount = $objFolder.getDetailsOf($item, 157);
  # wordファイル名(絶対パス)とページ数の表示
  "{0},{1}" -f $wordFile, $pageCount;

  [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($item);
  [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($objFolder);
}

################################################################################
# 後処理
################################################################################
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($objShell)
[GC]::Collect()


# 参考URL
# 大量のWordファイルのページ数を簡単に集計する方法(Powershell)
# http://blog.livedoor.jp/ryanorano/archives/30060801.html
# PowerShell の GetDetailsOf を使ってファイルの詳細プロパティを取得する
# https://neos21.net/blog/2019/11/11-01.html
# Shell.Application プロパティ
# https://learn.microsoft.com/ja-jp/windows/win32/shell/shell-application
# Shell.NameSpace メソッド
# https://learn.microsoft.com/ja-jp/windows/win32/shell/shell-namespace
# Folder.ParseName メソッド
# https://learn.microsoft.com/ja-jp/windows/win32/shell/folder-parsename
# Folder.GetDetailsOf メソッド
# https://learn.microsoft.com/ja-jp/windows/win32/shell/folder-getdetailsof
# 816_ファイルのプロパティ
# http://mrxray.on.coocan.jp/Delphi/plSamples/816_FileProperty.htm
# PowerShellで複数ファイルのプロパティを取得する方法(準備編)
# https://tagook.blogspot.com/2016/10/powershell.html

# String.Substring メソッド
# https://learn.microsoft.com/ja-jp/dotnet/api/system.string.substring?view=net-7.0
# String.LastIndexOf メソッド
# https://learn.microsoft.com/ja-jp/dotnet/api/system.string.lastindexof?view=net-7.0
# String.Length プロパティ
# https://learn.microsoft.com/ja-jp/dotnet/api/system.string.length?view=net-7.0
# Path.GetDirectoryName メソッド
# https://learn.microsoft.com/ja-jp/dotnet/api/system.io.path.getdirectoryname?view=net-7.0
# Path.GetFileName メソッド
# https://learn.microsoft.com/ja-jp/dotnet/api/system.io.path.getfilename?view=net-7.0
# ファイル プロパティの取得
# https://so-zou.jp/software/tech/programming/c-sharp/stream/file/property.htm
# PowerShellのGetDetailsOf メソッドでプロパティの詳細情報のID番号と項目名を列挙します 
# https://tagook.blogspot.com/2016/11/powershellgetdetailsof-id.html
# GetDetailsOfで参照するためのIndexの設定値 
# https://note.com/rokkoku/n/n60f7eca9ebdb
# GetDetailsOfでファイルのプロパティを取得 OSや環境で番号が変わるからこのuwsで確認する。 
# https://gist.github.com/mareku/dadb9961cecec9e2a543
# Folder.GetDetailsOf メソッド
# https://uwsc.jp/com/shell/folder/getdetailsof/
# 写真の撮影日時を秒まで取得する
# https://dot-sharp.com/get-picturedatetime-seconds/
# GetDetailsOfでファイルプロパティを取得する
# https://dot-sharp.com/net-getdetailsof/


Wordファイルのページ数を数えるスクリプト(Word.Application COMオブジェクトを使用する)

################################################################################
# 定数定義
################################################################################
$ASSEMBLY_NAME_MICROSOFT_OFFICE_INTEROP_WORD = "Microsoft.Office.Interop.Word";
$Loaded_Assembly_Microsoft_Office_Interop_Word = $false;

################################################################################
# 初期処理
################################################################################
$AssemblyLists = @();
# アプリケーション ドメインの実行コンテキストに読み込まれているアセンブリを取得する
$AssemblyLists = [System.AppDomain]::CurrentDomain.GetAssemblies();

foreach ($assembly in $AssemblyLists) {

  # AssemblyNameオブジェクト を取得する
  $assemblyName = $assembly.GetName();
  # アセンブリの簡易名を取得する
  $assemblySimpleName = $assemblyName.Name;

  # すでに、"Microsoft.Office.Interop.Word" アセンブリをロード済みの場合
  if ($ASSEMBLY_NAME_MICROSOFT_OFFICE_INTEROP_WORD.Equals($assemblySimpleName)) {
    $Loaded_Assembly_Microsoft_Office_Interop_Word = $true;
    "$ASSEMBLY_NAME_MICROSOFT_OFFICE_INTEROP_WORD はロード済みです"
    break;
  }
}
$Loaded_Assembly_Microsoft_Office_Interop_Word

if (!$Loaded_Assembly_Microsoft_Office_Interop_Word) {
  Add-Type -AssemblyName $ASSEMBLY_NAME_MICROSOFT_OFFICE_INTEROP_WORD;
  "$ASSEMBLY_NAME_MICROSOFT_OFFICE_INTEROP_WORD をロードしました"
}



# Application オブジェクト (Word)を作成する
$wordApplication = New-Object -ComObject Word.Application;
# Wordアプリケーションを非表示に設定する
$wordApplication.Visible = $false;
# 警告またはメッセージ ボックスを表示しないように設定する。
# $wordApplication.DisplayAlerts = [Microsoft.Office.Interop.Word.WdAlertLevel]::wdAlertsNone;

# Documents コレクションを取得する
$documents = $wordApplication.Documents

################################################################################
# Wordファイルリストの取得
################################################################################
$wordFileLists = @();
$wordFileLists = Get-Content -Encoding default wordFileLists.txt;

# ヘッダーの表示
"wordファイル名, ページ数"

################################################################################
# Wordファイルのページ取得
################################################################################
foreach ($wordFile in $wordFileLists) {

  # 読み取り専用で Wordファイルを開く(Document オブジェクトを取得する)
  $document = $documents.Open($wordFile, [type]::Missing, $true);

  # Range オブジェクトを取得する
  $range = $document.Content;
  # ページ数を取得する
  $pageCount = $range.Information([Microsoft.Office.Interop.Word.WdInformation]::wdNumberOfPagesInDocument);
  # wordファイル名(絶対パス)とページ数の表示
  "{0},{1}" -f $wordFile, $pageCount;

  # Wordファイルを保存せずに閉じる
  $document.Close([Microsoft.Office.Interop.Word.WdSaveOptions]::wdDoNotSaveChanges);

  [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($range);
  [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($document);

  $range = $null;
  $document = $null;
}

################################################################################
# 後処理
################################################################################
[void]$wordApplication.Quit();

[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($documents);
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($wordApplication);

$documents= $null;
$wordApplication = $null;

[GC]::Collect()


# 参考URL
# フォルダ内のファイルのページ数を取得する 
# https://yourpearloyster.com/vba/excelvba/879.html
# 【VBA】Wordファイルのページ数を取得する
# https://excel-vba.work/2021/09/11/%E3%80%90vba%E3%80%91word%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%9A%E3%83%BC%E3%82%B8%E6%95%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/
# Word VBAで総ページ数・ページ番号を取得する
# https://www.relief.jp/docs/word-vba-get-page-number.html
# Useful Powershell commands for Microsoft Word automation: 
# https://www.linkedin.com/pulse/useful-powershell-commands-microsoft-word-automation-korivipadu
# Application.Visible プロパティ (Word)
# https://learn.microsoft.com/ja-jp/office/vba/api/word.application.visible
# Application.DisplayAlerts property (Word)
# https://learn.microsoft.com/en-us/office/vba/api/word.application.displayalerts
# WdAlertLevel 列挙型
# https://learn.microsoft.com/ja-jp/dotnet/api/microsoft.office.interop.word.wdalertlevel?view=word-pia
# Documents オブジェクト (Word)
# https://learn.microsoft.com/ja-jp/office/vba/api/word.documents
# Documents.Open メソッド (Word)
# https://learn.microsoft.com/ja-jp/office/vba/api/word.documents.open
# Document.Content プロパティ (Word)
# https://learn.microsoft.com/ja-jp/office/vba/api/word.document.content
# Range.Information プロパティ (Word)
# https://learn.microsoft.com/ja-jp/office/vba/api/word.range.information
# WdInformation 列挙 (Word)
# https://learn.microsoft.com/ja-jp/office/vba/api/word.wdinformation
#
# AppDomain クラス
# https://learn.microsoft.com/ja-jp/dotnet/api/system.appdomain?view=net-7.0
# AppDomain.GetAssemblies メソッド
# https://learn.microsoft.com/ja-jp/dotnet/api/system.appdomain.getassemblies?view=net-7.0
# Assembly.GetName メソッド
# https://learn.microsoft.com/ja-jp/dotnet/api/system.reflection.assembly.getname?view=net-7.0#system-reflection-assembly-getname
# AssemblyName.Name プロパティ
# https://learn.microsoft.com/ja-jp/dotnet/api/system.reflection.assemblyname.name?view=net-7.0

タグ:

powershell
最終更新:2023年01月30日 00:42