2013-12-11 44 views
0

我仍然使用PowerShell的学习曲线上,我现在有以下脚本:PowerShell的出口ACL权限CSV

$users = Get-Acl $Path | 
     Select-Object -ExpandProperty access | 
      ft identityreference | 
       where { $_.identityreference -like "UK\"} 

$ Path是一个特定份额的服务器上的位置。我目前有一个名为“test”的CSV文件,在同一台服务器上有大约100个共享名(名为“ShareNames”的第一列标题),第二列名为“GroupName”。

我需要更新此脚本以搜索名为“test.csv”的CSV文件中的第一列,并将适当的组权限推送到第二列中的共享位置。我不得不承认,脚本的最后一部分不起作用:(我无法过滤出我们拥有的常用组名,因为我不希望每个共享组的名称都以“(uk \ GRO ...“)

谢谢你的任何指导/帮助

回答

0

我会选择-match超过-like并跳过Format-Table下将过滤的使用正则表达式^UK\\他们的财产IdentityReference将ACE - 我假设'英国'是ACE组内的域名部分:

$user = Get-Acl $path | 
    Select-Object -ExpandProperty access | 
    Where-Object { $_.IdentityReference -match '^UK\\' } 

然后就可以ft根据需要:

$user | Format-Table 

如果需要在CSV养活的路径,可以管的Import-CsvForEach-Object缠上述示例。

Import-Csv test.csv | 
    ForEach-Object { 
    Write-Output "ACEs on $($_.ShareNames) matching 'UK\'" 
    Get-Acl $_.ShareNames | 
     Select-Object -ExpandProperty access | 
     Where-Object { $_.IdentityReference -match '^UK\\' } 
    } 

我还没有你打算如何在输出填充“组名”一栏清楚有可能是与“英国\”开头的组多个条目。

+0

非常感谢您将第一个问题排序过滤组名称。现在我需要从csv读取100个共享名称位置并将结果导出到第二列中的同一个csv文件中。 – Richard

+0

@Phil为了澄清,你想读取CSV,并为每一行执行上面的'Get-Acl',然后将共享和ACE写回CSV? – jscott

+0

我有两列的CSV,第一列有100个共享文件夹的位置,第二列是空的,我想用上面脚本中的所有筛选的安全组填充第二列,您刚才帮我完成了。以上只需要一条路径,我需要编辑并允许它读取所有共享的csv。 – Richard