У меня есть сценарий PS в автозагрузке GPO (компьютер). Этот сценарий перемещает некоторые объекты AD в подразделении и группе безопасности в зависимости от имени компьютера.
Например, имя компьютера, начинающееся с P113301, будет входить в указанную группу безопасности c. И он перемещается к указанному c OU в зависимости от IP (OU представляет физические сайты)
Мой скрипт работает как шарм локально на каждом компьютере, но не в GPO. Я думаю, это потому, что объект групповой политики запускается локальной учетной записью и не имеет прав на домен.
Я попытался изменить учетные данные (указать c с повышенными правами на домен), и он снова работает локально, но не снова GPO.
Мой сценарий здесь. У вас есть идея, что я могу сделать, чтобы это сработало, или у вас может быть идея достичь моей цели. Для информации: я не могу использовать пользователя для входа в GPO, я хочу, чтобы процесс запускался при включении компьютера
$IP = $NULL
$ComputerName = $NULL
$CompObj = $NULL
$ComputerOU = $NULL
$ComputerDN = $NULL
$DestinationDN = $NULL
$GSFIXES = "CN=balbalbal_fixes, DC=balbla,DC=local"
$GSLAPTOPS = "CN=balbalbal_laptops, DC=balbla,DC=local"
$BIGANOSIPRange = "\b(?:(?:192)\.\b(?:(?:168)\.)\b(?:(?:36)\.|\b(?:(?:37)\.|\b(?:(?:38)\.|\b(?:(?:39))))))"
$SIEGEIPRange = "\b(?:(?:192)\.\b(?:(?:168)\.)\b(?:(?:4)\.|\b(?:(?:5)\.|\b(?:(?:6)\.|\b(?:(?:7))))))"
$BIGANOSDN = "OU=BIGANOS,DC=balbla,DC=local"
$SIEGEDN = "OU=SIEGE,DC=balbla,DC=local"
$versionOS = (Get-WmiObject Win32_OperatingSystem).Version
if ($versionOS.StartsWith("10")) {
trap [System.Net.Sockets.SocketException] { continue; }
$ComputerName = [system.environment]::MachineName
$ComputerDN = ([ADSISEARCHER]”sAMAccountName=$($env:COMPUTERNAME)$”).FindOne().Path
$CompObj = [ADSI]”$ComputerDN”
$ComputerOU = ($ComputerDN -split $ComputerName + ",")[-1]
$FixesMember = new-object DirectoryServices.DirectorySearcher([ADSI]"")
$Fixesmember.filter = “(&(objectClass=computer)(sAMAccountName=$Computername$)(memberof=$GSFIXES))”
$FixesMemberResult = $Fixesmember.FindOne()
$LaptopsMember = new-object DirectoryServices.DirectorySearcher([ADSI]"")
$Laptopsmember.filter = “(&(objectClass=computer)(sAMAccountName=$Computername$)(memberof=$GSLAPTOPS))”
$LaptopsMemberResult = $Laptopsmember.FindOne()
if (($FixesMemberResult) -OR ($LaptopsMemberResult))
{}
Else {
if ($ComputerName.StartsWith("S113301")) {
$group = [ADSI]”LDAP://$($GSFIXES)”
$machine = [ADSI]$ComputerDN
$group.Add($machine.Path)
}
if ($ComputerName.StartsWith("P113301")) {
$group = [ADSI]”LDAP://$($GSLAPTOPS)”
$machine = [ADSI]$ComputerDN
$group.Add($machine.Path)
}
}
$IP = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter 'IPEnabled=TRUE' | Select-Object -ExpandProperty IPAddress | Where-Object { $_ -notlike "192.*" -and $_ -notlike "169.*" -and $_ -notlike "127.*" -and $_ -notlike "10.*" -and $_ -notlike "172.*" -and $_ -notlike "*:*"} | Select -First 1
if ($IP -match $BIGANOSIPRange) {
$DestinationDN = $BIGANOSDN
}
ElseIf ($IP -match $SIEGEIPRange) {
$DestinationDN = $SIEGEDN
}
Else {
$DestinationDN = $ComputerOU
}
if ($IP -ne $NULL) {
$CompObj.psbase.MoveTo([ADSI]”LDAP://$($DestinationDN)”)
}
}