Как запустить другой ps1 внутри ps1 с другим аккомодацией (и правами администратора)? - PullRequest
1 голос
/ 17 апреля 2019

У меня ошибка на некоторых компьютерах моих пользователей, и мне нужно, чтобы мои пользователи запустили .ps1 со своего компьютера, чтобы исправить проблему, чтобы я мог получить доступ к их компьютеру, когда им это нужно, через NetSupport. Проблема в том, что они не имеют прав администратора на своем компьютере.

Вот что я уже сделал:

  • Зашифруйте пароль администратора в .txt (этот файл будет запущен мной с правами администратора)
    Function RandomKey {
    $RKey = @()
    For ($i=1; $i -le 16; $i++) {
    [Byte]$RByte = Get-Random -Minimum 0 -Maximum 256
    $RKey += $RByte
    }
    $RKey
}
$Key = RandomKey

$key |Out-File "$path\Key.txt"

Read-Host "Enter one admin Password" -assecurestring | ConvertFrom-SecureString -key $Key | Out-file "$path\EncKey.txt"

Эта часть работает нормально. Теперь перейдем к рабочей «клиентской» части:

$PassKey = get-content "$Path\Key.txt"
$Password = get-content "$Path\EncKey.txt" | Convertto-SecureString -Key $PassKey
$User = Read-Host "Enter the ID given by your administrator"
$credentials = New-Object System.Management.Automation.Pscredential `
-Argumentlist $User,$Password

И не работающий (я много чего пробовал здесь, например):

  • 1: Когда я устанавливаю локального администратора (. \ Administrator), новый Windows PowerShell запускается с правами администратора, но не выполняет то, что должен делать file.ps1, а если я задаю домен \ adminaccount, он просто запускает новые окна posershell, но без прав администратора.
Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process powershell -ArgumentList "-file "\\serveur\path\file.ps1" "}'
  • 2: Когда я устанавливаю локального администратора (. \ Administrator), новый Windows PowerShell запускается с правами администратора, но работает только половина сценария (file.ps1), и если я задаю domain \ adminaccount: то же, что и выше.
Invoke-Item (Start-Process powershell.exe -Credential $credentials ((Split-Path $MyInvocation.InvocationName) + "\\serveur\path\file.ps1" ))
  • 3 и т. Д.

Start-Process powershell -ArgumentList '-executionpolicy, bypass, -file "\\serveur\path\file.ps1", -Credential $credentials, -verb RunAs'

Start-Process -filepath "\\serveur\path\file.ps1" -Credential $credentials -ArgumentList '-noprofile -noexit -command  -verb runas}'

Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process powershell -ArgumentList "-file "\\serveur\path\file.ps1" "}'

Но ничего не работает, как ожидалось ... Если у вас есть идея, это будет замечательно !!

--------------------- РЕДАКТИРОВАТЬ ---------------- Я сделал ошибку в моем файле .ps1, поэтому

Invoke-Item (Start-Process powershell.exe -Credential $credentials ((Split-Path $MyInvocation.InvocationName) + "\\serveur\path\file.ps1" ))

Это нормально работает с локальным администратором (. \ Administrator), скрипт запускается с правами администратора и работает как положено. НО ... он не работает с администратором домена (домен \ администратор): скрипт запускается, но без прав администратора ...

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

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

Не удалось заставить его работать с файлом .ps1, который я хотел выполнить по пути UNC. Поэтому мне пришлось сначала скопировать его на локальный компьютер, выполняющий сценарий.

$path="[...]\temp"
$source= "[...]file.ps1"
$destination = "c:\users\$env:USERNAME\documents"
if (!(Test-Path "$destination\Netlogon_Firewall.ps1")){Copy-Item -Path $source -Destination $destination}

Затем я импортирую свои учетные данные:

$PassKey = get-content "$Path\Key.txt"
$Password = get-content "$Path\EncKey.txt" | Convertto-SecureString -Key $PassKey
$User = Read-Host "Enter the ID given by your administrator"
$credentials = New-Object System.Management.Automation.Pscredential `
-Argumentlist $User,$Password

И, наконец, я могу запустить скрипт file.ps1 с правами администратора:

Start-Process -Credential $Credentials "$PSHOME\powershell.exe" -WorkingDirectory "C:\Users\$env:USERNAME" -ArgumentList "-ExecutionPolicy Bypass & '$destination\file.ps1'"
0 голосов
/ 17 апреля 2019

Можете ли вы попробовать использовать этот скрипт ?

Я смог вызвать это, как показано ниже, и получить сеанс с повышенными правами.

Invoke-Elevated -FilePath \\server\share\file.ps1
...