Создание запланированной задачи для запуска от имени локального администратора - PullRequest
0 голосов
/ 26 сентября 2019

Цель

Создание сценария Powershell для автоматизации предоставления компьютеров в домене.

Процесс сценария

(Перед запуском сценария Set-ExecutionPolicy Unrestricted выполняется, затем сценарийзапускается от имени администратора.)

  1. Делать вещи.Получите переменные и сохраните их в реестре, если это необходимо, после перезагрузки.
  2. Создание запланированного задания для возобновления после перезагрузки.
  3. Присоединение к домену.
  4. Продолжение сценария после перезагрузки с помощью запланированного задания.Перезагрузите несколько раз до завершения.

Issue

По какой-то причине запланированное задание не будет запускаться после присоединения к домену и перезагрузки.После первой перезагрузки, если я открою задачу без внесения изменений и повторно введу пароль там, где будет предложено, он запустится и продолжит работу при последующих перезагрузках.

Я собирался запустить это как SYSTEM, ноЯ не могу сохранить учетные данные и возобновить их таким образом (так как они зашифрованы текущим пользователем, который первым открыл скрипт).Также, похоже, что Chocolatey не нравится устанавливать пакеты при запуске в качестве SYSTEM.

Я думаю, что переименование компьютера или присоединение к домену во время перезагрузки вызывает проблему.

Сценарий

Вот части, которые я считаю актуальными, но полный сценарий приведен на Github ниже, если я пропустил что-то важное.

Полный сценарий : https://github.com/gotylergo/w10-helpdesk-toolkit/blob/master/provision-pc.ps1

$ScriptDir = "$env:ProgramData\ProvisionPC"
$ScriptPath = "$ScriptDir\ProvisionPC.ps1"

function Set-ScheduledRebootTask {
    $TaskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NonInteractive -NoLogo -NoProfile -File $ScriptPath"
    $TaskTrigger = New-ScheduledTaskTrigger -RandomDelay (New-TimeSpan -Minutes 5) -AtStartup
    $TaskSettings = New-ScheduledTaskSettingsSet -DontStopOnIdleEnd -RestartInterval (New-TimeSpan -Minutes 1) -RestartCount 10 -StartWhenAvailable
    $Task = New-ScheduledTask -Action $TaskAction -Trigger $TaskTrigger -Settings $TaskSettings
    $CurrentUser = Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -expand UserName
    $Task | Register-ScheduledTask -TaskName "ProvisionPC" -User $CurrentUser -Password $LocalAdminPwd

    if ($?) {
        Write-Output "Scheduled task created. Script will continue after reboot."
    } else {
        Write-Error "Scheduled task could not be created. Run script manually after reboot."
    }

    $DomainAdminUser = Read-Host "Enter your domain admin username in the form of domain.com\username"
    $DomainAdminPwd = Read-Host "Enter your domain admin password" -AsSecureString
    $Credentials = [System.Management.Automation.PSCredential]::new($DomainAdminUser, $DomainAdminPwd)
    $DomainName = $Credentials.GetNetworkCredential().Domain

    $NewPCName = Read-Host "Enter the new computer name"

    $LocalAdminPwd = ""
    if ($Pwd1_txt -eq $Pwd2_txt) {
        $LocalAdminPwd = $Pwd1_txt
        # Set password and enable Administrator account
        Set-LocalUser -Name "Administrator" -Password $Pwd1 -PasswordNeverExpires:$true
        if ($?) {
            Write-Output "Administer password set."
        } else {
            Write-Error "Error: Couldn't set Administrator password. "
        }
        Enable-LocalUser -Name "Administrator"
        if ($?) {
            Write-Output "Administer account enabled."
        } else {
            Write-Error "Error: Couldn't enable administrator account. "
        }
        # Set currently logged in admin account password to Administrator password
        Set-LocalUser -Name $env:UserName -Password $Pwd1 -PasswordNeverExpires:$true
        if ($?) {
            Write-Output "$env:UserName password set." 
        } else {
            Write-Error "Error: Couldn't set $env:UserName password. "
        }
    } else {
        throw "Passwords don't match!"
    }

    Set-ScheduledRebootTask

    # Join to domain and restart
    Add-Computer -DomainName $DomainName -Server HQ-corpdc01 -NewName $NewPCName -Credential $Credentials -Restart -Force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...