홈페이지 » 어떻게 » PowerShell 스크립트를 사용하도록 Windows를보다 쉽게 ​​구성하는 방법

    PowerShell 스크립트를 사용하도록 Windows를보다 쉽게 ​​구성하는 방법

    Windows 및 PowerShell에는 최종 사용자가 일상적으로 실수로 스크립트를 시작하지 못하도록하는 기본 제공 보안 기능 및 기본 구성이 있습니다. 그러나 일일 활동에 일상적으로 PowerShell 스크립트를 작성하고 실행하는 것이 이점 이라기보다는 불편할 수 있습니다. 여기서는 보안을 완전히 손상시키지 않고 이러한 기능을 해결하는 방법을 설명합니다..

    Windows 및 PowerShell이 ​​스크립트 실행을 방지하는 방법 및 이유.

    PowerShell은 사실 Windows 시스템에서 CMD 및 일괄 처리 스크립트를 대체하기위한 명령 셸 및 스크립팅 언어입니다. 따라서 PowerShell 스크립트는 명령 줄에서 수동으로 수행 할 수있는 모든 작업을 수행하도록 구성 할 수 있습니다. 이는 시스템에서 실제적으로 사용자 계정의 제한 사항까지 모든 변경을 가능하게하는 것과 동일합니다. 따라서 PowerShell 스크립트를 두 번 클릭하고 전체 관리자 권한으로 실행할 수 있다면 이처럼 간단한 한 줄짜리 프로그램만으로도 하루를 망칠 수 있습니다.

    Get-ChildItem "$ env : SystemDrive \"-Recurse -ErrorAction SilentlyContinue | 항목 제거 - 강제 - 반환 - 오류 조치 자동 종료 계속

    위의 명령을 실행하지 마십시오.!

    그것은 단순히 파일 시스템을 거치며 가능한 모든 것을 삭제합니다. 흥미롭게도이 방법을 사용하면 상승 된 세션에서 실행할 때조차도 생각만큼 빠르게 시스템이 작동하지 않을 수 있습니다. 그러나 누군가이 스크립트를 실행 한 후 전화를 걸면 갑자기 파일을 찾을 수 없거나 프로그램을 실행할 수 없으므로 "다시 켜거나 끄십시오"라는 메시지가 Windows 시동 복구로 이어질 수 있습니다. 문제를 해결하기 위해 할 수있는 일은 없습니다. 더 악화 될 수있는 것은, 파일 시스템을 그냥 쓰레기처럼 만드는 대신 친구가 키로거 또는 원격 액세스 서비스를 다운로드하여 설치하는 것을 속일 수 있다는 것입니다. 그런 다음 시동 복구에 대해 질문하는 대신 은행 사기에 대한 질문을 경찰에 요청할 수 있습니다!

    지금까지 말하자면 최종 사용자를 보호하기 위해 특정 사물이 필요한 이유가 분명해야합니다. 그러나 고급 사용자, 시스템 관리자 및 기타 괴짜는 일반적으로 이러한 위협을 조금 더 조심하고, 쉽게 찾아 내고 쉽게 피하는 방법을 알고 있으며 업무를 끝내기 만하면됩니다. 이렇게하려면 몇 가지 도로 차단을 사용 중지하거나 해결해야합니다.

    • PowerShell은 기본적으로 외부 스크립트 실행을 허용하지 않습니다..
      PowerShell의 ExecutionPolicy 설정은 모든 버전의 Windows에서 기본적으로 외부 스크립트의 실행을 차단합니다. 일부 Windows 버전에서 기본값은 스크립트 실행을 전혀 허용하지 않습니다. Windows 7에서 PowerShell 스크립트의 실행을 허용하는 방법에서이 설정을 변경하는 방법을 보여 주었지만 여기서도 몇 가지 수준으로 다루겠습니다..
    • PowerShell은 기본적으로 .PS1 파일 확장명과 연결되지 않습니다..
      처음에는 PowerShell Geek School 시리즈에서이 기능을 사용했습니다. Windows에서는 PowerShell 명령 인터프리터로 보내는 대신 .PS1 파일의 기본 동작을 메모장에서 열도록 설정합니다. 악의적 인 스크립트를 단순히 두 번 클릭했을 때 실수로 실행되는 것을 직접 방지합니다..
    • 일부 PowerShell 스크립트는 관리자 권한없이 작동하지 않습니다..
      관리자 수준의 계정으로 실행하는 경우에도 특정 작업을 수행하려면 UAC (사용자 계정 컨트롤)를 통과해야합니다. 명령 행 도구의 경우, 이것은 최소한으로 말하기가 약간 번거로울 수 있습니다. 우리는 UAC를 비활성화하지 않으려 고하지만 UAC를 다루기가 좀 더 쉬워지면 여전히 유용합니다..

    이러한 동일한 문제는 배치 파일을 사용하여 PowerShell 스크립트를보다 쉽게 ​​실행하는 방법에 나와 있습니다. 여기서 배치 파일을 작성하여 일시적으로 처리 할 수 ​​있습니다. 이제는 장기적인 솔루션으로 시스템을 설정하는 방법을 보여 드리겠습니다. 일반적으로 사용자가 독점적으로 사용하지 않는 시스템에서 이러한 변경을해서는 안됩니다. 그렇지 않으면 다른 사용자가 이러한 기능을 방지해야하는 동일한 문제에 부딪 힐 위험이 커집니다.

    .PS1 파일 연결 변경.

    첫 번째, 그리고 아마도 가장 중요한, 주위를 돌아 다니는 성가심은 .PS1 파일의 기본 연결입니다. PowerShell.exe 이외의 다른 파일에 이러한 파일을 연결하면 원하지 않는 스크립트가 실수로 실행되는 것을 방지 할 수 있습니다. 그러나 PowerShell이 ​​PowerShell 스크립트를 편집 할 수 있도록 특별히 설계된 ISE (Integrated Scripting Environment)와 함께 제공된다는 점을 감안할 때 기본적으로 메모장에서 .PS1 파일을 열려고하는 이유는 무엇입니까? 두 번 클릭 실행 기능을 사용하도록 완전히 전환 할 준비가되지 않은 경우에도 이러한 설정을 조정할 수 있습니다.

    .PS1 파일 연결을 기본 프로그램 제어판에서 원하는 프로그램으로 변경할 수 있지만 직접 레지스트리를 파헤 치면 파일이 열리는 방식을 조금 더 제어 할 수 있습니다. 또한 .PS1 파일의 상황에 맞는 메뉴에서 사용할 수있는 추가 옵션을 설정하거나 변경할 수 있습니다. 이 작업을 수행하기 전에 레지스트리를 백업하는 것을 잊지 마십시오.!

    PowerShell 스크립트가 열리는 방식을 제어하는 ​​레지스트리 설정은 다음 위치에 저장됩니다.

    HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell

    이러한 설정을 변경하기 전에 이러한 설정을 탐색하려면 해당 키와 Regedit의 하위 키를 살펴보십시오. Shell 키에는 "Open"으로 설정된 "(Default)"값 하나만 있으면됩니다. 이것은 파일을 두 번 클릭하기위한 기본 동작에 대한 포인터입니다. 하위 키에서 볼 수 있습니다..

    Shell 키를 펼치면 세 개의 하위 키가 표시됩니다. 이 각각은 PowerShell 스크립트와 관련된 수행 할 수있는 작업을 나타냅니다.

    각 키를 확장하여 값을 탐색 할 수 있지만 기본적으로 다음 기본값과 동일합니다.

    • 0 - PowerShell로 실행합니다. "PowerShell로 실행"은 실제로 PowerShell 스크립트의 컨텍스트 메뉴에 이미있는 옵션의 이름입니다. 텍스트는 다른 것과 마찬가지로 키 이름을 사용하는 대신 다른 위치에서 가져온 것입니다. 아직 기본 두 번 클릭 동작이 아닙니다..
    • 편집 - PowerShell ISE에서 엽니 다. 이것은 메모장보다 훨씬 더 의미가 있지만 여전히 기본적으로 .PS1 파일을 마우스 오른쪽 버튼으로 클릭해야합니다..
    • 열기 - 메모장에서 엽니 다. 이 키 이름은 Shell 키의 "(기본값)"값에 저장된 문자열이기도합니다. 즉, 파일을 두 번 클릭하면 "열기"되며 해당 작업은 일반적으로 메모장을 사용하도록 설정됩니다..

    이미 사용 가능한 사전 작성된 명령 문자열을 사용하려면 셸 키에서 "(기본값)"값을 변경하여 두 번 클릭 할 작업과 일치하는 키의 이름과 일치 시키면됩니다. 이 작업은 Regedit 내에서 쉽게 수행 할 수 있습니다. 또는 PowerShell을 사용하여 레지스트리를 탐색하는 데 필요한 자습서에서 얻은 교훈과 작은 PSDrive를 사용하여 시스템을 구성 할 수있는 재사용 가능한 스크립트를 작성할 수 있습니다. 아래 명령은 CMD를 관리자로 실행하는 것과 마찬가지로 상승 된 PowerShell 세션에서 실행해야합니다.

    첫째, PSDrive는 기본적으로 설정되지 않으므로 HKEY_CLASSES_ROOT에 맞게 구성해야합니다. 이 명령은 다음과 같습니다.

    New-PSDrive HKCR 레지스트리 HKEY_CLASSES_ROOT

    이제 일반 HKCU 및 HKLM PSDrives에서와 마찬가지로 HKEY_CLASSES_ROOT의 레지스트리 키와 값을 탐색하고 편집 할 수 있습니다..

    PowerShell 스크립트를 직접 시작하기 위해 두 번 클릭을 구성하려면 :

    Set-ItemProperty HKCR : \ Microsoft.PowerShellScript.1 \ Shell '(기본값)'0

    PowerShell ISE에서 PowerShell 스크립트를 열려면 두 번 클릭하여 구성하려면 다음과 같이하십시오.

    Set-ItemProperty HKCR : \ Microsoft.PowerShellScript.1 \ Shell '(기본값) "편집"

    기본값을 복원하려면 (두 번 클릭하여 PowerShell 스크립트를 메모장에서 열 수 있음)

    Set-ItemProperty HKCR : \ Microsoft.PowerShellScript.1 \ Shell '(기본값) "열기'

    기본 더블 클릭 동작 변경의 기본 사항입니다. PowerShell 스크립트가 다음 절의 Explorer에서 PowerShell로 열릴 때이를 처리하는 방법을 사용자 지정하는 방법에 대해 자세히 설명합니다. 범위를 지정하면 PSDrive가 세션 전체에서 지속되지 않습니다. 따라서이 목적을 위해 빌드 한 모든 구성 스크립트의 시작 부분에 New-PSDrive 라인을 포함 시키거나 PowerShell 프로파일에 추가하려고합니다. 그렇지 않으면이 방법으로 변경하기 전에 해당 비트를 수동으로 실행해야합니다..

    PowerShell ExecutionPolicy 설정 변경.

    PowerShell의 ExecutionPolicy는 악성 스크립트 실행에 대한 또 다른 보호 계층입니다. 이 옵션에는 여러 가지가 있으며 두 가지 방법으로 설정할 수 있습니다. 대부분의 보안 수준에서 최소 보안 수준까지 사용할 수있는 옵션은 다음과 같습니다.

    • 제한됨 - 실행할 수있는 스크립트가 없습니다. (대부분의 시스템에서는 기본 설정입니다.) 그러면 프로필 스크립트가 실행되지 않습니다..
    • AllSigned - 사용자에게 메시지를 표시하지 않고 실행하려면 모든 스크립트에 신뢰할 수있는 게시자가 디지털 서명해야합니다. 신뢰할 수없는 것으로 명시된 게시자가 서명 한 스크립트 또는 디지털 서명되지 않은 스크립트는 실행되지 않습니다. PowerShell은 아직 신뢰할 수 있거나 신뢰할 수없는 것으로 정의되지 않은 게시자가 스크립트에 서명 한 경우 사용자에게 확인 메시지를 표시합니다. 프로필 스크립트에 디지털 서명하지 않고 해당 서명에 신뢰를 설정 한 경우이를 실행할 수 없습니다. 잘못된 게시자를 신뢰하는 경우 악성 스크립트가 계속 실행될 수 있으므로 신뢰할 수있는 게시자를주의하십시오..
    • RemoteSigned - 인터넷에서 다운로드 한 스크립트의 경우 "AllSigned"와 실질적으로 동일합니다. 그러나 로컬에서 생성되거나 인터넷 이외의 소스에서 가져온 스크립트는 확인 메시지없이 실행될 수 있습니다. 여기에서 어떤 디지털 서명을 신뢰할지를 조심해야하지만 실행하도록 선택한 서명되지 않은 스크립트를 더 조심해야합니다. 이것은 디지털 방식으로 서명하지 않고도 작동하는 프로파일 스크립트를 가질 수있는 가장 높은 보안 수준입니다.
    • 제한 없음 - 모든 스크립트를 실행할 수 있지만 인터넷의 스크립트에 대한 확인 메시지가 필요합니다. 이 시점부터 신뢰할 수없는 스크립트를 실행하는 것은 전적으로 귀하에게 달려 있습니다..
    • 우회 - 모든 것은 경고없이 실행됩니다. 이걸 조심해..
    • 정의되지 않음 - 현재 범위에서 정의 된 정책이 없습니다. 이것은 더 낮은 범위에서 정의 된 정책 (자세한 내용은 아래 참조) 또는 OS 기본값으로 폴백 (fallback)을 허용하는 데 사용됩니다.

    정의되지 않음에 대한 설명에서 제안한 것처럼 위 정책은 여러 범위 중 하나 이상에서 설정할 수 있습니다. -List 매개 변수와 함께 Get-ExecutionPolicy를 사용하여 모든 범위와 해당 현재 구성을 볼 수 있습니다..

    범위는 선행 순서로 나열되며, 정의 된 최상위 범위는 다른 모든 항목보다 우선합니다. 정책이 정의되지 않은 경우 시스템은 기본 설정으로 돌아갑니다 (대부분의 경우 제한됨).

    • MachinePolicy는 컴퓨터 수준에서 적용되는 그룹 정책을 나타냅니다. 이것은 일반적으로 도메인에서만 적용되지만 로컬에서도 수행 할 수 있습니다..
    • UserPolicy는 사용자에게 유효한 그룹 정책을 나타냅니다. 또한 일반적으로 엔터프라이즈 환경에서만 사용됩니다..
    • 프로세스는이 PowerShell 인스턴스에 특정한 범위입니다. 이 범위의 정책을 변경해도 실행중인 다른 PowerShell 프로세스에는 영향을 미치지 않으며이 세션이 종료 된 후에는 효과가 없습니다. PowerShell을 시작할 때 -ExecutionPolicy 매개 변수로 구성하거나 세션 내에서 적절한 Set-ExecutionPolicy 구문을 사용하여 설정할 수 있습니다.
    • CurrentUser는 로컬 레지스트리에서 구성되고 PowerShell을 시작하는 데 사용되는 사용자 계정에 적용되는 범위입니다. 이 범위는 Set-ExecutionPolicy를 사용하여 수정할 수 있습니다..
    • LocalMachine은 로컬 레지스트리에 구성되어 시스템의 모든 사용자에게 적용되는 범위입니다. 이것은 -Scope 매개 변수없이 Set-ExecutionPolicy를 실행하면 변경되는 기본 범위입니다. 시스템의 모든 사용자에게 적용되므로 승격 된 세션에서만 변경할 수 있습니다.

    이 기사는 주로 유용성을 높이기 위해 보안을 둘러싼 것에 불과하므로 하위 3 개 범위에 관심이 있습니다. MachinePolicy 및 UserPolicy 설정은 단순히 무시하지 않는 제한적인 정책을 적용하려는 경우에만 매우 유용합니다. 프로세스 수준 또는 그 이하의 변경 사항을 유지함으로써 우리는 언제든지 주어진 상황에 적절하다고 판단되는 정책 설정을 쉽게 사용할 수 있습니다.

    보안과 유용성 사이의 균형을 유지하기 위해 스크린 샷에 표시된 정책이 가장 좋습니다. LocalMachine 정책을 Restricted로 설정하면 일반적으로 다른 사람이 스크립트를 실행할 수 없습니다. 물론 많은 노력없이 무엇을하고 있는지 알고있는 사용자는이를 무시할 수 있습니다. 그러나 기술에 익숙하지 않은 사용자가 실수로 PowerShell에서 무언가를 유발하지 못하도록해야합니다. CurrentUser (예 : you)를 Unrestricted로 설정하면 원하는 경우 명령 줄에서 직접 스크립트를 실행할 수 있지만 인터넷에서 다운로드 한 스크립트에 대해서는주의를 상기시킵니다. 프로세스 수준의 RemoteSigned 설정은 PowerShell 스크립트의 동작을 제어하는 ​​레지스트리 값에서 PowerShell.exe 또는 (아래에서 설명 할 것처럼) 바로 가기에서 수행해야합니다. 이렇게하면 작성하는 모든 스크립트에 대해 손쉽게 두 번 클릭하여 실행하는 기능을 허용하면서 외부 소스로부터 의도하지 않은 (잠재적으로 악의적 인) 스크립트를 실행하는 것을 방지 할 수 있습니다. 스크립트를 실수로 두 번 클릭하는 것이 대화식 세션에서 수동으로 호출하는 것보다 훨씬 쉽기 때문에 여기에서이 작업을 수행하려고합니다..

    위 스크린 샷에서와 같이 CurrentUser 및 LocalMachine 정책을 설정하려면 높은 PowerShell 세션에서 다음 명령을 실행하십시오.

    Set-ExecutionPolicy 제한된 Set-ExecutionPolicy 제한없는 -Scope CurrentUser

    Explorer에서 실행되는 스크립트에 RemoteSigned 정책을 적용하려면 이전에보고 있던 레지스트리 키 중 하나의 값을 변경해야합니다. 이는 PowerShell 또는 Windows 버전에 따라 AllSigned를 제외한 모든 ExecutionPolicy 설정을 무시하는 기본 구성 일 수 있으므로 특히 중요합니다. 컴퓨터의 현재 구성을 보려면이 명령을 실행하십시오 (HKCR PSDrive가 먼저 매핑되어 있는지 확인하십시오).

    Get-ItemProperty HKCR : \ Microsoft.PowerShellScript.1 \ Shell \ Command | 개체 선택 (기본값) '

    기본 구성은 다음 두 문자열 중 하나이거나 매우 비슷합니다.

    (Windows 7 SP1 x64, PowerShell 2.0에서 볼 수 있음)

    "C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "- 파일" "% 1"

    (Windows 8.1 x64, PowerShell 4.0에서 볼 수 있음)

    "(Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass, & '% 1 ("C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe " ''

    첫 번째 스크립트는 기존의 ExecutionPolicy 설정에서 스크립트를 실행하기 때문에 나쁘지 않습니다. 사고가 자주 발생하기 쉬운 작업을보다 엄격하게 제한함으로써 더 좋게 만들 수 있지만, 원래는 더블 클릭으로 트리거하려고하지 않았으며, 기본 정책은 일반적으로 제한적입니다. 그러나 두 번째 옵션은 ExecutionPolicy를 지정하지 않은 상태에서도 사용할 수 있습니다. 바이 패스는 프로세스 범위에 적용되므로 Explorer에서 스크립트를 실행할 때 실행되는 세션에만 영향을줍니다. 그러나 이것은 당신이 당신의 정책이 당신의 정책이 금지하는 것을 기대하고 (그리고 원하는) 스크립트를 시작하게 할 수 있음을 의미한다..

    Explorer에서 실행 한 스크립트의 프로세스 수준 ExecutionPolicy를 위 스크린 샷과 같이 설정하려면 방금 쿼리 한 것과 동일한 레지스트리 값을 수정해야합니다. Regedit에서는 다음과 같이 수동으로 변경할 수 있습니다.

    "C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" ""% 1 "

    원하는 경우 PowerShell 내에서 설정을 변경할 수도 있습니다. HKCR PSDrive가 매핑 된 상승 된 세션에서이 작업을 수행해야합니다..

    Set-ItemProperty HKCR : \ Microsoft.PowerShellScript.1 \ Shell \ Command (기본값) ""C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe ""-ExecutionPolicy ""RemoteSigned ""-file "" %1"'

    PowerShell 스크립트를 관리자로 실행.

    UAC를 완전히 사용하지 않는 것이 좋지 않은 것처럼 관리자 권한이 필요한 작업을 실제로 수행해야하는 경우가 아니면 높은 권한으로 스크립트 나 프로그램을 실행하는 것도 나쁜 보안 방법입니다. 따라서 PowerShell 스크립트의 기본 동작으로 UAC 프롬프트를 작성하는 것은 좋지 않습니다. 그러나 필요할 때마다 상승 된 세션에서 스크립트를 쉽게 실행할 수 있도록 새로운 컨텍스트 메뉴 옵션을 추가 할 수 있습니다. 이는 "Open with Notepad"를 모든 파일의 상황에 맞는 메뉴에 추가하는 방법과 유사하지만 여기서는 PowerShell 스크립트 만 대상으로합니다. 또한 이전 기사에서 사용 된 몇 가지 기술을 계속 수행하려고합니다. 여기서는 레지스트리 해킹 대신 배치 파일을 사용하여 PowerShell 스크립트를 시작했습니다.

    Regedit에서이 작업을 수행하려면 쉘 키로 다시 이동하십시오.

    HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell

    거기에 새 하위 키를 만듭니다. "PowerShell (관리자)로 실행"이라고합니다. 그 아래에 "Command"라는 또 다른 하위 키를 만듭니다. 그런 다음 Command 아래의 "(Default)"값을 this로 설정하십시오.

    "C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" ""& 시작 프로세스 PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File \ "% 1 \"'-Verb RunAs  "

    PowerShell에서 동일한 작업을 수행하는 경우 실제로는 세 줄이 필요합니다. 각각의 새 키에 대해 하나, Command에 "(기본값)"값을 설정하는 키. 표고와 HKCR 매핑을 잊지 마십시오..

    PowerShell (Admin) '새 항목'HKCR : \ Microsoft.PowerShellScript.1 \ Shell \ Run에서 PowerShell (Admin) \ Command 'Set-ItemProperty'로 새 항목 'HKCR : \ Microsoft.PowerShellScript.1 \ Shell \ PowerShell (Admin) \ Command "(기본값)" "C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe"로 HKCR : \ Microsoft.PowerShellScript.1 \ Shell \ Run "-Command" ""& 시작 프로세스 PowerShell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -File \"% 1 \ ""- 동사 RunAs " '

    또한 PowerShell을 통해 입력되는 문자열과 레지스트리에 들어갈 실제 값의 차이에주의를 기울여야합니다. 특히 우리는 명령 구문 분석에서 오류를 피하기 위해 모든 것을 단일 따옴표로 묶고 내부 작은 따옴표를 이중으로 사용해야합니다..

    이제 "PowerShell (관리자)로 실행"이라는 PowerShell 스크립트에 대한 새로운 컨텍스트 메뉴 항목이 있어야합니다..

    새 옵션은 두 개의 연속적인 PowerShell 인스턴스를 생성합니다. 첫 번째 버전은 "-Verb RunAs"매개 변수와 함께 Start-Process를 사용하여 새 세션에 대한 권한 상승을 요청하는 두 번째 버전의 시작 프로그램입니다. 여기에서 스크립트는 UAC 프롬프트를 클릭 한 후에 관리자 권한으로 실행할 수 있어야합니다..

    마감 처리.

    이 작업을 조금만 더 손쉽게 진행할 수있는 몇 가지 수정 사항이 있습니다. 하나는 메모장 기능을 완전히 없애는 것입니다. 편집 (아래) 명령 키의 "(기본값)"값을 열기 아래의 같은 위치에 복사하십시오.

    "C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe" "% 1"

    또는, PowerShell의이 비트를 사용할 수 있습니다 (물론 Admin & HKCR 포함).

    Set-ItemProperty HKCR : \ Microsoft.PowerShellScript.1 \ Shell \ Open \ Command '(기본값) ""C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe ""% 1 "'

    스크립트가 완료되면 콘솔이 사라지는 습관이 있습니다. 이 경우 스크립트 출력에서 ​​오류 또는 기타 유용한 정보를 검토 할 기회가 없습니다. 물론 각 스크립트의 끝 부분에 일시 중지를 넣어서 처리 할 수 ​​있습니다. 또는 "-NoExit"매개 변수를 포함하도록 명령 키의 "(기본값)"값을 수정할 수 있습니다. 수정 된 값은 다음과 같습니다..

    (관리자 액세스 권한 없음)

    "C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"

    (관리자 권한 있음)

    "C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "- 명령" ""& 시작 프로세스 PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File \ "% 1 \"' 동사 RunAs "

    그리고 물론, PowerShell 명령에서도 그러한 것들을 제공 할 것입니다. 마지막 알림 : Elevation & HKCR!

    (비 관리자)

    "C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "(기본값)"-Microsoft.PowerShellScript.1 \ Shell \ Command ' -file "" "% 1" '

    (관리자)

    PowerShell (Admin) \ Command (기본값) ""C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "를 사용하여 Set-ItemProperty 'HKCR : \ Microsoft.PowerShellScript.1 \ Shell \ ""& Start-Process PowerShell.exe -ArgumentList "-NoExit -ExecutionPolicy RemoteSigned -File \"% 1 \ ""- 동사 RunAs " '

    그것을 회전시키기 위해 가져 가라..

    이를 테스트하기 위해 ExecutionPolicy 설정을 제 위치에 표시하고 스크립트가 관리자 권한으로 시작되었는지 여부를 보여주는 스크립트를 사용합니다. 이 스크립트는 "MyScript.ps1"이라고 불리우며 샘플 시스템의 "D : \ Script Lab"에 저장됩니다. 아래 코드는 참조 용입니다..

    IsInRole ([Security.Principal.WindowsBuiltInRole] "관리자")) Write-Output '관리자 권한으로 실행 중입니다.' else (Security.Principal.WindowsIdentity :: GetCurrent () Write-Output 'Running Limited!' Get-ExecutionPolicy -List

    "PowerShell과 함께 실행"작업 사용 :

    UAC를 클릭하면 "PowerShell과 함께 실행 (Admin)"동작을 사용합니다.

    Process 범위에서 실행중인 ExecutionPolicy를 보여주기 위해 Windows에서이 파일을 PowerShell 코드로 인터넷에서 가져온 것으로 생각할 수 있습니다.

    Add-Content -Path 'D : \ Script Lab \ MyScript.ps1'- 값 "[ZoneTransfer] 'nZoneId = 3"-Stream'Zone.Identifier '

    다행히도, 우리는 -NoExit을 활성화했습니다. 그렇지 않으면 그 오류가 깜박 거리고 우리는 알지 못했을 것입니다.!

    Zone.Identifier는 다음과 같이 제거 할 수 있습니다.

    Clear-Content -Path 'D : \ Script Lab \ MyScript.ps1'-Stream 'Zone.Identifier'

    유용한 참고 자료 :

    • 배치 파일에서 PowerShell 스크립트 실행 - Daniel Schroeder의 프로그래밍 블로그
    • PowerShell에서 관리자 권한 확인 - 안녕하세요, Scripting Guy! 블로그