powershell - PowerShell 列出链接到文件共享文件夹的组中的用户
问题描述
我有一个特定的 OU,其中包含我们用来控制对文件共享上的一些特定文件夹的访问的组,比如 fileshare1、fileshare2 和 fileshar3。
OU=example2,OU=example1,OU=Groups,DC=domain1,DC=domain2,DC=example,DC=uk
我需要获取一个用户列表,这些用户是在 fileshare1 上使用的组的成员......有没有人有办法做到这一点?是否让powershell循环遍历每个文件夹的安全部分以获取正在使用的组...
对于我需要列出的每个组,文件夹名称和有权访问的人。
我在看谷歌,但有点画空白......
解决方案
您可以尝试以下方法:
$ou = "OU=example2,OU=example1,OU=Groups,DC=domain1,DC=domain2,DC=example,DC=uk"
$groups = Get-ADGroup -Filter * -SearchBase $ou
$fileshare = "\\server\share\"
$folders = Get-ChildItem $fileshare -Directory
foreach($folder in $folders){
$accessRights = Get-Acl -Path $folder
$groupsWithAccess = @()
foreach($group in $accessRights.Access){
$groupName = $group.identityReference.value.split("\")[-1]
$getGroup = $groups | Where-Object {($_.samAccountName -eq $groupName -or $_.name -eq $groupName)}
if($getGroup){
$groupsWithAccess += $getGroup
}
}
$memberObject = @()
foreach($groupWithAccess in $groupsWithAccess){
$members = Get-ADGroupMember -Identity $groupWithAccess.samAccountName | Where-Object {($_.objectClass -eq "user")}
<# Uncomment if you wish to add one layer of nested groups
$nestedGroups = Get-ADGroupMember -Identity $groupWithAccess.samAccountName | Where-Object {($_.objectClass -eq "group")}
foreach($nestedGroup in $nestedGroups){
$members = Get-ADGroupMember -Identity $groupWithAccess.samAccountName | Where-Object {($_.objectClass -eq "user")}
$memberObject += New-Object psobject -Property @{
fileshare = $accessRights.Path.Split("\")[-1]
group = $groupWithAccess.name
members = $members.name -join ";"
}
}
#>
$memberObject += New-Object psobject -Property @{
fileshare = $accessRights.Path.Split("\")[-1]
group = $groupWithAccess.name
members = $members.name -join ";"
}
}
}
$memberObject | Export-CSV -Path "C:\Temp\test.csv" -Delimiter "," -NoTypeInformation
以上将遍历文件夹,获取文件夹的访问权限,将 ou 中的组与访问权限匹配,查询成员,查询嵌套组的成员(注释掉),然后创建一个对象并将其输出到 csv在 C:\Temp\test.csv 中。
您还可以通过删除 Get-Childitem 并在文件夹中丢失 foreach 循环来将其用于单个文件夹。
$ou = "OU=example2,OU=example1,OU=Groups,DC=domain1,DC=domain2,DC=example,DC=uk"
$groups = Get-ADGroup -Filter * -SearchBase $ou
$fileshare = "\\server\fileshare1"
$accessRights = Get-Acl -Path $fileshare
$groupsWithAccess = @()
foreach($group in $accessRights.Access){
$groupName = $group.identityReference.value.split("\")[-1]
$getGroup = $groups | Where-Object {($_.samAccountName -eq $groupName -or $_.name -eq $groupName)}
if($getGroup){
$groupsWithAccess += $getGroup
}
}
$memberObject = @()
foreach($groupWithAccess in $groupsWithAccess){
$members = Get-ADGroupMember -Identity $groupWithAccess.samAccountName | Where-Object {($_.objectClass -eq "user")}
<# Uncomment if you wish to add one layer of nested groups
$nestedGroups = Get-ADGroupMember -Identity $groupWithAccess.samAccountName | Where-Object {($_.objectClass -eq "group")}
foreach($nestedGroup in $nestedGroups){
$members = Get-ADGroupMember -Identity $groupWithAccess.samAccountName | Where-Object {($_.objectClass -eq "user")}
$memberObject += New-Object psobject -Property @{
fileshare = $accessRights.Path.Split("\")[-1]
group = $groupWithAccess.name
members = $members.name -join ";"
}
}
#>
$memberObject += New-Object psobject -Property @{
fileshare = $accessRights.Path.Split("\")[-1]
group = $groupWithAccess.name
members = $members.name -join ";"
}
}
$memberObject | Export-CSV -Path "C:\Temp\test.csv" -Delimiter "," -NoTypeInformation
请,由于您没有显示任何您自己尝试过的代码,请务必阅读此代码并尝试完全理解正在发生的事情。然后根据您的需要进行调整,最后尝试进行测试。祝你好运!
推荐阅读
- firebase - 如何发送有关数据库中数据更改的通知
- javascript - 如何从多个输入文件控件中获取文件?
- javascript - React 路由器 goBack 不会将最后一个位置推入堆栈
- python-3.x - 如何为存储为字典中的值的数据框提供文本键?
- rest - 当前用户与 ID 的 REST 端点
- azureservicebus - 逻辑应用未缩放以匹配 ServiceBus 吞吐量
- html - 表单输入的奇怪 iOS 设备特定问题
- java - 创建通用数组列表时应该首选哪种方式?
- python - 根据 Pandas 中列中的列表值从 DataFrame 中选择行
- aws-appsync - 当 AWS AppSync 使用 Cognito 时如何验证 Lambda 生成的突变