Как повысить сценарий Powershell из сценария - PullRequest
1 голос
/ 13 февраля 2020

Я новичок в Powershell, но во многих отношениях он мне очень нравится. По причинам, я создал сценарий, который загружает набор учетных данных локального администратора из файла на жестком диске и создает объект PSCredential, $ MyCred.

Я хочу использовать $ MyCred для повышения уровня отдельного сценария. (что делает несколько изменений в реестре, чтобы открыть соединения RDP). Я попытался передать $ MyCred командлету Start-Process:

Start-Process Powershell.exe -Credential $MyCredential

Затем я получил следующую ошибку:

Start-Process: Эта команда не может быть выполнена из-за ошибки: имя каталога недопустимо.

Если я запускаю процесс запуска с -credential и пустой переменной, мне предлагается ввести имя пользователя и пароль. Когда я их набираю, я получаю приглашение с повышенными привилегиями PowerShell без проблем и могу внести изменения в реестр моей тестовой системы.

Я проверил содержимое $ myCred, и в нем есть U / N и P / W сохранены правильно (как и в том, что я ввел вручную). Использование New-PSSEssion типа

New-PSSession -Credential $MyCredential

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

В идеальном мире код будет выглядеть примерно так:

Start-Process Powershell.exe -Credential $MyCredential -File C:\MyScript.ps1

Это должно запустить расширенный PowerShell, который выполняет несколько команд во втором сценарии и затем завершается. Что мне здесь не хватает?

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


Исходно, у нас есть несколько компьютеров, которые мы сами не можем достать, и к которым мы также не можем подключиться через RDP. У нас есть пользователи на сайтах, которые могут запустить скрипт для нас. Но важно, чтобы они не получали локальный пароль администратора. Поэтому мы хотим создать сценарий, который читает зашифрованный файл паролей, генерирует объект PSCredential локального администратора и передает его в сценарий, который вносит необходимые изменения в реестр, чтобы обеспечить доступ RDP.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Существует множество статей по этому топику c. Быстрый веб-поиск с использованием «самоподъемного скрипта PowerShell» покажет их. Даже из MS напрямую

Самоподъемный скрипт PowerShell

# Get the ID and security principal of the current user account
 $myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
 $myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)

 # Get the security principal for the Administrator role
 $adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator

 # Check to see if we are currently running "as Administrator"
 if ($myWindowsPrincipal.IsInRole($adminRole))
    {
    # We are running "as Administrator" - so change the title and background color to indicate this
    $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
    $Host.UI.RawUI.BackgroundColor = "DarkBlue"
    clear-host
    }
 else
    {
    # We are not running "as Administrator" - so relaunch as administrator

    # Create a new process object that starts PowerShell
    $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";

    # Specify the current script path and name as a parameter
    $newProcess.Arguments = $myInvocation.MyCommand.Definition;

    # Indicate that the process should be elevated
    $newProcess.Verb = "runas";

    # Start the new process
    [System.Diagnostics.Process]::Start($newProcess);

    # Exit from the current, unelevated, process
    exit
    }

 # Run your code that needs to be elevated here
 Write-Host -NoNewLine "Press any key to continue..."
 $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
0 голосов
/ 13 февраля 2020

Вам не хватает аргумента NoExit здесь.

Start-Process -Filepath "Powershell.exe" -ArgumentList "-NoExit -File "C:\myscript.ps1" -Credential $MyCredential 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...