2016-10-23 5 views
1

Я пытаюсь использовать следующий код из этого вопроса "PowerShell: Running a command as Administrator", чтобы не только самостоятельно поднять мой сценарий для автоматического запуска на PowerShell на уровне администратора, но также для сеанса PowerShell на уровне администратора запускается с уровнем ExecutionPolicy RemoteSigned. Я предполагаю, что мне нужно использовать что-то вроде -ExecutionPolicy RemoteSigned в $newProcess.Arguments, но я полностью потерял, если это так, и если это то, что я использую для создания нескольких аргументов в синтаксисе?Self Elevating Script + Политика исполнения

# 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 an administrator 
if ($myWindowsPrincipal.IsInRole($adminRole)) { 
    # We are running as an administrator, so change the title and background colour to indicate this 
    $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"; 
    $Host.UI.RawUI.BackgroundColor = "DarkBlue"; 
    Clear-Host; 
} else { 
    # We are not running as an 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 with added scope and support for scripts with spaces in it's path 
    $newProcess.Arguments = "& '" + $script:MyInvocation.MyCommand.Path + "'" 

    # 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

[само подъемное скрипт без лазейки безопасности] (https://blogs.msdn.microsoft.com/virtual_pc_guy/2010/09/23/a-self-elevating-powershell-script/) – lloyd

+0

Ну это не мой. Возможно, я должен объяснить свою общую цель. То, что я в конечном счете пытаюсь сделать, - запустить скрипт из сеанса без полномочий администратора Powershell, который будет дросселировать пропускную способность интернета для одного исполняемого файла. Я понимаю, что это может быть достигнуто только с помощью сценария Powershell на уровне администратора. Мне также нужно, чтобы это можно было запускать с компьютера с Windows 10 с установленным по умолчанию пакетом ExecutionPolicy для ограничения. Следовательно, мое желание уменьшить уровень ExecutionPolicy в течение всего скрипта. – Ikrananka

ответ

1

$newProcess.Arguments действительно там, где вы добавляете соответствующие параметры. Тем не менее, вы можете запустить скрипт с помощью параметра -File вместо использования оператора вызова (&) в неявном параметре -Command.

$newProcess = New-Object Diagnostics.ProcessStartInfo 'powershell.exe' 
$newProcess.Arguments = '-ExecutionPolicy RemoteSigned -File "' + 
         $script:MyInvocation.MyCommand.Path + '"' 
$newProcess.Verb = 'runas' 
[Diagnostics.Process]::Start($newProcess) 
+0

Это прекрасно - работает точно так, как я надеялся. Проведя часы этим утром, разрывая мои волосы, вы решили это для меня моментально. Спасибо :) – Ikrananka