【问题标题】:GET-ACL file owner without domain path没有域路径的 GET-ACL 文件所有者
【发布时间】:2017-11-28 20:58:38
【问题描述】:

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

$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\', '')

我也尝试使用 split 没有成功:

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

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

$user = Get-ChildItem $lastImage.FullName | select @{Name='Owner';E=
{(($_.GetAccessControl().Owner.Split('\'))[1])}}

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

【问题讨论】:

    标签: powershell acl


    【解决方案1】:

    改变这个:

    $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 的进一步解释

    【讨论】:

    • 按照这些思路,Get-Acl | Get-Member 是查看可用内容的好方法,因为有时扩展的字符串不是您想要的。
    【解决方案2】:

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

    如下:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      相关资源
      最近更新 更多