Скрипт Powershell при запуске - PullRequest
0 голосов
/ 11 марта 2020

У меня есть сценарий 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)”)
    }
    }
...