PowerShell을 사용하여 관리자로 명령을 실행하시겠습니까?
시스템 관리 사용자가 관리자 암호를 입력하지 않고 배치 스크립트를 마우스 오른쪽 버튼으로 클릭하여 관리자 암호를 입력하지 않고 관리자로 실행할 수 있는 방법을 알고 계십니까?
PowerShell 스크립트로 어떻게 하는지 궁금합니다.암호를 입력할 필요가 없습니다. 마우스 오른쪽 단추로 클릭한 관리자 권한으로 실행 방법을 모방하려고 합니다.
지금까지 읽은 내용은 모두 관리자 암호를 제공해야 합니다.
된 권한이 를 시작할 수 .powershell
관리자 권한으로 실행 옵션을 사용합니다.
PS> Start-Process powershell -Verb runAs
Shay Levi의 제안에 대한 추가 사항이 있습니다(스크립트의 시작 부분에 이 행을 추가하기만 하면 됩니다).
if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
$arguments = "& '" +$myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
그러면 현재 스크립트가 관리자 모드에서 새 파워셸 프로세스로 전달됩니다(현재 사용자가 관리자 모드에 액세스할 수 있고 스크립트가 관리자로 시작되지 않은 경우).
PowerShell 스크립트 자동 상승
Windows 8.1 / PowerShell 4.0 +
한 줄 :)
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }
# Your script here
벤자민 암스트롱은 PowerShell 스크립트를 자동으로 향상시키는 것에 대한 훌륭한 기사를 게시했습니다.그의 코드에 몇 가지 사소한 문제가 있습니다. 코멘트에 제시된 수정 사항을 기반으로 수정된 버전은 아래와 같습니다.
기본적으로 현재 프로세스와 연결된 ID를 가져와 관리자인지 확인하고, 관리자 권한이 없는 경우 새 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 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");
다음은 작업 디렉터리를 보존하는 Powershell 스크립트에 대한 자체 상승 스니펫입니다.
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Start-Process PowerShell -Verb RunAs "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`"";
exit;
}
# Your script here
경로 관련 작업을 수행하는 스크립트의 경우 작업 디렉토리를 보존하는 것이 중요합니다.다른 응답의 거의 대부분은 이 경로를 보존하지 않으므로 스크립트의 나머지 부분에서 예기치 않은 오류가 발생할 수 있습니다.
자동 가속 스크립트/스캐킷을 사용하지 않고 관리자 권한으로 스크립트를 쉽게 시작하려면(예: 탐색기 컨텍스트) 여기에서 다른 답변을 참조하십시오. https://stackoverflow.com/a/57033941/2441655
두 번 클릭하면 관리자 권한으로 파워셸 스크립트를 실행하는 배치 파일(*.bat)을 생성할 수 있습니다.이런 방식으로 파워셸 스크립트에서 아무것도 변경할 필요가 없습니다.이렇게 하려면 powershell 스크립트의 이름과 위치가 동일한 배치 파일을 만든 다음 다음 내용을 배치 파일에 넣습니다.
@echo off
set scriptFileName=%~n0
set scriptFolderPath=%~dp0
set powershellScriptFileName=%scriptFileName%.ps1
powershell -Command "Start-Process powershell \"-ExecutionPolicy Bypass -NoProfile -NoExit -Command `\"cd \`\"%scriptFolderPath%`\"; & \`\".\%powershellScriptFileName%\`\"`\"\" -Verb RunAs"
바로 그거야!
다음은 설명입니다.
파워셸 스크립트가 경로 C에 있다고 가정합니다.\Temp\ScriptTest.ps1, 배치 파일의 경로는 C:\Temp\ScriptTest.bat.누군가 이 배치 파일을 실행하면 다음 단계가 수행됩니다.
cmd가 명령을 실행합니다.
powershell -Command "Start-Process powershell \"-ExecutionPolicy Bypass -NoProfile -NoExit -Command `\"cd \`\"C:\Temp\`\"; & \`\".\ScriptTest.ps1\`\"`\"\" -Verb RunAs"
새 파워셸 세션이 열리고 다음 명령이 실행됩니다.
Start-Process powershell "-ExecutionPolicy Bypass -NoProfile -NoExit -Command `"cd \`"C:\Temp\`"; & \`".\ScriptTest.ps1\`"`"" -Verb RunAs
관리자 권한을 가진 다른 새 파워셸 세션이 system32 폴더에서 열리고 다음 인수가 전달됩니다.
-ExecutionPolicy Bypass -NoProfile -NoExit -Command "cd \"C:\Temp\"; & \".\ScriptTest.ps1\""
다음 명령은 관리자 권한으로 실행됩니다.
cd "C:\Temp"; & ".\ScriptTest.ps1"
스크립트 경로 및 이름 인수가 이중 따옴표로 묶이면 공백 또는 단일 따옴표 문자(')를 포함할 수 있습니다.
현재 폴더가 system32에서 C:로 변경됩니다.\온도와 대본
ScriptTest.ps1
실행됩니다.한 번 매개 변수-NoExit
powershell 스크립트에서 예외가 발생하더라도 창이 닫히지 않습니다.
사용.
#Requires -RunAsAdministrator
아직 언급되지 않았습니다.PowerShell 4.0 이후에만 존재하는 것으로 보입니다.
http://technet.microsoft.com/en-us/library/hh847765.aspx
이 스위치 매개 변수가 required 문에 추가되면 스크립트를 실행 중인 윈도우즈 PowerShell 세션이 높은 사용자 권한으로 시작되어야 함을 지정합니다(관리자 권한으로 실행).
저에게는 이것이 이 문제를 해결하는 좋은 방법으로 보이지만, 현장 경험은 아직 확실하지 않습니다.PowerShell 3.0 런타임은 이를 무시하거나 오류가 발생할 수 있습니다.
스크립트를 비관리자로 실행하면 다음 오류가 표시됩니다.
스크립트 'StackOverflow.ps1'에 Administrator로 실행하기 위한 "#required" 문이 포함되어 있으므로 실행할 수 없습니다.현재 Windows PowerShell 세션이 관리자로 실행되고 있지 않습니다.관리자 권한으로 실행 옵션을 사용하여 Windows PowerShell을 시작한 다음 스크립트를 다시 실행해 보십시오.
+ CategoryInfo : PermissionDenied: (StackOverflow.ps1:String) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : ScriptRequiresElevation
항목을 하여 "권한으로 "의 수 ..ps1
삭제된 파일:
New-Item -Path "Registry::HKEY_CLASSES_ROOT\Microsoft.PowershellScript.1\Shell\runas\command" `
-Force -Name '' -Value '"c:\windows\system32\windowspowershell\v1.0\powershell.exe" -noexit "%1"'
(@Shay에서 더 간단한 스크립트로 업데이트됨)
으로 기적으로에서.HKCR:\Microsoft.PowershellScript.1\Shell\runas\command
Powershell을 사용하여 스크립트를 호출할 기본값을 설정합니다.
조나단과 셰이 레비가 올린 코드는 제게 맞지 않았습니다.
아래의 작동 코드를 확인하십시오.
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
#"No Administrative rights, it will display a popup window asking user for Admin rights"
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments
break
}
#"After user clicked Yes on the popup, your file will be reopened with Admin rights"
#"Put your code here"
관리자 권한으로 스크립트를 다시 실행하고 해당 모드에서 스크립트가 시작되었는지 확인해야 합니다.아래에 DoElevated Operations와 DoStandard Operations의 두 가지 기능이 있는 스크립트를 작성했습니다.관리자 권한이 필요한 코드는 첫 번째 코드에, 표준 작업은 두 번째 코드에 배치해야 합니다.IsRunAsAdmin 변수는 관리 모드를 식별하는 데 사용됩니다.
내 코드는 Windows Store 앱용 앱 패키지를 만들 때 자동으로 생성되는 Microsoft 스크립트의 단순화된 추출물입니다.
param(
[switch]$IsRunAsAdmin = $false
)
# Get our script path
$ScriptPath = (Get-Variable MyInvocation).Value.MyCommand.Path
#
# Launches an elevated process running the current script to perform tasks
# that require administrative privileges. This function waits until the
# elevated process terminates.
#
function LaunchElevated
{
# Set up command line arguments to the elevated process
$RelaunchArgs = '-ExecutionPolicy Unrestricted -file "' + $ScriptPath + '" -IsRunAsAdmin'
# Launch the process and wait for it to finish
try
{
$AdminProcess = Start-Process "$PsHome\PowerShell.exe" -Verb RunAs -ArgumentList $RelaunchArgs -PassThru
}
catch
{
$Error[0] # Dump details about the last error
exit 1
}
# Wait until the elevated process terminates
while (!($AdminProcess.HasExited))
{
Start-Sleep -Seconds 2
}
}
function DoElevatedOperations
{
Write-Host "Do elevated operations"
}
function DoStandardOperations
{
Write-Host "Do standard operations"
LaunchElevated
}
#
# Main script entry point
#
if ($IsRunAsAdmin)
{
DoElevatedOperations
}
else
{
DoStandardOperations
}
내 2센트를 더하면 됩니다.Windows 7 / Windows 10에서 지금까지 항상 작동하는 넷 세션 기반의 간단한 버전입니다.왜 그것을 너무 복잡하게 만들까요?
if (!(net session)) {$path = "& '" + $myinvocation.mycommand.definition + "'" ; Start-Process powershell -Verb runAs -ArgumentList $path ; exit}
스크립트의 맨 위에 추가하기만 하면 관리자 권한으로 실행됩니다.
물론 관리자 계정이 있는 경우 응용프로그램을 관리자로 강제로 열 수도 있습니다.
파일을 찾아 오른쪽 버튼으로 > 속성 > 바로 가기 > 고급을 클릭하고 관리자 권한으로 실행을 선택합니다.
그런 다음 확인을 클릭합니다.
이 동작은 의도적으로 수행됩니다.Microsoft는 .ps1 파일이 최신 전자 메일 바이러스가 되는 것을 원하지 않았기 때문에 여러 보안 계층이 있습니다.어떤 사람들은 이것이 작업 자동화라는 바로 그 개념에 반하는 것이라고 생각합니다. 이것은 공정한 것입니다.Vista+ 보안 모델은 "자동화 해제"를 통해 사용자가 문제를 해결할 수 있도록 하는 것입니다.
그러나 파워셸 자체를 상승으로 시작하면 파워셸을 닫을 때까지 암호를 다시 요청하지 않고 배치 파일을 실행할 수 있을 것으로 생각합니다.
여기에 있는 많은 답들은 가깝지만, 필요 이상으로 약간의 노력이 필요합니다.
스크립트에 대한 바로 가기를 만들고 "관리자 권한으로 실행"으로 구성합니다.
- 바로 가기를 만듭니다.
- 마우스 오른쪽 단추로 바로 가기를 클릭하고 열기
Properties...
- 집
Target
<script-path>
powershell <script-path>
- 클릭하여 활성화
Run as administrator
다음은 상승된 powershell 명령을 실행하고 단일 명령으로 윈도우즈 배치 파일 내에서 출력 형식을 수집하는 방법입니다(즉, ps1 powershell 스크립트를 작성하지 않음).
powershell -Command 'Start-Process powershell -ArgumentList "-Command (Get-Process postgres | Select-Object Path | Select-Object -Index 0).Path | Out-File -encoding ASCII $env:TEMP\camp-postgres.tmp" -Verb RunAs'
위에서 나는 먼저 상승된 프롬프트가 있는 파워셸을 시작한 다음 명령을 실행하기 위해 다른 파워셸(서브 셸)을 시작하도록 요청합니다.
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
PowerShell 바로 가기가 있는 곳입니다.실제 'exe'를 호출하는 것도 여전히 다른 위치로 이동합니다.%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
).
PowerShell은 사용 권한과 관련된 경우 사용자 프로파일 기반이므로 사용자 이름/프로파일에 해당 프로필 아래에서 작업할 수 있는 권한이 있으면 일반적으로 PowerShell에서도 작업을 수행할 수 있습니다.말하자면, 당신이 당신의 사용자 프로필 아래에 위치한 바로 가기를 변경하는 것이 말이 될 수 있습니다.C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
.
마우스 오른쪽 단추를 클릭하고 속성을 클릭합니다.각각 "파일 위치 열기" 및 "변경 아이콘" 단추의 오른쪽에 있는 "설명" 텍스트 필드 바로 아래에 있는 "바로 가기" 탭 아래의 "고급" 단추를 누릅니다.
"관리자 권한으로 실행" 확인란을 선택합니다.를 클릭한 다음 및 를 클릭합니다. 다시 한 번 오른쪽 버튼을 클릭합니다.C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
"시작 메뉴/작업 표시줄에 고정"을 선택합니다.
이제 해당 아이콘을 클릭할 때마다 UAC를 호출하여 에스컬레이션합니다.'YES'를 선택하면 PowerShell 콘솔이 열리고 화면 상단에 "Administrator"라는 레이블이 표시됩니다.
한 걸음 더 나아가자면...Windows PowerShell 프로필 위치에서 동일한 아이콘 바로 가기를 마우스 오른쪽 단추로 클릭하고 최근에 추가한 아이콘을 클릭한 것과 동일한 작업을 수행하는 바로 가기 키를 할당할 수 있습니다."바로 가기 키"라고 표시된 곳에 + + PP(PowerShell의 경우)와 같은 키보드 키/버튼 조합을 넣습니다.및 을 클릭합니다.
이제 할당한 버튼 조합을 누르면 UAC가 호출되고 'YES'를 선택하면 PowerShell 콘솔이 나타나고 제목 표시줄에 "Administrator"가 표시됩니다.
이 일을 할 수 있는 방법을 찾았어요
스크립트를 열 배치 파일을 만듭니다.
@echo off
START "" "C:\Scripts\ScriptName.ps1"
그런 다음 바탕 화면에 다음과 같이 바로 가기를 만듭니다(새로 만들기 -> 바로 가기를 오른쪽 클릭).
그런 다음 다음 위치에 붙여넣습니다.
C:\Windows\System32\runas.exe /savecred /user:*DOMAIN*\*ADMIN USERNAME* C:\Scripts\BatchFileName.bat
처음 열 때는 비밀번호를 한 번 입력해야 합니다.그러면 Windows 자격 증명 관리자에 저장됩니다.
그런 다음 관리자 사용자 이름이나 암호를 입력하지 않고도 관리자 권한으로 실행할 수 있습니다.
저는 아래의 솔루션을 사용하고 있습니다.스크립트 기능을 통해 stdout/stderr을 처리하고 종료 코드를 부모 프로세스에 올바르게 전달합니다.스크립트 경로/파일 이름을 조정해야 합니다.
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
echo "* Respawning PowerShell child process with elevated privileges"
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "powershell"
$pinfo.Arguments = "& '" + $myinvocation.mycommand.definition + "'"
$pinfo.Verb = "RunAs"
$pinfo.RedirectStandardError = $false
$pinfo.RedirectStandardOutput = $false
$pinfo.UseShellExecute = $true
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
echo "* Child process finished"
type "C:/jenkins/transcript.txt"
Remove-Item "C:/jenkins/transcript.txt"
Exit $p.ExitCode
} Else {
echo "Child process starting with admin privileges"
Start-Transcript -Path "C:/jenkins/transcript.txt"
}
# Rest of your script goes here, it will be executed with elevated privileges
또 다른 간단한 해결책은 "C:"를 마우스 오른쪽 버튼으로 클릭하는 것입니다.\Windows\System32\cmd.exe"를 선택하고 "Run as Administrator(관리자 권한으로 실행)"를 선택하면 암호를 제공하지 않고 모든 앱을 관리자 권한으로 실행할 수 있습니다.
@pgk 및 @Andrew Odri의 응답 문제는 스크립트 매개 변수가 있을 때, 특히 필수인 경우입니다.다음 방법을 사용하여 이 문제를 해결할 수 있습니다.
- 사용자가 .ps1 파일을 마우스 오른쪽 버튼으로 클릭하고 'Run with PowerShell'을 선택합니다. 입력 상자를 통해 매개 변수를 요청합니다(HelpMessage 매개 변수 속성을 사용하는 것보다 훨씬 더 나은 옵션입니다).
- 사용자는 콘솔을 통해 스크립트를 실행합니다. 원하는 매개 변수를 전달하고 콘솔이 필수 매개 변수를 알려주도록 합니다.
스크립트에 ComputerName(컴퓨터 이름) 및 Port(포트) 필수 매개 변수가 있는 경우 코드는 다음과 같습니다.
[CmdletBinding(DefaultParametersetName='RunWithPowerShellContextMenu')]
param (
[parameter(ParameterSetName='CallFromCommandLine')]
[switch] $CallFromCommandLine,
[parameter(Mandatory=$false, ParameterSetName='RunWithPowerShellContextMenu')]
[parameter(Mandatory=$true, ParameterSetName='CallFromCommandLine')]
[string] $ComputerName,
[parameter(Mandatory=$false, ParameterSetName='RunWithPowerShellContextMenu')]
[parameter(Mandatory=$true, ParameterSetName='CallFromCommandLine')]
[UInt16] $Port
)
function Assert-AdministrativePrivileges([bool] $CalledFromRunWithPowerShellMenu)
{
$isAdministrator = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if ($isAdministrator)
{
if (!$CalledFromRunWithPowerShellMenu -and !$CallFromCommandLine)
{
# Must call itself asking for obligatory parameters
& "$PSCommandPath" @script:PSBoundParameters -CallFromCommandLine
Exit
}
}
else
{
if (!$CalledFromRunWithPowerShellMenu -and !$CallFromCommandLine)
{
$serializedParams = [Management.Automation.PSSerializer]::Serialize($script:PSBoundParameters)
$scriptStr = @"
`$serializedParams = '$($serializedParams -replace "'", "''")'
`$params = [Management.Automation.PSSerializer]::Deserialize(`$serializedParams)
& "$PSCommandPath" @params -CallFromCommandLine
"@
$scriptBytes = [System.Text.Encoding]::Unicode.GetBytes($scriptStr)
$encodedCommand = [Convert]::ToBase64String($scriptBytes)
# If this script is called from another one, the execution flow must wait for this script to finish.
Start-Process -FilePath 'powershell' -ArgumentList "-ExecutionPolicy Bypass -NoProfile -EncodedCommand $encodedCommand" -Verb 'RunAs' -Wait
}
else
{
# When you use the "Run with PowerShell" feature, the Windows PowerShell console window appears only briefly.
# The NoExit option makes the window stay visible, so the user can see the script result.
Start-Process -FilePath 'powershell' -ArgumentList "-ExecutionPolicy Bypass -NoProfile -NoExit -File ""$PSCommandPath""" -Verb 'RunAs'
}
Exit
}
}
function Get-UserParameters()
{
[string] $script:ComputerName = [Microsoft.VisualBasic.Interaction]::InputBox('Enter a computer name:', 'Testing Network Connection')
if ($script:ComputerName -eq '')
{
throw 'The computer name is required.'
}
[string] $inputPort = [Microsoft.VisualBasic.Interaction]::InputBox('Enter a TCP port:', 'Testing Network Connection')
if ($inputPort -ne '')
{
if (-not [UInt16]::TryParse($inputPort, [ref]$script:Port))
{
throw "The value '$inputPort' is invalid for a port number."
}
}
else
{
throw 'The TCP port is required.'
}
}
# $MyInvocation.Line is empty in the second script execution, when a new powershell session
# is started for this script via Start-Process with the -File option.
$calledFromRunWithPowerShellMenu = $MyInvocation.Line -eq '' -or $MyInvocation.Line.StartsWith('if((Get-ExecutionPolicy')
Assert-AdministrativePrivileges $calledFromRunWithPowerShellMenu
# Necessary for InputBox
[System.Reflection.Assembly]::Load('Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') | Out-Null
if ($calledFromRunWithPowerShellMenu)
{
Get-UserParameters
}
# ... script code
Test-NetConnection -ComputerName $ComputerName -Port $Port
저는 최근에 책임감 있는 환경을 만들기 위해 이것이 필요했습니다.저는 바로 말합니다. 그 결정은 제 것이 아닙니다. 하지만 어디서 그것을 얻었는지 기억이 나지 않습니다.그렇게 보입니다.
powershell.exe -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -Command Get-Service -Name ssh-agent | Set-Service -StartupType Automatic' -Verb RunAs}";
이 예에서는 ssh-agent 자동 시작을 사용하도록 설정합니다.필요한 명령은 -Command 뒤에 지정됩니다.유일한 문제는 새로운 PS 인스턴스에서 실행된다는 것입니다. 하지만 지금까지 이것이 추가 단계 없이 관리자로서 명령을 실행할 수 있는 유일한 방법입니다.
제가 찾은 가장 신뢰할 수 있는 방법은 자동으로 상승하는 .bat 파일로 포장하는 것입니다.
@echo off
NET SESSION 1>NUL 2>NUL
IF %ERRORLEVEL% EQU 0 GOTO ADMINTASKS
CD %~dp0
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 0); close();"
EXIT
:ADMINTASKS
powershell -file "c:\users\joecoder\scripts\admin_tasks.ps1"
EXIT
은 사용자가필요한 합니다.bat은 사용자가 이미 관리자인지 확인하고 필요한 경우 스크립트를 Administrator로 다시 시작합니다. 4째개매 "cmd"로 외부 "합니다.ShellExecute()
로 설정한.0
.
Shay Levy의 답변 위에 아래 설정을 따릅니다(한 번만).
- 관리자 권한으로 PowerShell을 시작합니다.
- 스택 오버플로 질문을 따릅니다. PowerShell에서 "이 시스템에서 스크립트 실행이 비활성화되었습니다."라고 말합니다.
- 을 .ps1 의 .ps1 파일에 .
PATH
예를 들어 폴더.\folderSystem32 폴더System32
설정 후:
- +를 누릅니다.
- 출을 합니다.
powershell Start-Process powershell -Verb runAs <ps1_file>
이제 하나의 명령줄에서만 모든 것을 실행할 수 있습니다.위의 내용은 Windows 8 Basic 64비트에서 작동합니다.
저는 제 방식을 본 적이 없어서 한번 해보세요.훨씬 쉽게 따라할 수 있고 설치 공간도 훨씬 작습니다.
if([bool]([Security.Principal.WindowsIdentity]::GetCurrent()).Groups -notcontains "S-1-5-32-544") {
Start Powershell -ArgumentList "& '$MyInvocation.MyCommand.Path'" -Verb runas
}
간단히 말해 현재 Powershell 세션이 관리자 권한으로 호출된 경우 현재 ID를 가져올 때 관리자 그룹의 잘 알려진 SID가 그룹에 표시됩니다.계정이 해당 그룹의 멤버인 경우에도 상승된 자격 증명으로 프로세스를 호출하지 않으면 SID가 표시되지 않습니다.
이 대답들의 거의 대부분은 마이크로소프트의 벤 암스트롱이 실제로 무엇을 하고 있고 같은 루틴을 모방하는 방법을 실제로 파악하지 않으면서 그것을 달성하는 방법에 대한 엄청나게 인기 있는 방법을 변형한 것입니다.
명령 출력을 현재 날짜가 포함된 텍스트 파일 이름에 추가하려면 다음과 같은 작업을 수행합니다.
$winupdfile = 'Windows-Update-' + $(get-date -f MM-dd-yyyy) + '.txt'
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -Command `"Get-WUInstall -AcceptAll | Out-File $env:USERPROFILE\$winupdfile -Append`"" -Verb RunAs; exit } else { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -Command `"Get-WUInstall -AcceptAll | Out-File $env:USERPROFILE\$winupdfile -Append`""; exit }
이것은 해명입니다...
파워셸 RUNAS / SAVECRED 자격 증명이 "안전하지 않다"고 시도한 후 자격 증명 캐시에 관리자 ID와 암호를 추가하고 다른 곳에서 사용할 수 있습니다.이 작업을 완료한 경우 항목을 확인하고 제거하는 것이 좋습니다.
프로그램을 admin으로 실행하기 위한 UAC(입구점)가 없으면 동일한 코드 BLOB에 사용자 코드와 관리 코드가 혼합되어 있을 수 없으므로 프로그램 또는 코드를 검토합니다.이것은 Linux에서 sudo(같은 것)일 것입니다.
UAC에는 프로그램의 매니페스트에 생성된 프롬프트 또는 진입점의 세 가지 유형이 있습니다.프로그램을 상승시키지 않으므로 UAC가 없고 관리가 필요한 경우 관리가 실패합니다.UAC는 관리자 요구 사항이 양호하지만 인증 없이 코드 실행을 방지하고 사용자 수준에서 실행되는 혼합 코드 시나리오를 방지합니다.
시작부터 PowerShell 상승 > 실행
2012R2 또는 2016년에는 두 번의 셸링 없이 "실행" 명령에서 상승된 파워셸을 실행할 수 없습니다.
C:\Windows\SysWOW64\Windows PowerShell\v1.0\powershell - 명령 "saps PowerShell - Verb RunAs"
그것은 너무 쉬웠던 것으로 드러났습니다.관리자로 cmd를 실행하기만 하면 됩니다.다음 입력explorer.exe
Enter 키를 누릅니다.그러면 Windows 탐색기가 열립니다.이제 실행할 PowerShell 스크립트를 마우스 오른쪽 버튼으로 클릭하고 "PowerShell로 실행"을 선택하면 관리자 모드에서 PowerShell로 실행됩니다.
정책을 실행하도록 설정하고 Y를 입력한 후 Enter 키를 누릅니다.이제 스크립트가 PowerShell에서 관리자로 실행됩니다.빨간색으로 표시되는 경우 정책이 아직 적용되지 않았음을 의미합니다.그런 다음 다시 시도하면 잘 작동할 것입니다.
언급URL : https://stackoverflow.com/questions/7690994/running-a-command-as-administrator-using-powershell
'IT' 카테고리의 다른 글
원격 마스터를 로컬 분기에 병합하는 방법 (0) | 2023.05.23 |
---|---|
gitrebase: "error: cannot stat 'file': 권한이 거부되었습니다." (0) | 2023.05.23 |
Git 저장소에서 모든 태그 삭제 (0) | 2023.05.23 |
Excel 시트를 통해 Python 루프, 한 쪽에 배치 (0) | 2023.05.23 |
Postgres: "오류: 캐시된 계획은 결과 유형을 변경할 수 없습니다." (0) | 2023.05.18 |