asfファイルの詳細なプロパティをPowershellで得る

# コード

```powershell
# Set-ExecutionPolicy RemoteSigned -Scope Process -Force
# For example $filefullpath = "C:\Hoge\dbhoge.ast" 
### 出力したいファイルのフルパス 詳細を出力するファイル の定義
$filefullpath = "C:\hoge\hoge.asf" #出力したいファイルのフルパス
$detailtextfile = "C:\hoge\detail.txt" #詳細を出力するファイル
$SummeryPropetytxt = "C:\hoge\SummeryPropety.txt" #プロパティの値だけ出力
## 配列等の宣言
$ar = @();
$filename=[system.io.path]::GetFileName($filefullpath)
$foldername=Split-Path -Parent $filefullpath
$hash = @{}
$DetailMax = 321 # Windows 10 
$Shell = New-Object -ComObject Shell.application

##　Shellのフォルダーとファイル
$folder= $shell.NameSpace($foldername)
$file = $folder.ParseName($filename)

##出力開始
for($i = 1; $i -le $DetailMax;$i++){$hash[$i]=$folder.GetDetailsOf($null,$i)}
$get = for($i = 1;$i -le $DetailMax;$i++){ $folder.GetDetailsOf($file,$i)}
$get | Out-String | Out-File $SummeryPropetytxt -Encoding default -Append 
for($i = 1; $i -le $DetailMax;$i++){ $ar+=,,@($i,$folder.GetDetailsOf($null,$i),$folder.GetDetailsOf($file,$i));$arKey+=$folder.GetDetailsOf($null,$i)}
$ar | Out-String | Out-File $detailtextfile -Encoding default -Append 
for($i = 1; $i -le $DetailMax;$i++){
Write-host $filename `t$i `t $hash.item($i) `t $folder.GetDetailsOf($file,$i) 
}
<#
Refference site
[Powershellで多次元配列に要素を追加する時にはまった](https://sevenb.jp/wordpress/ura/2010/09/03/powershell%E3%81%A7%E5%A4%9A%E6%AC%A1%E5%85%83%E9%85%8D%E5%88%97%E3%81%AB%E8%A6%81%E7%B4%A0%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E6%99%82%E3%81%AB%E3%81%AF%E3%81%BE%E3%81%A3%E3%81%9F/)
[コマンドレット説明書【ForEach-Object】の使い方 (PowerShell v5.1)](https://cheshire-wara.com/powershell/ps-help/foreach-object-help/)
[powershellプロパティ抽出について（条件付き）](https://social.technet.microsoft.com/Forums/ja-JP/eadf771e-ef77-47ca-a0a4-1d709df7dc04/powershell1250312525124971248612451252772098612395123881235612390?forum=powershellja)
[タブや改行を文字列値に含める方法](http://bayashita.com/p/entry/show/130)
[第3回 配列の【変更・追加・削除】を30分で攻略！ - PowerShellで配列デビュー](https://cheshire-wara.com/powershell/ps-textbooks/basic-grammar/array-biginner3/)
#今回は画像ファイルのプロパティは読み込めない。動画とは異なっている
[PowerShellのGetDetailsOf メソッドでプロパティの詳細情報のID番号と項目名を列挙します ](https://tagook.blogspot.com/2016/11/powershellgetdetailsof-id.html)
[PowerShellメモ　パス関連操作](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840)
[18.絶対パスからファイル名を取得する](http://hiros-dot.net/PowerShell/file/file18.htm)
[[PowerShell 2.0 入門] 出力をファイルに保存する](http://blog.powershell-from.jp/?p=1021)
[Windows PowerShell 見栄えの良い出力](https://technet.microsoft.com/ja-jp/library/2008.06.windowspowershell.aspx?f=255&MSPPError=-2147217396)
#>
```
#特徴
##画面にわかりやすく出力
Powershellの画面に
ファイル名 番号 プロパティ名 該当ががあれば値
で出力される。
Filename.asf 	296 	 共有状態 	 非共有
Filename.asf 	297 	  	 利用可能
Filename.asf 	298 	 製品名 	 

※出力される番号とプロパティ名は環境によって異なります。

##$arにプロパティの詳細が入る
なので、実行後
Detail.txt
を開く、またはPowershellで
PS C:\何とか>$ar
Enterとすると
このような感じですべてのプロパティの詳細な値が表示される。
Length         : 3
LongLength     : 3
Rank           : 1
SyncRoot       : {319, ステレオ, }
IsReadOnly     : False
IsFixedSize    : True
IsSynchronized : False
Count          : 3

Length         : 3
LongLength     : 3
Rank           : 1
SyncRoot       : {320, ビデオの向き, 0} <ここが番号 プロパティ名 値になる
IsReadOnly     : False
IsFixedSize    : True
IsSynchronized : False
Count          : 3

Length         : 3
LongLength     : 3
Rank           : 1
SyncRoot       : {321, 総ビット レート, ‎1988kbps}
IsReadOnly     : False
IsFixedSize    : True
IsSynchronized : False
Count          : 3


#気づいた点
##タブ区切りにするとき `t$folder.get... としてはいけない
プロパティの名前ではなくなる
`t $folder.get...
タブとの間にスペースを入れる
##プロパティの数がWindows10は増えた
以前は288だったようだが増えている。
しかしいくつあるかははっきりしない。
ここはVersionを無視するには500を設定していいのかもしれない
##動画のタイトルは21
 {21, タイトル, }  
もちろん環境によって違いますが、番号や名前が出力できます。

##プロテクトがかかっていてもプロパティは読める
まあ表示されるから当然とはいえ。

## ファイルチェックは各自で
出力ファイルは出力ごとに削除するか移動してください。
今回は一つのファイルをテストで出力させているので、大量のファイルを出力されるのには向きません。
大量にある場合にはプロパティを絞ることが重要です。しかしそのプロパティの番号、プロパティ名は環境によって違うため、今回のスクリプトを作りました。

## 本当は画面も出力したかったのですが...
なぜかうまくいかなかったので、次の機会に。どうも遅くなるみたいですね。
#Refference site
[Powershellで多次元配列に要素を追加する時にはまった](https://sevenb.jp/wordpress/ura/2010/09/03/powershell%E3%81%A7%E5%A4%9A%E6%AC%A1%E5%85%83%E9%85%8D%E5%88%97%E3%81%AB%E8%A6%81%E7%B4%A0%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E6%99%82%E3%81%AB%E3%81%AF%E3%81%BE%E3%81%A3%E3%81%9F/)
[コマンドレット説明書【ForEach-Object】の使い方 (PowerShell v5.1)](https://cheshire-wara.com/powershell/ps-help/foreach-object-help/)
[powershellプロパティ抽出について（条件付き）](https://social.technet.microsoft.com/Forums/ja-JP/eadf771e-ef77-47ca-a0a4-1d709df7dc04/powershell1250312525124971248612451252772098612395123881235612390?forum=powershellja)
[タブや改行を文字列値に含める方法](http://bayashita.com/p/entry/show/130)
[第3回 配列の【変更・追加・削除】を30分で攻略！ - PowerShellで配列デビュー](https://cheshire-wara.com/powershell/ps-textbooks/basic-grammar/array-biginner3/)
※今回は画像ファイルのプロパティは読み込めない。動画とは異なっている
[PowerShellのGetDetailsOf メソッドでプロパティの詳細情報のID番号と項目名を列挙します ](https://tagook.blogspot.com/2016/11/powershellgetdetailsof-id.html)
[PowerShellメモ　パス関連操作](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840)
[18.絶対パスからファイル名を取得する](http://hiros-dot.net/PowerShell/file/file18.htm)
[[PowerShell 2.0 入門] 出力をファイルに保存する](http://blog.powershell-from.jp/?p=1021)
[Windows PowerShell 見栄えの良い出力](https://technet.microsoft.com/ja-jp/library/2008.06.windowspowershell.aspx?f=255&MSPPError=-2147217396)