Powershell v2.0에 Powershell v3.0을 설치했을 때 2.0을 사용하는 방법 ($PSVersionTable 사용하기)


Windows 7/2008R2에 Powershell v3.0 RC를 설치한 후 v2.0을 사용하고자 하는 방법은 다음과 같다.

1) Powershell의 버전을 확인하기 위해서
$PSVersionTable 
이렇게 하면 기본적으로 v3.0으로 나온다.

2) V3.0인 상태에서 V2.0을 사용하기 위해서는
powershell.exe -Version 2
이렇게 하면 V2.0이 로딩된다. 진짜 V2.0인지 확인하려면
$PSVersionTable 

V3.0은 .Net4.0을 사용하고 V2.0은 .Net2.0을 사용한다는 것을 염두에 둔다.

 

참고: http://goo.gl/E7PkM


	

Powershell을 사용하여 자신이 원하는 파일을 매우 빠르고 쉽게 찾는 방법


Powershell을 이용하면 원하는 파일을 쉽게 찾을 수 있다.
여기서 핵심은 -filter 매개변수와 -recurse 매개변수이다

Dir c:\windows\system32 -Recurse -Filter *.msc  
(-Recurse: 하위 폴더까지 검색 / -Filter: 원하는 것만 필터링하여 검색)

dir c:\windows\ -recurse -filter au*.dll

dir c:\windows -recurse -filter sam

dir c:\windows -recurse -filter hosts

dir $home -recurse -filter *.jpg

자신이 가지고 있는 음악 및 사진 파일들이 여러 폴더에 흩어져 있다면 dir $home -recurse -filter *.jpg 형식으로 찾아서 복사하면 된다.
dir $home -recurse -filter *.jpg  | copy -destination d:\imsi
이렇게 하면 바탕화면 및 내 문서에 있는 모든 사진 파일을 D:\imsi 폴더로 몽땅 복사할 수 있다.
중요한 것은 상당히 빨리 작업이 이루어진다는 것이다.

PSModulePath 수정하기


Powershell에서 Module이 저장된 위치를 보려면
$evn:psmodulepath

이곳의 위치는
1) 로그온한 사용자용: $home\documents\windowspowershell\modules
2) 모든 사용자용: $pshome\Modules

그런데 모든 사용자용을 File Server용으로 하기 위해서는 경로를 다음과 같이 추가하면 된다.

$env:PSModulePath = $env:PSModulePath + ";\\fileserver\sharedfolder"

참고: http://msdn.microsoft.com/en-us/library/windows/desktop/dd878326(v=vs.85).aspx

Powershell Web access in Windows Server 2012


Windows Server 2012의 IIS8.0을 이용하면 https://주소/pswa로 접속하여 웹상에서도 서버를 파워셀로 관리할 수 있다. 특히 Web 접속이 되므로 Mobile device으로도 관리를 할 수 있는 장점이 있다.

참고: http://blog.powershell.no/2011/09/14/windows-powershell-web-access/

참고2: http://www.virtu-al.net/2012/06/05/installing-powershell-web-access-on-windows-2012-rc-core/

Where-Object와 -Filter의 속도 차이


특정한 속성 값만 알고 싶을 때 필터링하여 작업을 한다. 그런데 Filtering을 할 때 2가지 방법이 있다.

1) All kinds of cmdlets | Where-Object

2) A specific cmdlets -Filter

혹시 둘 다 지원되는 cmdlet라면 어떤 것을 사용하면 좋을까?
-Filter라는 매개변수(Parameter)를 사용하면 처리 성능이 좋고 부하가 적게 걸린다.
그 이유는 Where-Object는 앞의 결과의 모든 것을 가지고 와서 Filter을 하기 때문에 불필요한 정보까지를 포함하여 filtering을 한다. 그렇지만 -Filter는 필요한 속성 값을 가지고만 filtering을 하기 때문에 속도가 빠르다. 즉, Where-Object는 앞의 cmdlet의 결과를 가지고 2차적으로 작업을 하는 것이고 -filter는 2차적으로 처리하는 것이 아니고 그냥 처음부터 filtering을 하는 것이기 때문이다.

다음을 테스트를 하여 TotalSeconds 항목을 서로 비교해본다.

Measure-Command {gwmi win32_service -Filter “state <> ‘stopped'”}

Measure-Command {gwmi win32_service | where-Object {$_.state -ne “stopped”}}

어떤 것이 처리 시간이 적게 걸렸는가?