我正在尝试查询多个具有相同名称的OU中的所有用户。获取SamAccountName
属性,然后在该位置的特定位置检查文件。
这是我到目前为止所拥有的:
$ous = Get-ADOrganizationalUnit -Filter "Name -eq 'Admin-User-Accounts'"
$ous | ForEach-Object {
$AccountName = Get-ADUser -Filter * -SearchBase $_.DistinguishedName |
Select SamAccountName
Test-Path "\\domain.net\SYSVOL\domain.net\IA\$AccountName.pdf"
}
如果找不到文件。我想将用户添加到组中,但是这里是踢人。该帐户必须添加到该帐户所属组织的违规组中。
即在以下位置找到一个管理员帐户:
OU=Admin-User-Accounts,OU=Administration,OU=ORG1,OU=ORGS,DC=domain,DC=net
将被添加到位于以下位置的名为“ ORG1 IA-不合规用户”的组中:
OU=Groups,OU=ORG1,OU=Information Assurance,OU=ORGS,DC=domain,DC=net
答案 0 :(得分:0)
好吧,您的帖子有点令人困惑,也无法真正验证,因为我没有这样的设置。
但是,在所有OU或企业中查询用户是日常的日常工作。
但是,OU名称必须与其他AD对象名称一样唯一。因此,在单个AD林/域中查询相同的OU名称不是一件容易的事。如果要在每个OU中查询相同的用户名,则可以。
通过逐步解释您已经布置的用例。
(尽管也许您想编辑您的帖子以使其更清晰,无论如何对我来说...)
使用伪代码,然后尝试将其映射出来……而没有真正的方法来确定帖子/样本中几件事的意思。因此,下面是我将如何实现此目标的一个粗略的第一个示例...再次,这是未经测试的,因此,我将这份作业留给了您。
acc:xxx
答案 1 :(得分:0)
似乎其中一个变量不正确,因为PowerShell为我提供了以下内容:
Get-ADPrincipalGroupMembership:无法验证参数'Identity'上的参数。参数为null或为空。提供一个不为null或为空的参数,然后尝试命令 再次。
好的,这是到目前为止,根据您在Postanote上方的帖子,我所拥有的:
# query all users in multiple OUs
(Get-ADOrganizationalUnit -Filter "Name -eq 'Admin-User-Accounts'") |
ForEach{
# Collect all members of the current OU
$AccountNames = Get-ADUser -SearchBase $PSItem -Filter *
# Process each member in the current OU collection
ForEach($AccountName in $AccountNames)
{
"Processing $($AccountName.SamAccoutnName)`n"
# Initialize properties needed for processing
$UserOrg = $AccountName.DistinguishedName.split(",")[1]
$MemberCheckOU = "OU=Admin-User-Accounts,OU=Administration,OU=$UserOrg,OU=ORGS,DC=domain,DC=net"
$NonCompliantOU = "OU=Groups,OU=$UserOrg,OU=Information Assurance,OU=ORGS,DC=domain,DC=net"
# Validate user file existence for the current user
If(-Not (Test-Path -LiteralPath "\\domain.net\SYSVOL\domain.net\IA\$($AccountName.SamAccoutnName).pdf)"))
{
# if no file Process the user groupmebership modification
"Processing $($AccountName.SamAccoutnName)"
# Notify that the file was not found and processing is required
Write-Warning -Message "$($($AccountName.SamAccoutnName).pdf) not found. Process group modify actions"
# If the current user is in the MemberCheckOU, add to the NonCompliantOU
If(Get-ADPrincipalGroupMembership -Identity $($AccountName.SamAccoutnName) | Where-Object -Property DistinguishedName -Match $MemberCheckOU )
{ Add-ADGroupMember -Identity "$UserOrg IA - Non-Compliant Users" -Members $($AccountName.SamAccoutnName) }
Else
{
# Do something else
}
}
Else
{
# Notify that the file was found and no processing required
Write-Host "$($AccountName.pdf) found. No further actions taken" -ForegroundColor Green }
}
}
答案 2 :(得分:0)
查看原始脚本片段:
$ous = Get-ADOrganizationalUnit -Filter "Name -eq 'Admin-User-Accounts'"
$ous | ForEach-Object {
$AccountName = Get-ADUser -Filter * -SearchBase $_.DistinguishedName |
Select SamAccountName # note 1
Test-Path "\\domain.net\SYSVOL\domain.net\IA\$AccountName.pdf" # note 2
}
注1:您最终将以$ accountname.accountname保留您的值。我认为您将想扩大它。 注意2:Powershell可能会感到困惑,并认为您正在寻找变量$ accountname.pdf
相反,请尝试...
$ous = Get-ADOrganizationalUnit -Filter "Name -eq 'Admin-User-Accounts'"
$ous | ForEach-Object {
$AccountName = $(Get-ADUser -Filter * -SearchBase $_.DistinguishedName).SamAccountName
Test-Path "\\domain.net\SYSVOL\domain.net\IA\$($AccountName).pdf"
}
在这里,我们只将查询的 .SamAccountName 的值保存到$ AccountName中,然后通过添加$($ accountname)来清除所需的变量,而.pdf不是变量名的一部分。
现在,还要注意,这不会将结果保存在任何地方,只会将其刷新到屏幕上。