Powershell 循环 - Powershell 的新功能
Powershell Loops - New to Powershell
各位。对于没有 Powershell 经验的人来说,这个问题将是一个简单的答案。
由于无意的原因,我们有大量用户的帐户 (adminCount) 的某个属性发生了更改。我希望清除此属性而不是 1,并且找到了一个脚本来执行此操作:
set-aduser <username> -remove @{adminCount=1}
$user = get-aduser <username> -properties ntsecuritydescriptor
$user.ntsecuritydescriptor.SetAccessRuleProtection($false,$true)
set-aduser <username> -replace @{ntsecuritydescriptor=$user.ntsecuritydescriptor}
我现在需要做的是 运行 为特定 OU(有数千个)中的每个用户执行此命令。如果有人能帮我想出一个如下所示的循环,我将不胜感激:
For each user in (Certain Searchbase/OU)
Run script
先谢谢大家了!
编辑:目前,我有以下内容,但担心测试它,因为我是 Powershell 菜鸟,而且我现在只有一个生产环境:
$users = Get-ADUser -ldapfilter “(objectclass=user)” -searchbase “ou=companyusers,dc=enterpriseit,dc=co”
ForEach($user in $users)
{
set-aduser $user -remove @{adminCount=1}
$user = get-aduser $user -properties ntsecuritydescriptor
$user.ntsecuritydescriptor.SetAccessRuleProtection($false,$true)
set-aduser $user -replace @{ntsecuritydescriptor=$user.ntsecuritydescriptor}
}
您可以在调用 Get-Aduser cmdlet 时使用 SearchBase 参数指定 OU。将其通过管道传输到 ForEach-Object cmdlet,然后执行您的操作。
注意:我将 $_ 变量分配给变量 $user 只是为了更清楚地演示,因为你提到你是 PS.[=11 的新手=]
Get-Aduser -Filter * -SearchBase 'OU=foo,OU=bar,DC=domain,DC=com' -properties ntsecuritydescriptor |
ForEach-Object {
$user = $_;
Write-Host "Performing operations on: $($user.Name)"
# DO Stuff with the user identity.
$user | Set-ADUser -Remove @{adminCount=1} -WhatIf
$user.ntsecuritydescriptor.SetAccessRuleProtection($false,$true)
$user | Set-ADUser -Replace @{ntsecuritydescriptor=$user.ntsecuritydescriptor} -WhatIf
}
各位。对于没有 Powershell 经验的人来说,这个问题将是一个简单的答案。
由于无意的原因,我们有大量用户的帐户 (adminCount) 的某个属性发生了更改。我希望清除此属性而不是 1,并且找到了一个脚本来执行此操作:
set-aduser <username> -remove @{adminCount=1}
$user = get-aduser <username> -properties ntsecuritydescriptor
$user.ntsecuritydescriptor.SetAccessRuleProtection($false,$true)
set-aduser <username> -replace @{ntsecuritydescriptor=$user.ntsecuritydescriptor}
我现在需要做的是 运行 为特定 OU(有数千个)中的每个用户执行此命令。如果有人能帮我想出一个如下所示的循环,我将不胜感激:
For each user in (Certain Searchbase/OU)
Run script
先谢谢大家了!
编辑:目前,我有以下内容,但担心测试它,因为我是 Powershell 菜鸟,而且我现在只有一个生产环境:
$users = Get-ADUser -ldapfilter “(objectclass=user)” -searchbase “ou=companyusers,dc=enterpriseit,dc=co”
ForEach($user in $users)
{
set-aduser $user -remove @{adminCount=1}
$user = get-aduser $user -properties ntsecuritydescriptor
$user.ntsecuritydescriptor.SetAccessRuleProtection($false,$true)
set-aduser $user -replace @{ntsecuritydescriptor=$user.ntsecuritydescriptor}
}
您可以在调用 Get-Aduser cmdlet 时使用 SearchBase 参数指定 OU。将其通过管道传输到 ForEach-Object cmdlet,然后执行您的操作。
注意:我将 $_ 变量分配给变量 $user 只是为了更清楚地演示,因为你提到你是 PS.[=11 的新手=]
Get-Aduser -Filter * -SearchBase 'OU=foo,OU=bar,DC=domain,DC=com' -properties ntsecuritydescriptor |
ForEach-Object {
$user = $_;
Write-Host "Performing operations on: $($user.Name)"
# DO Stuff with the user identity.
$user | Set-ADUser -Remove @{adminCount=1} -WhatIf
$user.ntsecuritydescriptor.SetAccessRuleProtection($false,$true)
$user | Set-ADUser -Replace @{ntsecuritydescriptor=$user.ntsecuritydescriptor} -WhatIf
}