Powershell循环-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新手。

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

}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...