Скрипт Powershell при запуске

У меня есть сценарий PS в стартовом объекте групповой политики (компьютер). Этот сценарий перемещает некоторые объекты AD в OU и группу безопасности в зависимости от имени компьютера.

Например, имя компьютера, начинающееся с P113301, будет членом определенной группы безопасности. И он перемещается в конкретную OU в зависимости от IP (OU представляет физические сайты)

Мой скрипт отлично работает локально на каждом компьютере, но не в GPO. Я думаю, это потому, что 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)”)
    }
    }

person Yann Di Maggio    schedule 11.03.2020    source источник
comment
Вы не сказали, как это настроено в GPO. PowerShell всегда будет работать в контексте пользователя, который его запустил. Вы говорите, что делаете это как сценарий входа в систему и т. Д.? Конечно, вам нужно запустить powershell.exe/pwsh.exe с именем вашего скрипта, чтобы запустить любой скрипт. Вы можете использовать GPO для развертывания скрипта на целевом хосте и использовать задачу по расписанию, чтобы запустить его и удалить себя, когда это будет сделано.   -  person postanote    schedule 11.03.2020
comment
Возможно, вы правы насчет учетных данных AD для локальной учетной записи, но в этом сценарии есть еще одна ловушка: Оптимизация быстрого входа в систему Windows и быстрый запуск. В двух словах: сеть может быть недоступна в течение нескольких минут после запуска сценария запуска. В любом случае, чтобы устранить эту проблему и разделить две потенциальные проблемы, взгляните на: Сценарий запланированной задачи Powershell - работает нормально как учетная запись пользователя, но не как СИСТЕМА   -  person iRon    schedule 11.03.2020
comment
Спасибо за ваши ответы, но: - Мой объект групповой политики является сценарием запуска, и он не выполняется в контексте пользователя - Мой запуск объекта групповой политики имеет параметры, активированные для ожидания сети перед выполнением   -  person Yann Di Maggio    schedule 13.03.2020