此处 get-adgroups 在从脚本查询时返回 false,而在使用相同的 PowerShell ISE 窗口手动运行时返回 true。请参阅以下产生错误的代码。存在组、OU 和 DN。很可能没有错字。可以通过手动运行命令来重现(见下文),效果很好。
Import-Module ActiveDirectory
$Group="ProductInternalInstallProductOnNextLogin"
$BaseDN="OU=Product,DC=int,DC=Domain,DC=de"
write-host "get-adgroup -Filter DistinguishedName -eq CN=$Group,$BaseDN"
$Result=get-adgroup -Filter {(DistinguishedName -eq "CN=$Group,$BaseDN")}
if($Result)
{
write-host "Group $Group found"
}
else
{
write-host "Group $Group not found, trying to create $Group"
New-ADGroup -path "$BaseDN" -GroupScope Global -name $Group
if (!$?)
{
write-host "ERROR creating new group $Group"
exit
}
}
这会产生以下输出,您可以在其中看到错误:
____________________________________________________________________________________________________________________________________________________________________________________________________________________
PS C:\Users\MyName.INT> G:\DevPath\Tools\PowerShell-Scripte\Unbenannt2.ps1
get-adgroup -Filter DistinguishedName -eq CN=ProductInternalInstallProductOnNextLogin,OU=Product,DC=int,DC=Domain,DC=de
Group ProductInternalInstallProductOnNextLogin not found, trying to create ProductInternalInstallProductOnNextLogin
New-ADGroup : Die angegebene Gruppe ist bereits vorhanden
Bei G:\DevPath\Tools\PowerShell-Scripte\Unbenannt2.ps1:13 Zeichen:16
+ New-ADGroup <<<< -path "$BaseDN" -GroupScope Global -name $Group
+ CategoryInfo : NotSpecified: (CN=ProductInte...nt,DC=Domain,DC=de:String) [New-ADGroup], ADException
+ FullyQualifiedErrorId : Die angegebene Gruppe ist bereits vorhanden,Microsoft.ActiveDirectory.Management.Commands.NewADGroup
ERROR creating new group ProductInternalInstallProductOnNextLogin
____________________________________________________________________________________________________________________________________________________________________________________________________________________
如果我只在组不存在的情况下运行它,New-ADGroup 怎么会失败?PowerShell 在此处以德语运行,因此错误消息“New-ADGroup : Die angegebene Gruppe ist bereits vorhanden”表示“该组已存在”。
为了验证这一点,我在控制台中手动运行了它,它运行良好:
PS C:\Users\MyName.INT> write-host "the following command was run manually from the commandline of the PowerShellISE"
$Result=get-adgroup -Filter {(DistinguishedName -eq "CN=ProductInternalInstallProductOnNextLogin,OU=Product,DC=int,DC=Domain,DC=de")}
write-host $Result
产生正确的输出:
the following command was run manually from the commandline of the PowerShellISE
CN=ProductInternalInstallProductOnNextLogin,OU=Product,DC=int,DC=Domain,DC=de
在我的挣扎中我也尝试过
try {get-adgroups [...]} catch {new-adgroup[...]}
但这也没有奏效。