Powershell - 在Active Directory中查找文件所有者

时间:2015-02-27 01:45:16

标签: powershell active-directory powershell-v2.0

如何在Active Directory中查找有关文件所有者的信息?以下操作无效,因为它将Domain \ User解析为Get-ADUser命令

$owner = Get-Acl file.txt | Select-Object Owner | Out-String
Get-ADUser -Identity $owner

我还希望能够查询其他域中的用户,因为默认情况下,Get-ADUser会在您的本地域中查找。

2 个答案:

答案 0 :(得分:1)

Get-ADUser的问题在于它正在寻找你

  

通过其可分辨名称(DN),GUID,安全标识符(SID),安全帐户管理器(SAM)帐户名称或名称来标识用户。

字符串"域\用户名"不适合其中一个预期的。相反,如何做这样的事情:

$domains = @{
    DOMAIN = "dc.domain.local"
}
$file = "F:\temp\Re__.msg"
$fileOwner = Get-Acl $file | Select-Object -ExpandProperty Owner
$account = New-Object -TypeName PSObject -Property @{
    domain = $fileOwner.Split("\")[0]
    username = $fileOwner.Split("\")[1]
}

If($domains.ContainsKey($user.domain)){
    $server = $domains[$user.domain]
    Get-ADUser -Server $server -Identity $user.username
} Else {
    Write-Warning "No matching server for the domain: $($user.domain)"
}

从这些域创建域和dc的哈希表。然后从$file查询所有者。将该所有者拆分为其域和用户名。然后使用$user.domain找到匹配的域控制器来搜索用户。

答案 1 :(得分:1)

您还可以使用.Net Framework获取SID并将其传递给Get-ADUser:

$user = New-Object System.Security.Principal.NTAccount (get-acl 'file.txt').owner
$sid = $user.Translate([System.Security.Principal.SecurityIdentifier]).Value
Get-ADUser $sid