답변:
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
( 명령 줄 안전 트릭에서 )
당신이 사용할 수있는 파워 쉘 4.0은 필요 스크립트의 상단에 :
#Requires -RunAsAdministrator
출력 :
'MyScript.ps1'스크립트에는 관리자로 실행하기위한 "#requires"문이 포함되어 있으므로 실행할 수 없습니다. 현재 Windows PowerShell 세션이 관리자로 실행되고 있지 않습니다. 관리자 권한으로 실행 옵션을 사용하여 Windows PowerShell을 시작한 다음 스크립트를 다시 실행하십시오.
function Test-Administrator
{
$user = [Security.Principal.WindowsIdentity]::GetCurrent();
(New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
위 기능을 실행하십시오. 결과가 True이면 사용자에게 관리자 권한이 있습니다.
그러면 관리자인지 확인하고 그렇지 않은 경우 PowerShell ISE에서 관리자로 다시 열립니다.
도움이 되었기를 바랍니다!
$ver = $host | select version
if ($ver.Version.Major -gt 1) {$Host.Runspace.ThreadOptions = "ReuseThread"}
# Verify that user running script is an administrator
$IsAdmin=[Security.Principal.WindowsIdentity]::GetCurrent()
If ((New-Object Security.Principal.WindowsPrincipal $IsAdmin).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) -eq $FALSE)
{
"`nERROR: You are NOT a local administrator. Run this script after logging on with a local administrator account."
# 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_ise";
# 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
}
위의 답변을 조합하여 스크립트 시작 부분에 다음과 같은 것을 사용할 수 있습니다.
# todo: put this in a dedicated file for reuse and dot-source the file
function Test-Administrator
{
[OutputType([bool])]
param()
process {
[Security.Principal.WindowsPrincipal]$user = [Security.Principal.WindowsIdentity]::GetCurrent();
return $user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator);
}
}
if(-not (Test-Administrator))
{
# TODO: define proper exit codes for the given errors
Write-Error "This script must be executed as Administrator.";
exit 1;
}
$ErrorActionPreference = "Stop";
# do something
또 다른 방법은이 줄로 스크립트를 시작하여 관리자 권한으로 시작하지 않을 때 스크립트가 실행되지 않도록하는 것입니다.
#Requires -RunAsAdministrator