Set-ADGroup找不到刚刚在同一脚本(PowerShell)中创建的组
我正在编写一个脚本来创建安全组和分发组,以便它们遵循我们的命名标准。在脚本中,我使用New DistributionGroup创建组,将DistributionGroup设置为添加一些自定义属性,然后使用Set-ADGroup添加描述。(旁白:新DistributionGroup做不到这些事情真是太痛苦了!)尽管将睡眠时间设置为30秒,Set-ADGroup始终会失败,原因是: Set-ADGroup:在[our domain]下找不到标识为“AcctTesting1”的对象 然而,如果我从Set ADGroup中删除代码行,运行脚本,然后立即运行Set ADGroup代码,它就可以完美地工作 以下是脚本的相关部分:(我们的域名已删除)Set-ADGroup找不到刚刚在同一脚本(PowerShell)中创建的组,powershell,active-directory,powershell-2.0,Powershell,Active Directory,Powershell 2.0,我正在编写一个脚本来创建安全组和分发组,以便它们遵循我们的命名标准。在脚本中,我使用New DistributionGroup创建组,将DistributionGroup设置为添加一些自定义属性,然后使用Set-ADGroup添加描述。(旁白:新DistributionGroup做不到这些事情真是太痛苦了!)尽管将睡眠时间设置为30秒,Set-ADGroup始终会失败,原因是: Set-ADGroup:在[our domain]下找不到标识为“AcctTesting1”的对象 然而,如果我从Se
我对PowerShell脚本编写比较陌生,因此如果您对如何修复此问题有任何想法,我将非常感谢您提供一些详细信息 我无法测试它,但这里有一个可能的解释
New DistributionGroup
是创建通用组的Exchange Cmdlet。通用组是在拥有全局编录的域控制器上创建的Set-ADGroup
是一个active Directory Cmdlet,它尝试在任何域控制器上查找组
因此,问题的一个原因是您必须等待从GC到引用域控制器的复制。您可以尝试在带有全局编录的控制器上运行脚本来测试这一点。以下是您可以尝试的内容 您可以指示
新建DistributionGroup
在特定DC上创建组(使用DomainController参数)New DistributionGroup
发出组,这样您就可以通过管道将组传送到Set DistributionGroup
并设置所需的属性。最后,您可以使用Set ADGroup
-Server参数从DC获取组
New-DistributionGroup -DomainController DC1 -Name $SAMname ... | Set-DistributionGroup -CustomAttribute10 "ASSIGNMENT GROUP" -CustomAttribute11 $PRMCode
Set-ADGroup -Server DC1 -Description "$Alias AssignmentGroup"
在这个网站上收到的信息告诉了我为什么会发生错误,但我仍然需要修复它。另一位网站专家建议采用循环直到结构,以在组可用之前保持执行。他的解决方案奏效了,但在循环的每次迭代中,屏幕上都充满了错误消息。下面的帖子给了我构建工作循环所需的信息 执行新的DistributionGroup命令后,此循环会延迟后续命令,直到刚创建的组可用于修改
Write-Host -NoNewline "Waiting for replication"
Do
{
If($Idx -gt 0) {Start-sleep -s 5}
$r = Get-ADGroup -Filter {SamAccountName -eq $SAMname}
Write-Host -NoNewline "."
$Idx = $Idx + 1
}
Until($r)
Dann我也有这个问题,因为我将组用于远程文件系统ACL,所以我希望确保该组在所有DC上同步 在上述基础上,我的实现实际上是
function createADSecurityGroup{
Param( [Parameter(mandatory = $true)] [String] $GroupScope,
[Parameter(mandatory = $true)] [String] $Name,
[Parameter(mandatory = $true)] [String] $Description,
[Parameter(mandatory = $true)] [String] $Path)
try{
New-ADGroup -GroupScope $GroupScope -Name $Name -Description $Description -GroupCategory Security -Path $Path
foreach( $dc in Get-ADDomainController -Filter * | Select-Object name){
$Idx=0
$MaxTries=99
$timeout=$false
Write-Host -NoNewline "`nWaiting for group " $name " to appear on server " $dc.name
Do {
If($Idx -gt 0) {Start-sleep -s 5}
try{
$r=$null
$r = Get-ADGroup -Server $dc.name -Filter {SamAccountName -eq $name }
#Timeout-Error-Similation #$r = Get-ADGroup -Server $dc.name -Filter {SamAccountName -eq 'NoNe'}
Write-Host -NoNewline "."
$Idx = $Idx + 1
if( $Idx -gt $MaxTries ){
$timeout=$true
throw "Timeout waiting for appearance of group "
}
}catch{
$ErrorMessage = $_.Exception.Message
Write-Host $ErrorMessage
if( $timeout ){
throw $ErrorMessage
}
}
}
Until($r)
}
Write-Host ""
}catch{
$ErrorMessage = $_.Exception.Message
$txt="createADSecurityGroup-Function FAILURE: "+$ErrorMessage+" "+$Name
Write-Host "`n" $txt
throw $txt
}
}
读完这篇文章后,我做了一些测试。我们的站点中有三个DC(一个大森林的头),但它们都是GC。通过在命令中指定一个特定的DC,我发现某些DC有时会响应得更快,但午餐前的快速DC可能是午餐后的慢速DC!请参阅JPBlanc的回复评论
function createADSecurityGroup{
Param( [Parameter(mandatory = $true)] [String] $GroupScope,
[Parameter(mandatory = $true)] [String] $Name,
[Parameter(mandatory = $true)] [String] $Description,
[Parameter(mandatory = $true)] [String] $Path)
try{
New-ADGroup -GroupScope $GroupScope -Name $Name -Description $Description -GroupCategory Security -Path $Path
foreach( $dc in Get-ADDomainController -Filter * | Select-Object name){
$Idx=0
$MaxTries=99
$timeout=$false
Write-Host -NoNewline "`nWaiting for group " $name " to appear on server " $dc.name
Do {
If($Idx -gt 0) {Start-sleep -s 5}
try{
$r=$null
$r = Get-ADGroup -Server $dc.name -Filter {SamAccountName -eq $name }
#Timeout-Error-Similation #$r = Get-ADGroup -Server $dc.name -Filter {SamAccountName -eq 'NoNe'}
Write-Host -NoNewline "."
$Idx = $Idx + 1
if( $Idx -gt $MaxTries ){
$timeout=$true
throw "Timeout waiting for appearance of group "
}
}catch{
$ErrorMessage = $_.Exception.Message
Write-Host $ErrorMessage
if( $timeout ){
throw $ErrorMessage
}
}
}
Until($r)
}
Write-Host ""
}catch{
$ErrorMessage = $_.Exception.Message
$txt="createADSecurityGroup-Function FAILURE: "+$ErrorMessage+" "+$Name
Write-Host "`n" $txt
throw $txt
}
}