没有域路径的GET-ACL文件所有者

时间:2017-11-28 20:58:38

标签: powershell acl

我需要一种快速方法来使用GET-ACL拉取文件的所有者,并使用用户名而不是域路径创建变量。试图简单地替换域名不起作用。

<div> 
    <form  method="post" action= "" id = "testing" >
        <input type="hidden" name="tests" id="tests" value="">
        <input type="hidden" name="teste" id="teste" value="">
    </form>
</div>

提供此错误:

$user = GET-ACL $lastImage.FullName | Select Owner
$user = $user.Replace('ANT\', '')

我知道替换字符串是正确的,因为它可以工作:

Method invocation failed because [Selected.System.Security.AccessControl.FileSecurity] does not contain a method named 'Replace'.
At line:1 char:1
+ $user = $user.Replace('ANT\', '')

我也试过使用拆分但没有成功:

$user = 'ANT\username'
$user = $user.Replace('ANT\', '')

这是有效的,但输出包含不需要的标题:

$user = GET-ACL | Select Owner
$user.Split('\')[1]

有没有人知道使用GET-ACL将用户名作为变量的简单方法?如果没有,我应该使用更好的cmdlet吗?

2 个答案:

答案 0 :(得分:2)

改变这个:

$user = GET-ACL $lastImage.FullName | Select Owner

到此:

$user = GET-ACL $lastImage.FullName | Select -ExpandProperty Owner

<强>解释

您正在尝试替换PSCustomObject类型而不是字符串,.Replace()方法是字符串方法,这就是您收到错误does not contain a method named 'Replace'.

的原因

当您添加-ExpandProperty时,您将获得字符串值,然后替换方法将起作用。

请参阅-ExpandPropertyMSDN Blogs

的进一步说明

答案 1 :(得分:0)

$user.Replace('ANT\', '')更改为$user.Owner.Replace('ANT\', '')。因为您正在做的是引用对象的Owner属性。然后,您可以从第一行删除| Select Owner,因为不需要它。

如下:

$user = Get-Acl $lastImage.FullName
$user = $user.Owner.Replace('ANT\', '')