Что нового

[Файловая система] Как получить "Текущий владелец" из свойств файла

---Zak---

Скриптер
Сообщения
455
Репутация
120
Добрый всем день.

Искал, искал, но так и не нашел...

Подскажите, пожалуйста, как получить владельца файла из свойств самого файла или направте на путь истинный - куда копать.

ОС: WinXP, Win7

ЗЫ: WinXP = ПКМ -> Свойства -> Безопасность -> Дополнительно -> Владелец -> "Текущий владелец"

Заранее спасибо
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
---Zak---
Получение свойств файла:
http://www.autoitscript.com/forum/topic/25859-udf-get-extended-file-property/
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Кроме объекта Shell.Application владельца файла знает и WMI :smile: (не говоря уж про dir /q):
Код:
$sCompName = "."
$sFileName = "c:\logon.log"
$objWMIService = ObjGet("winmgmts:" _
      & "{impersonationLevel=impersonate}!\\" & $sCompName & "\root\cimv2")
$colItems = $objWMIService.ExecQuery _
    ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & $sFileName & "'}" _
        & " WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner")
For $objItem in $colItems
 ConsoleWrite("Owner: " & $objItem.AccountName & @LF)
 ConsoleWrite("Domain: " & $objItem.ReferencedDomainName & @LF)
Next
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 erlik
В этом не силен, но сразу вопрос - если файл находится в расшаренной папке на удаленном ПК.

Тогда что надо прописать:
Код:
$sCompName = "."
$sFileName = "c:\logon.log"


ЗЫ: права доступа к папке только на чтение есть.
 

erlik

Продвинутый
Сообщения
317
Репутация
84
---Zak---
В подключении к удаленным системам я также не силен.
Но если pass не требуется, то думаю будет достаточно указать имя компьютера, к которому подключаешься. То есть вместо '.' (псеводним для локальной системы), 'имя_компа'. Но если для входа нужен пароль, тогда нужно использовать вместо моникера winmgmts объект SWbemLocator
Пример подключения:
Код:
$sFileName = "c:\logon.log"; какой формат для пути файла здесь нужен - к сожалению,
;уверенно сказать не могу - попробуй выяснить сам.
; в формате UNC, если я не ошибаюсь, должно быть: \\имя_сервера\имя_общего_ресурса\и т.д
$sCompName = "Computer"
$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
$objWMIService = $objSWbemLocator.ConnectServer($sCompName,'Root\CIMV2', 'учетная запись для входа в формате Domain\Username', 'пароль')
; полный набор параметров (все лишние можно опускать) - 
;objSWbemLocator.ConnectServer([strServer], [strNamespace], [strUser], [strPassword], [strLocale], [strAuthority], [iSecurityFlags], [objWbemNamedValueSet])
$colItems = $objWMIService.ExecQuery _
    ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & $sFileName & "'}" _
        & " WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner")
For $objItem in $colItems
 ConsoleWrite("Owner: " & $objItem.AccountName & @LF)
 ConsoleWrite("Domain: " & $objItem.ReferencedDomainName & @LF)
Next

PS: Почитать подробнее можно здесь http://www.script-coding.com/WMI.html
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 erlik
Спасибо за информацию... будет время посмотрю))))
 
Верх