• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 281
  • Last Modified:

Can someone suggest a command line utility to retrieve Windows file ownership?

The DIR command can return file ownership when one uses the /q argument. But it seems to truncate long user names.

While "dir /q myfile.txt" successfully returns the owner with a short name:
10/13/2011  01:38 PM           355,398 CITNET\Ritu Mishra    myfile.txt

It does not work for a name like Lenny Van Duyvendijk
10/05/2011  12:59 PM               162 CITNET\Lenny Van DuyvenCONTROL_TOTALS_BANK_20110930.TXT

I have not been able to find any combination of DIR command switches to successfully return such a long (and multi-part) last name.

I am looking for a command line/non-GUI utility, since this information will be pulled into another program (Microsoft SQL Server actually).

If there is any way to do this with basic Windows commands that would be preferred as this will be on a production server. We have a lot of controls over the software that we can install in our production environment.

This would be running on Windows Server 2003 at the moment. Although we will be converting to Windows Server 2008 R2 soon.
2 Solutions
LennyGrayAuthor Commented:
Thanks for the quick response. I do not understand how to clearly identify the file owner from the output.

I can parse output if needed. But it is not clear how one would parse the output of the calcs command and directly get the file owner. So how can I directly determine the file owner from the CACLS output?

Maybe PowerShell script? Installable on Win2003, already installed on 2008 R2:
$item = Read-Host ("Provide complete path to the target:")
Get-ChildItem $item | Get-Acl | Select-Object @{n='Path';e={(Get-ChildItem $_.PSPath).FullName}}, Owner

Open in new window

You can also use vbscript to do just that.

'Retrieve owner of a file
Dim strFilename
Set args = WScript.Arguments 
Set objWMIService = GetObject("winmgmts:")
strFilename = args.Item(0)
Set objFileSecuritySettings = objWMIService.Get("Win32_LogicalFileSecuritySetting=" & strFilename & """)
intRetVal = objFileSecuritySettings.GetSecurityDescriptor(objSD)

If intRetVal = 0 Then
    WScript.Echo "File: " & strFilename
    WScript.Echo "Owner: " & objSD.Owner.Domain & "\" & objSD.Owner.Name
    WScript.Echo "Error retrieving security descriptor for file: " & strFilename"
End if

Usage: cscript Owner.vbs c:\temp\somefile.exe

File: c:\temp\somefile.exe
Owner: SomeDomain\SomeOwner
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Certified Penetration Testing

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now