我尝试使用PowerShell创建一个在Active Directory中创建用户的项目。 尽管如此,我的问题是,让我们说我运行这个:
New-ADUser test1 -Givenname test -surname test -AccountPassword (ConvertTo-SecureString "abc" -AsPlainText -force)
如你所知" abc"不符合密码要求,虽然它总是添加用户但没有密码,在我的项目中是不可接受的,我不想这样做,所以如果它在任何参数中失败它应该输出错误而不运行其他参数都可以!我最喜欢这一行,所以我不必为它创建脚本,只需在我的应用程序中调用它。 试过多个参数,比如-whatif和try,catch! 任何类型的来源/答案都非常感谢!
答案 0 :(得分:3)
要在原始帖子上澄清,这将返回错误:
" New-ADUser:密码不符合域的长度,复杂性或历史记录要求。"。
已创建用户帐户,但已禁用。
在New-ADUser cmdlet上指定-ErrorAction Stop不足以阻止创建用户帐户。
要防止创建用户帐户,必须像这样设置全局ErrorActionPreference(并使用ErrorAction参数):
$ErrorActionPreference = "Stop"
如果您希望可以将它包装在New-ADUser cmdlet周围,以便它只影响该cmdlet而不影响脚本的其余部分,如下所示:
$ExistingEAP = $ErrorActionPreference
$ErrorActionPreference = "Stop"
New-ADUser ... -ErrorAction Stop
$ErrorActionPreference = $ExistingEAP
有关更完整的示例,假设某些通用帐户有一个简单的$ userArray samaccountnames,您可以尝试这样的事情:
$ExistingEAP = $ErrorActionPreference
$ErrorActionPreference = "Stop"
$userarray = "test1","test2","test3"
foreach($username in $userarray)
{
try
{
New-ADUser $username -Givenname test -surname test -AccountPassword (ConvertTo-SecureString "abc" -AsPlainText -force) -ErrorAction Stop
$created += @($username)
}
catch
{
$notcreated += @($username)
}
}
$ErrorActionPreference = $ExistingEAP
Write-Output "Created $created"
Write-Output "Could not create: $notcreated"
这适用于我的环境。