PowerShell

PowerShell을 이용한 정책 확인 및 수정

delmaster 2016. 3. 30. 10:43

파워쉘을 이용하여 그룹정책개체 (GPO) 를 확인하고 수정하는 방법입니다. Powershell에서 Get-GPRegistryValue 명령어와 Set-GPRegistryValue 명령을 통해 레지스트리 기반 정책에 대한 정책 내용 확인과 정책 수정을 할 수 있겠습니다.

 

파워쉘을 통해 방화벽 정책내의 규칙을 수정하기 위해 시작되었으나 각 규칙의 수정은 불가능하고 규칙의 생성 및 삭제만 가능했습니다.

일반적인 레지스트리 기반 정책은 정책 설정을 변경하는것이 가능합니다.

 

아래 예제는 제어판 사용에 대한 정책과 방화벽 정책내의 규칙에 대한 내용입니다.

 

[제어판 정책]

 

1. '제어판 사용 금지 정책' 생성 후 내용 확인

GPMC

 

 

 2. 실제 경로로 이동하여 Registry 파일을 확인하기 위해 경로 확인

정책 GUID

 

 

3. C:\Windows\SYSVOL\sysvol\도메인명\Policies\2번에서확인한GUID\User 경로로 이동 후 Registry 파일을 열어 정책에 대한 레지스트리 경로 확인. 경로 뒤 'NoControlPanel' 부분은 ValueName에 해당되니 참고 하면 되겠습니다.

붉은색 글자는 사용하는 환경 및 정책 설정에 따라 변경될 수 있습니다.

정책 레지스트리

 

 

4. 상기 3번에서 확인한 Registry 경로를 이용하여 정책 정보 확인 (아래 명령어는 한줄입니다.)

Get-GPRegistryValue -Name "제어판 사용 금지" -Key "hkcu\software\microsoft\windows\currentversion\policies\explorer"

 정책 값(Value)에 대한 형식(Type)은 'DWord' 이고 'HasValue' 를 통해 정책이 구성되 있음을 알 수 있습니다.

이때 정책은 'Value' 부분에서 '사용' 또는 '사용안함'이 정의되어 있는데 'Value' 값이 '1' 이기 때문에 '사용'으로 정의 되어있음을 알 수 있습니다. 만약 '사용안함' 으로 되어있다면 값은 당연히 '0' 으로 정의 되어 있을겁니다.Get-GPRegistryValue

 

 

5. 명령을 통해 정책 설정을 변경합니다.  기존 '사용' 에서 '사용안함' 으로 변경하겠습니다. (아래 명령어는 한줄입니다.)

set-GPRegistryValue -Name "제어판 사용 금지" -Key "hkcu\software\microsoft\windows\currentversion\policies\explorer" -Type DWord -ValueName Nocontrolpanel -Value 0

Set-GPRegistryValue

 

 

6. 변경된 내용을 확인하기 위해 아래의 명령어를 통해 확인해보면 정책 설정이 변경되었음을 알 수 있습니다. (아래 명령어는 한줄입니다.)

Get-GPRegistryValue -Name "제어판 사용 금지" -Key "hkcu\software\microsoft\windows\currentversion\policies\explorer"

Get-GPRegistryValue

 

 

7. GUI 환경에서 확인하기 위해 GMPC.msc 를 실행시켜 그룹정책 관리콘솔에서 해당 정책의 내용을 확인해보면 기존 '사용' 에서 '사용안함' 으로 변경되었음을 확인 할 수 있습니다.

GPMC

 

 

8. 만약 해당 정책을 '구성되지 않음' 으로 변경하려면 아래 명령을 통해 정의 할 수 있겠습니다.

set-GPRegistryValue -Name "제어판 사용 금지" -Key "hkcu\software\microsoft\windows\currentversion\policies\explorer" -Disable

Set-GPRegistryValue

 

 

9. Get-GPRegistryValue 명령을 통해 확인해보면 'HasValue' 값이 'False' 즉, '구성되지 않음' 으로 바뀐것을 확인할 수 있습니다.

Get-GPRegistryValue

 

 

10. GUI에서도 확인해 보면 '구성되지 않음' 으로 변경되었음을 알 수 있습니다.GPME

 

 

 

 

 

[방화벽 정책의 규칙]

 

글의 시작에서도 언급했듯이 규칙을 변경하는 것은 불가능합니다. (물론 기존 내용을 복사하여 새롭게 만들고 기존 내용을 지워버리는 응용(?)을 하는것은 가능하나 명령으로서 지원되지 않습니다.)

 

1. 아래의 명령어로 내용 확인

(만들어둔 방화벽 정책의 이름은 'firewall'이고 규칙의 이름은 'IN_8088' 이며, 해당 정책의 인바운드 허용 포트는'8088'이며 '영역'에서 특정 IP를 넣어 두었습니다.)

PS C:\> Get-GPRegistryValue -Name "firewall" -Key hklm\software\policies\microsoft\windowsfirewall\firewallrules

KeyPath     : software\policies\microsoft\windowsfirewall\firewallrules
FullKeyPath : HKEY_LOCAL_MACHINE\software\policies\microsoft\windowsfirewall\fi
              rewallrules
Hive        : LocalMachine
PolicyState : Set
Value       : v2.20|Action=Allow|Active=TRUE|Dir=In|Protocol=6|LPort=8088|RA4=1
              92.168.100.10|RA4=192.168.250.0/255.255.255.0|RA4=192.168.200.10-
              192.168.200.20|Name=IN_8088|

 

 

2. 아래의 명령어로 규칙 변경 시도

set-GPRegistryValue -Name "firewall" -Key hklm\software\policies\microsoft\windowsfirewall\firewallrules -type string -Value "v2.20|Action=Allow|Active=TRUE|Dir=In|Protocol=6|LPort=8088|RA4=192.168.111.0/255.255.255.0|NAME=IN_8088|" -Additive

 

 

3. 결과를 확인해보면(명령어에 대한 결과물 캡쳐를 빼먹었습니다 ㅎㅎ) 기존 규칙은 남아 있고 새로운 규칙이 생성되었음을 알 수 있습니다.방화벽 정책

 

방화벽 규칙