我正在尝试创建一个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
有关如何使其正常工作的任何建议?
答案 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