2017-09-11 11 views
1

特定のパス内のすべてのフォルダの所有者を検索しようとしています。私は、次のコードを持っている:特定のパス内のすべてのフォルダの所有者を検索

Set objFSO = CreateObject("Scripting.FileSystemObject") 
For Each objFolder In objFSO.GetFolder("C:\Windows").SubFolders 
    strpath = objFolder.Path 
    WScript.Echo strpath 
Next 

私の最終目標は、テキストファイルに指定されたパスからすべてのフォルダのパスとし、所有者を置くことです。

誰かがフォルダの所有者を見つけて、この所有者の名前を変数に入れることができますか?私はこれを使用して既存のコードを改善することができます。

+4

チェック[このページ](https://gallery.technet.microsoft.com/scriptcenter/ccbc8b1f-bc27-4aa7-9826-f4461d9b7e83) – JoSerra

答えて

0

JoSerraがin the commentsと述べたように、WMIクラスWin32_LogicalFileSecuritySettingでファイルまたはフォルダの所有者を取得できます。スクリプトセンターのsample codeはほとんど正確です。しかし、私は、パスの周りに一重引用符の代わりに二重引用符を使用することをお勧めします。

一重引用符(二重引用符とは異なり)はvalid characters in a pathです。単一引用符を含むパスで文wmi.Get("Win32_LogicalFileSecuritySetting.Path='" & path & "'")を呼び出すと、呼び出しは "無効なオブジェクトパス"エラーで失敗します。したがって、二重引用符を使用して、パスにバックスラッシュをエスケープする方がよいでしょう。

path = "C:\some\folder 'with' quotes" 

Function Esc(str) 
    Esc = Replace(str, "\", "\\") 
End Function 

Set wmi = GetObject("winmgmts:") 
Set fs = wmi.Get("Win32_LogicalFileSecuritySetting=""" & Esc(path) & """") 
rc = fs.GetSecurityDescriptor(sd) 

If rc = 0 Then 
    WScript.Echo "Owner: " & sd.Owner.Domain & "\" & sd.Owner.Name 
Else 
    WScript.Echo "Couldn't retrieve security descriptor." 
End If 
関連する問題