Powershell正则表达式匹配并且不匹配Foreach If - 然后不起作用

时间:2017-07-14 14:53:58

标签: regex powershell if-statement

如何获得头衔?

我有这个脚本我一直在做两件基本的事情:a)使用get-ntfsaccess来提取文件夹的安全性然后b)使用输出来查找有组的组成员访问。

$Outfile2 = "C:\Users\local\Documents\GroupMembers.csv"
$Header2 = "GroupName,Member"

Add-Content -Value $Header2 -Path $Outfile2

$RootPath = "p:\city\Department\building"
$Folders = get-childitem2 -directory -recurse -path $RootPath 

foreach ($Folder in $Folders){
   $ACLs = Get-NTFSAccess $Folder.fullname  

   Foreach ($ACL in $ACLs){
   If ($Acl.accounttype -match 'group' -and $acl.Account.accountname -notmatch '^builtin|^NT AUTHORITY\\|^Creator|^AD\\Domain')
   {
   $members = Get-ADGroupMember $acl.Account.accountname.TrimStart("AD\\")
   }
   Foreach ($member in $members) {

   $OutInfo = $ACL.Account.AccountName + "," + $member.samaccountname
   Add-Content -Value $OutInfo -Path $OutFile2
   }
   }}

我希望能够过滤get-ntfsaccess的输出。我想只查找群组'和不是基本组的组(如内置,域管理员等),但我的匹配和不匹配不在脚本中工作。如果我采用完全相同的行并从提示符运行它 - 它可以工作。

NotMatch is true

PS C:\Windows\system32> $acl.Account.accountname -notmatch '^builtin|^NT AUTHORITY\\|^Creator|^AD\\Domain'
True

当作为脚本的一部分运行时 - 不起作用。我的输出包括所有域基本组和用户。我想也最终添加-unique只获得独特的群体,但这部分让我感到难过......

提前致谢...!

2 个答案:

答案 0 :(得分:0)

我成功地做到了这一点:

((dir)[0] | get-acl).access | % { $_.IdentityReference } | ? { $_ -notmatch 'builtin|nt authority' }

我目前无法使用ntfsaccess进行测试,但get-acl的返回IdentityReference很可能是您尝试解析的相同字段。您可以尝试删除您的' ^。我还使用"myDomain\\Domain Admins"进行了测试,并且按预期工作。

答案 1 :(得分:0)

所以我想通了。

三件事 - 1. Trimstart不接受' /'无论我如何逃避'它 2.必须使用get-adgroup来管道get-adgroupmember 3.然后IF被阻止错误,在每次迭代时通过$ ACLs写出每个结果

$Outfile2 = "C:\Users\local\Documents\GroupMembers.csvv"
$Header2 = "GroupName,Member"

Add-Content -Value $Header2 -Path $Outfile2

$RootPath = "p:\city\Department\building"

$Folders = get-childitem2 -directory -recurse -path $RootPath

foreach ($Folder in $Folders){
$ACLs = Get-NTFSAccess $Folder.fullname 

    Foreach ($ACL in $ACLs){
    If ($Acl.accounttype -match 'group' -and $acl.Account.accountname -notmatch '^builtin|^NT AUTHORITY\\|^Creator|^AD\\Domain')
    {$members = Get-adgroup $acl.Account.accountname.substring(3) | Get-ADGroupMember 

    Foreach ($member in $members) {
    $OutInfo = $ACL.account.AccountName + "," + $member.samaccountname
    Add-Content -Value $OutInfo -Path $OutFile2
}}}}