전체 (306)
PowerShell 원격데스크톱 포트 변경

PowrShell을 이용하여 원격 데스크탑 포트 변경하는 내용입니다.

정상 실행에는 관리자 권한이 필요합니다. 

 

아래의 스크립트를 받으신 후 직접 실행시켜도 되고 '로그온 스크립트 정책' 으로 실행하셔도 잘 돌아 갑니다.

스크립트내의 변경할 포트는 53389로 지정되어 있으며 변경해서 사용하면됩니다.

 

 

아래는 파일의 내용입니다.

포트 변경은 아래의 붉은글씨 부분을 수정하시면 되겠습니다.

 

<#
- 내용 : 원격 데스크톱 수신 포트 변경
 - 레지스트리 수정
 - 서비스 재시작
- 작성자 : 이성환 (www.delmaster.net)
- 작성일 : 2016.04.15
- 업데이트 : 2016.04.15
#>


Set-ItemProperty "HKLM:SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name

PortNumber -Value 53389

Restart-Service termservice -Force


 

 

 

 

  Comments
댓글 쓰기
PowerShell 호스트명 확인

PowerShell을 이용하여 현재 컴퓨터의 이름 즉, 호스트명을 가져오기위해 아래의 방법을 사용할 수 있습니다.

 

$env:computername

 

 

  Comments
댓글 쓰기
SSL v2 v3 비활성화

SSL 이슈로 인해 SSL v2 와 SSL v3 Disable이 필요하다면 아래의 레지스트리 경로로 이동하여 작업할 수 있겠습니다.

 

SSL v2

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]

하위에 '새로만들기' > 'DWord(32비트)' 값 선택 > 이름 부분에 'Enabled' 입력 > 데이터 부분에 '0' 입력. > 시스템 재부팅.

 

 

SSL v3

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]

하위에 '새로만들기' > 'DWord(32비트)' 값 선택 > 이름 부분에 'Enabled' 입력 > 데이터 부분에 '0' 입력. > 시스템 재부팅.

'Windows Server' 카테고리의 다른 글

Windows Server 2016 설치  (2) 2016.10.21
6To4 Teredo 비활성화  (0) 2016.09.21
SSL v2 v3 비활성화  (0) 2016.04.04
CMAK 구성  (0) 2016.02.24
Server 2012 .NET Framework 2.0 3.0 3.5 설치  (0) 2016.02.24
윈도우 업데이트 파일 다운로드  (0) 2016.02.24
  Comments
댓글 쓰기
PowerShell을 이용한 정책 확인 및 수정

파워쉘을 이용하여 그룹정책개체 (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. 결과를 확인해보면(명령어에 대한 결과물 캡쳐를 빼먹었습니다 ㅎㅎ) 기존 규칙은 남아 있고 새로운 규칙이 생성되었음을 알 수 있습니다.방화벽 정책

 

방화벽 규칙

'PowerShell' 카테고리의 다른 글

PowerShell 원격데스크톱 포트 변경  (0) 2016.04.20
PowerShell 호스트명 확인  (0) 2016.04.20
PowerShell을 이용한 정책 확인 및 수정  (0) 2016.03.30
PowerShell 조건문 Switch  (0) 2016.03.02
원격 Powershell 실행  (0) 2016.03.02
PowerShell 조건문 IF  (0) 2016.02.29
  Comments
댓글 쓰기
IOPS 계산방법

초당 입출력 즉, IOPS값을 구하는 방법입니다. IOPS는 각 읽기와 쓰기에 대해 별도로 구해야하며, 4k, 64k, 512k 등의 단위로 각각 계산해야 겠습니다.

아래는 IOPS를 계산하는 공식입니다.

 

iops = 1000 (ms/s) / (average read seek time (ms) + (maximum rotational latency (ms) / 2))

maximum rotational latency = 60,000 (ms/min) / rotational speed (rpm)

 


7200RPM Disk의 IOPS 값을 구하는걸 예를들어보면

 

Maximum rotational latency 계산 :
방법1:

7200 / 60 = 120
 - 분당회전수(RPM) / 60초(1분) = 초당 회전수
1000 / 120 = 8.3
 - 1000ms(1초) / 초당회전수 = 초당최대회전지연시간(maximum rotational latency)

 

방법2:

60000 / 7200 = 8.3
 - 60000(1분에대한밀리초(60초 * 1000ms)) / 분당회전수(7200RPM)

참고

maximum rotational latency (ms) / 2:
나누기를 하는 이유는 최대와 최소에 대한 임의적인 평균을 구하기 위해 절반 나눠준다.
: 8.3 / 2 = 4.15

 

5.4k: 5.5
7.2k: 4.15
10k: 3
15k: 2

 

 


결론:
1000ms(1초) /  (평균탐색시간 + 평균회전지연시간) = 초당입출력횟수
=
1000 / (8.9 + 4.1) = 76.9 IOPS


7200RPM의 경우 일반적인 4k 읽기ms : 8.9
7200RPM의 경우 일반적인 4k 쓰기ms : 10.9


최종결론:
평균 탐색시간과 평균회전대기시간을 정확하게 알 수 없기때문에 공식으로는 각디스크에 대한 정확한 값을 구할수없습니다.
정확한 정보를 확인하기 위해 IOmeter와 같은 S/W를 이용할 수 있겠습니다.

  Comments
댓글 쓰기
PowerShell 조건문 Switch

파워쉘의 조건문 중 하나인 스위치를 사용하면 상황에 따라 'IF'문 보다 간단하게 작업을 처리할 수 있습니다.

사용방법은 아래와 같습니다.

 

조건에 쓰일 값을 대입 - 여기서는 임의로 '5' 라는 값을 대입

switch (5)
{
    1 { Write "1입니다." }
    2 { Write "2입니다." }
    3 { Write "3입니다." }
    4 { write "4입니다." }
    5 { write "5입니다." }
    default { "1,2,3,4,5중에 없습니다." }
}

 

 

 

 

상기 내용에 변수를 사용하면 아래와 같이 사용될 수 있겠습니다.

$input = 3
switch ($input)
{
    1 { Write "1입니다." }
    2 { Write "2입니다." }
    3 { Write "3입니다." }
    4 { write "4입니다." }
    5 { write "5입니다." }
    default { "1,2,3,4,5중에 없습니다." }
}

 

파워쉘 스위치

 

 

 

만약 두개 이상의 값을 사용한다면 아래와 같이 사용 가능합니다.

'break' 의 유무에 대해서 이해하면 되겠습니다.

 

switch (1,2)
{
    1 { Write "1입니다." }
    2 { Write "2입니다." }
    3 { Write "3입니다." }
    4 { write "4입니다." }
    5 { write "5입니다." }
    default { "1,2,3,4,5중에 없습니다." }
}

 파워쉘 Switch

 

 

switch (1,2)
{
    1 { Write "1입니다."; break }
    2 { Write "2입니다."; break }
    3 { Write "3입니다."; break }
    4 { write "4입니다."; break }
    5 { write "5입니다."; break }
    default { "1,2,3,4,5중에 없습니다." }
}

 파워쉘 스위치

 

 

 

문자열에 대해서도 사용 가능합니다.

switch ("delmaster")
{
    "delmaster" { Write "delmaster입니다."; break }
    "Lee" { Write "Lee입니다."; break }
    "MS" { Write "MS입니다."; break }
    "Linux" { write "Linux입니다."; break }
    "Unix" { write "Unix입니다."; break }
    default { "어떤것에도 해당되지 않습니다." }
}

 

PowerShell 스위치

 

'PowerShell' 카테고리의 다른 글

PowerShell 호스트명 확인  (0) 2016.04.20
PowerShell을 이용한 정책 확인 및 수정  (0) 2016.03.30
PowerShell 조건문 Switch  (0) 2016.03.02
원격 Powershell 실행  (0) 2016.03.02
PowerShell 조건문 IF  (0) 2016.02.29
PowerShell 변수 사용  (0) 2016.02.29
  Comments
댓글 쓰기
원격 Powershell 실행

Remote PowerShell을 사용하기위해서 Trusted Host 즉, 신뢰할수있는 컴퓨터 목록에 추가해주어야 합니다.

파워쉘을 원격으로 실행하기 위해서 아래와 같은 과정을 선행해주면 되겠습니다.


1. 대상서버에 아래 명령어 실행

Enable-PSRemoting -Force


2. 관리할 컴퓨터의 '신뢰할 수 있는 호스트 목록'에 대상서버를 추가

Set-Item WSMan:\localhost\Client\TrustedHosts -Value <"대상서버 IP" | "대상서버 호스트명"> -Force

 

만약 정책을 사용한다면 아래와 같이 정의할 수 있습니다. (2016.04.29 내용 추가)

'TrustedHostList' 부분에 특정 컴퓨터를 지정할 수 있으며, 아래와 같이 도메인의 모든 컴퓨터를 정의 할 수 도 있습니다.

만약 여러대의 컴퓨터를 지정한다면 아래와 같이 ',' 로 구분하면 됩니다.

DC01.delmaster.net,DC02.delmaster.net

 

 


 

3. 원격 접속 자격증명 지정

$Credential = Get-Credential <"원격 접근할 계정">


4. 원격 접근

Enter-PSSession -ComputerName <"원격서버 IP" | "원격서버 호스트명"> -Credential $Credential



특정 컴퓨터의 원격 실행을 허용하려면 방화벽의 인바운드 규칙 > 'Windows 원격 관리(HTTP-In)' 속성에서 '영역' 탭으로 이동 후 원격 IP주소 부분에 관리할 컴퓨터의 IP 주소를 입력해주면 됩니다.

'PowerShell' 카테고리의 다른 글

PowerShell을 이용한 정책 확인 및 수정  (0) 2016.03.30
PowerShell 조건문 Switch  (0) 2016.03.02
원격 Powershell 실행  (0) 2016.03.02
PowerShell 조건문 IF  (0) 2016.02.29
PowerShell 변수 사용  (0) 2016.02.29
PowerShell 리디렉션 출력  (0) 2016.02.26
  Comments
댓글 쓰기
PowerShell 조건문 IF

파워쉘의 조건문인 IF 를 통해 값을 비교하고 그 비교 결과에 따른 명령어를 수행할 수 있도록 지정할 수 있습니다.

하기의 내용을 실습하기 위해서 'PowerShell ISE' 를 실행시켜 작업해야겠습니다.

 

먼저 아래와 같이 입력해 보면 'IF' 문의 조건에 맞을때 뒤의 'Write-Host' 명령이 실행되는것을 확인할 수 있습니다.

 

if(100 -eq 100) { Write-Host "조건에 맞습니다." }

 

if(100 -eq 10) { Write-Host "조건에 맞습니다." }

 

 

 

IF문의 조건에 맞지 않을때 실행할 명령어는 'ELSE'문에 넣을 수 있습니다.

if(100 -eq 10) { Write-Host "조건에 맞습니다." } else { Write-Host "조건에 맞지 않습니다" }

 

 

 

 

조건을 연속으로 지정하여 특정 조건에 맞을때 특정 명령을 실행 할 수도 있습니다.

if(100 -eq 10) { Write-Host "첫번째 조건에 맞음" } elseif (100 -gt 10) { Write-Host "두번째 조건에 맞음" }

 

 

 

 

변수를 사용하면 아래와 같이 사용할 수 있습니다.

아래와 같이 길게 작성해야 하는 것은 'PowerShell' 보다 'PowerShell ISE' 를 사용하면 편리합니다.

 

[CmdletBinding()]
param
(
    [parameter(Mandatory=$true)] [int]$this,
    [Parameter(Mandatory=$true)] [int]$that
)

If ($this –eq $that) {
  Write-Host "this 와 that 는 같습니다." -ForegroundColor Yellow
} ElseIf ($this –gt $that) {
  Write-Host "this 는 that 보다 큽니다." -ForegroundColor Yellow
} Else{
  Write-Host "this 가 that 보다 작습니다.." -ForegroundColor Yellow
}

 

'PowerShell' 카테고리의 다른 글

PowerShell 조건문 Switch  (0) 2016.03.02
원격 Powershell 실행  (0) 2016.03.02
PowerShell 조건문 IF  (0) 2016.02.29
PowerShell 변수 사용  (0) 2016.02.29
PowerShell 리디렉션 출력  (0) 2016.02.26
PowerShell 필터링 기능  (0) 2016.02.26
  Comments
댓글 쓰기