Powershell - 根据 JSON 文件更新 Active Directory 中的属性
Powershell - update attributes in Active Directory based on JSON file
这是我的 json 文件的提取:
[
{
"ProductionSubfolders": "XYZ",
"ProductionSubfoldersDN": "OU=XYZ,DC=bla,DC=root,DC=local"
}
]
ProductionSubfolders = 值是 Active Directory 中组织单位的名称
ProductionSubfoldersDN = 值是组织单位的关联可分辨名称
我想为 json 文件中列出的组织单位的名为“描述”的 Active Directory 属性添加条目 - 在本例中为“ABC”和“XYZ”。
Active Directory 中属性“description”的新值应该是“Test + OU 的名称”,所以在这种情况下:“Test-ABC”和“Test-XYZ”。
这是我的:
$json = Get-Content "C:\prod.json" |ConvertFrom-JSON
foreach ($item in $json) {
foreach {$item1 in $item.ProductionSubfoldersDN} {
$name = $item.ProductionSubfolder
$p= Get-ADOrganizationalUnit -Identity $item1 -Properties description| Select description
if ($p.description -notlike "*Test*") {Set-ADObject -Identity $item1 -Add
@{description="Test-$name}
}
}
有效。对于 OU“ABC”,在 AD 中有一个新的描述属性值,对于 OU“XYZ”,在 AD 中也是一个新的描述属性值。
但是属性的名称是错误的。对于两个 OU,它都是“Test-ABCXYZ”,而不是 OU“ABC”的“Test-ABC”和 OU“XYZ”的“Test-XYZ”。
我知道这是因为 $item.ProductionSubfolder 包含两个名称:“ABC”和“XYZ”。但我不知道如何更改它,如何分隔名称并将它们正确匹配到关联的 ProductionSubfolderDN。
提前致谢!!
解决link子文件夹的值到子文件夹DN:
foreach ($item in $json)
{
foreach ($name in $item.ProductionSubfolders)
{
foreach($ou in $item.ProductionSubfoldersDN)
{
if ($ou -like 'OU=' + $name + '*')
{
$n = 'Test-{0}' -f $name
$name + ' is inside ' + $ou;
$ou;
$n;
#Set-ADOrganizationalUnit $ou -Description $n
}
}
}
}
ABC is inside OU=ABC,DC=bla,DC=root,DC=local
OU=ABC,DC=bla,DC=root,DC=local
Test-ABC
XYZ is inside OU=XYZ,DC=bla,DC=root,DC=local
OU=XYZ,DC=bla,DC=root,DC=local
Test-XYZ
我使用不区分大小写的 like
测试 OU 是否包含来自子文件夹的 OU 名称(使用 clike
区分大小写)
无论 OU 的顺序如何,此解决方案都有效..
您的 Json 由 2 个属性组成,并且它们都是数组,您可以 正确地 迭代它们的方法是使用 for
循环.我个人认为使用这种对象来更新 AD 对象不是一个好主意,但您可以按照以下方法进行操作。
首先您需要获取数组中元素的数量,然后使用 for
循环计算该数量:
$ErrorActionPreference = 'Stop'
$count = $json.ProductionSubfoldersDN.Count
for($i = 0; $i -lt $count; $i++) {
$dn = @($json.ProductionSubfoldersDN)[$i]
$description = 'Test-{0}' -f @($json.ProductionSubfolders)[$i]
try {
Set-ADOrganizationalUnit $dn -Description $description
}
catch {
Write-Warning $_.Exception.Message
}
}
以上代码假定您的 Json 的属性将具有相同的计数($json.ProductionSubfoldersDN.Count
必须等于 $json.ProductionSubfolders.count
)。
这是我的 json 文件的提取:
[
{
"ProductionSubfolders": "XYZ",
"ProductionSubfoldersDN": "OU=XYZ,DC=bla,DC=root,DC=local"
}
]
ProductionSubfolders = 值是 Active Directory 中组织单位的名称
ProductionSubfoldersDN = 值是组织单位的关联可分辨名称
我想为 json 文件中列出的组织单位的名为“描述”的 Active Directory 属性添加条目 - 在本例中为“ABC”和“XYZ”。
Active Directory 中属性“description”的新值应该是“Test + OU 的名称”,所以在这种情况下:“Test-ABC”和“Test-XYZ”。
这是我的:
$json = Get-Content "C:\prod.json" |ConvertFrom-JSON
foreach ($item in $json) {
foreach {$item1 in $item.ProductionSubfoldersDN} {
$name = $item.ProductionSubfolder
$p= Get-ADOrganizationalUnit -Identity $item1 -Properties description| Select description
if ($p.description -notlike "*Test*") {Set-ADObject -Identity $item1 -Add
@{description="Test-$name}
}
}
有效。对于 OU“ABC”,在 AD 中有一个新的描述属性值,对于 OU“XYZ”,在 AD 中也是一个新的描述属性值。 但是属性的名称是错误的。对于两个 OU,它都是“Test-ABCXYZ”,而不是 OU“ABC”的“Test-ABC”和 OU“XYZ”的“Test-XYZ”。
我知道这是因为 $item.ProductionSubfolder 包含两个名称:“ABC”和“XYZ”。但我不知道如何更改它,如何分隔名称并将它们正确匹配到关联的 ProductionSubfolderDN。
提前致谢!!
解决link子文件夹的值到子文件夹DN:
foreach ($item in $json)
{
foreach ($name in $item.ProductionSubfolders)
{
foreach($ou in $item.ProductionSubfoldersDN)
{
if ($ou -like 'OU=' + $name + '*')
{
$n = 'Test-{0}' -f $name
$name + ' is inside ' + $ou;
$ou;
$n;
#Set-ADOrganizationalUnit $ou -Description $n
}
}
}
}
ABC is inside OU=ABC,DC=bla,DC=root,DC=local
OU=ABC,DC=bla,DC=root,DC=local
Test-ABC
XYZ is inside OU=XYZ,DC=bla,DC=root,DC=local
OU=XYZ,DC=bla,DC=root,DC=local
Test-XYZ
我使用不区分大小写的 like
测试 OU 是否包含来自子文件夹的 OU 名称(使用 clike
区分大小写)
无论 OU 的顺序如何,此解决方案都有效..
您的 Json 由 2 个属性组成,并且它们都是数组,您可以 正确地 迭代它们的方法是使用 for
循环.我个人认为使用这种对象来更新 AD 对象不是一个好主意,但您可以按照以下方法进行操作。
首先您需要获取数组中元素的数量,然后使用 for
循环计算该数量:
$ErrorActionPreference = 'Stop'
$count = $json.ProductionSubfoldersDN.Count
for($i = 0; $i -lt $count; $i++) {
$dn = @($json.ProductionSubfoldersDN)[$i]
$description = 'Test-{0}' -f @($json.ProductionSubfolders)[$i]
try {
Set-ADOrganizationalUnit $dn -Description $description
}
catch {
Write-Warning $_.Exception.Message
}
}
以上代码假定您的 Json 的属性将具有相同的计数($json.ProductionSubfoldersDN.Count
必须等于 $json.ProductionSubfolders.count
)。