このブログのアクセスって明らかに平日が多い。
記載した技術情報が役に立ってくれれば幸いなのだが・・・
さて、ファイルの所有者ってとってこれんのか?って話。
とってこれるみたい。
Kameya blog「VBScriptでフォルダ・ファイルの所有者の確認を行う」を参考に、ExcelVBAで作成してみた。
'-----------------------------------------------------
' ファイルの所有者を取得する
' 引数 :ファイルパス(File Only)
'-----------------------------------------------------
Private Function GetOwner(fpath As String) As String
Dim WMIService As Object
Dim objSet As Object
Dim obj As Object
Dim buf As String
'ちゃんと渡してよ!って抜ける
If Len(fpath) = 0 Then Exit Function
Set WMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
buf = ""
'TODO 本当はちゃんとエスケープしないとダメ
Set objSet = WMIService.ExecQuery("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" _
& Replace(fpath, "\", "\\") _
& "'} WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner")
For Each obj In objSet
buf = buf & obj.AccountName & ","
Next
If Len(buf) > 0 Then
GetOwner = Left(buf, Len(buf) - 1)
End If
Set obj = Nothing
Set objSet = Nothing
Set WMIService = Nothing
End Function
参照したサイトだと記載されていなかったのだが、¥マークは二重にしないといけない。
(常識?いや、CとかC++とかC#とか・・・ならともかく、VB書いてるときは頭がBasicモードになってしまい、忘れてしまうのだ。)
フォルダの所有者を確認するときは、WHERE句が変わるはず。