我无法让Powershell StartsWith函数正常工作

时间:2019-03-05 08:58:58

标签: powershell startswith

我正在尝试创建一个Powershell脚本,该脚本仅从“文件夹权限”设置中打印出某些AD组。但是由于某种原因,Powershell无法识别StartsWith函数。

("C:\folder" | get-acl).Access | ForEach-Object { if (($_.IdentityReference).StartsWith("sl_test")) { continue }; $_ }

运行此命令时,对于每个foreach对象,我都会得到与此类似的错误:

  

方法调用失败,因为[System.Security.Principal.NTAccount]不包含名为“ StartsWith”的方法。   在C:\ temp \ test.ps1:1 char:56   +(“ C:\ folder” | get-acl)。 ForEach-Object {if((($ _。IdentityReference).St ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidOperation:(:) [],RuntimeException       + FullyQualifiedErrorId:MethodNotFound

有关如何使其正常工作的任何建议?

3 个答案:

答案 0 :(得分:3)

IdentityReference[System.Security.Principal.NTAccount],具体取决于您的错误消息。

但是.StartWith是String类型的方法。如果您调用方法,Powershell AFAIK不会为您服务。

尝试... ($_.IdentityReference) -match "^sl_test" ...,它应该执行隐式字符串转换。

答案 1 :(得分:1)

如果要使用IdentityReference的字符串表示形式(无论它是NTAccount对象还是SID),都可以引用Value属性:

$_.IdentityReference.Value.StartsWith('sl_test')

答案 2 :(得分:0)

尝试:

Get-Acl -Path "C:\folder" | Select-Object -ExpandProperty Access | Where-Object {$_.IdentityReference -like "sl_test*" }

您可以使用其他| Select-Object -Property XY

自定义输出