Centrum Skryptów - Systemy Operacyjne

Jak mogę określić właściciela pliku? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w nowej rubryce TechNet’u, w której Skrypciarze odpowiadają na najczęściej zadawane pytania dotyczące używania skryptów podczas administrowania systemami. Jeśli masz jakieś pytania dotyczące tego tematu, nie wahaj zwrócić się z nimi do nas. Napisz na adres scripter@microsoft.com (w jęz. angielskim). Nie możemy obiecać, że odpowiemy na wszystkie pytania. Z pewnością jednak zrobimy wszystko, co w naszej mocy, żeby pomóc Ci w rozwiązaniu problemu.

Jak mogę określić właściciela pliku?

Cześć Skrypciarze! Pytanie

Cześć Skrypciarze! Czy można określić właściciela pliku używając skryptu?

 

Cześć Skrypciarze! Odpowiedź

Cześć BD. Rzeczywiście istnieje taki sposób użycia skryptu, który pozwala na określenie właściciela pliku. To, że być może nie jesteś w stanie uzyskać tej informacji na własną rękę, jest całkowicie zrozumiałe. Istnieją dwa główne interfejsy skryptów, używane do zarządzania plikami: Script Runtime’s FileSystemObject oraz WMI class CIM_DataFile. Biorąc pod uwagę fakt, że żaden z tych interfejsów nie zawiera właściwości bądź metody pozwalającej na określenie właściciela pliku, logiczna konkluzja brzmi: "No cóż, widocznie nie da się tego zrobić."

Ale wiesz jak to jest ze skryptami: pewne rzeczy da się zrobić, chociaż nie zawsze tak, jakbyś się tego spodziewał. W tym wypadku, by określić właściciela pliku musisz użyć klasy CIM_DataFile interfejsu WMI w połączeniu z klasą skojarzeniową (association class) Win32_LogicalFileOwner . Jak zapewne wiesz, klasa LogicalFileSecuritySetting pobiera informacje o zabezpieczeniach z pliku. Nie może jednak podać Ci nazwy właściciela pliku. W tym miejscu swoją użyteczność okazuje Win32_LogicalFileOwner class: pobiera od właściciela pliku identyfikator bezpieczeństwa SID i przekazuje go do klasy Win32_SID. Win32_SID może sprawdzić i podać zarówno nazwę, jak i domenę właściciela.

Zaskoczony? Nic dziwnego; klasy skojarzeniowe (association classes) nie należą do przesadnie intuicyjnych w obsłudze. Na szczęście nie musisz rozumieć, jak działają klasy skojarzeniowe; wystarczy wiedzieć, że po prostu działają. I tak na przykład, poniżej widnieje skrypt, podający nazwę właściciela pliku C:\Scripts\My_scripts.vbs

On Error Resume Next



strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

      & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")



strFile = "C:\Scripts\My_script.vbs"



Set colItems = objWMIService.ExecQuery _

    ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & strFile & "'}" _ 

        & " WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner")



For Each objItem in colItems

    Wscript.Echo objItem.ReferencedDomainName

    Wscript.Echo objItem.AccountName

Next

Wygląda dziwnie, ale zrobi co należy. A jeśli potrzebujesz nazwy właściciela innego pliku? Żaden problem: wystarczy ustawić wartość zmiennej strFile w kompletnej ścieżce do tego pliku.

Nie daj się zwieść nazwom: te dwie klasy mogą być również użyte do określenia właściciela folderu. Na przykład, ten skrypt podaje nazwę właściciela folderu C:\Scripts:

On Error Resume Next



strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

      & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")



strFile = "C:\Scripts"



Set colItems = objWMIService.ExecQuery _

    ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & strFile & "'}" _ 

        & " WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner")



For Each objItem in colItems

    Wscript.Echo objItem.ReferencedDomainName

    Wscript.Echo objItem.AccountName

Next

  Do początku strony  Do początku strony


Centrum Skryptów - Systemy Operacyjne