기존에 Linux 및 bash 에 익숙한 저는 PowerShell 의 Prompt가 영 낯설게 느껴집니다. 그래서 Bash 스타일로 Prompt를 변경하는 방법을 찾아보았습니다.
먼저 도움말 목록에서 Prompt 에 관련된 항목이 있나 검색 해 보려합니다.
도움말에 내가 찾는 항목이 있는지 확인 해 볼 때에는, powershell_ise 에 포함되어 있는 도움말을 참고하는게 편하더군요.
먼저 powershell_ise 를 켜고..
도움말을 엽니다.
검색 탭을 선택해서 찾고자 하는 키워드를 넣고 검색 합니다.
about_prompt 라는 항목으로 도움말이 존재하네요. 읽어 봅시다.
...
대강 읽어 본 결과, 아래의 내용을 확인 할 수 있었습니다.
PowerShell 은 "prompt" 라는 이름의 함수를 통해 Prompt 를 어떻게 표시 할 것인지를 결정합니다. "prompt" 함수는 기본적으로 PowerShell 에 의해 자동으로 만들어 지지만, 함수를 재정의해서 Prompt 표시 내용을 마음대로 변경 할 수도 있습니다. 또, 재정의 한 "prompt" 함수를 Windows PowerShell Profile 에 등록 해 두면, 항상 재 정의 된 Prompt 로 작업할 수 있습니다.
그럼 먼저 PowerShell 이 기본 제공 해 주는 "prompt" 함수의 내용을 살펴보겠습니다.
선언 되어 있는 함수의 내용을 살펴보려면, 해당 함수의 Deninition 속성을 확인 하면 됩니다.
Get-Item 명령어로 Function Provider 를 통해 "Prompt" 함수를 확보 한 뒤, Definition 속성을 확인 합니다.
(Get-Item Function:\prompt).Definition
PowerShell 에서 기본 제공 하는 "prompt" 함수의 내용은 이렇군요.
자~ 그럼 Bash 스타일로 바꾸기 위해서 "prompt" 함수를 재정의 해 봅시다.
구글링을 통해 Bash 스타일의 "prompt" 함수 예제를 찾을 수 있었습니다. 바로 아래 코드 입니다.
Function prompt { "[$env:username@$([System.Net.Dns]::GetHostName()) $(Get-Location)]$ " }
코드를 실행 해 보니, 아래와 같이 표시 됩니다.
음~ 이제 Bash 스타일과 많이 비슷 해 졌는데.. 경로명 표시하는 부분이 마음에 들지 않네요.
제가 주로 사용하던 CentOS + Bash 조합의 기본 Prompt 는 경로명을 표시 할 때 전체 경로가 아닌 현재 작업 중인 디렉토리의 이름만 표시하게끔 되어 있습니다. "prompt" 함수를 고쳐서 현재 디렉토리의 이름만 표시 하도록 변경 하겠습니다.
Function prompt { "[$env:username@$([System.Net.Dns]::GetHostName()) $((Get-Item (Get-Location)).Name))]$ " }
자, 아래와 같이 표시가 변경 되었습니다.
이제 친숙한 모습의 Prompt 를 사용 할 수 있게 되었습니다. 만족스럽네요.
자, 이제 마지막으로, Profile 파일에 이 함수를 추가 해서 PowerShell 실행 시 기본적으로 이 Prompt 를 쓸 수 있도록 해야 겠습니다.
먼저 현재 사용되고 있는 Profile 파일의 경로 및 살재 존재여부를 확인 해 봤습니다.
경로는 "C:\Users\ungs.SDS.000\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1" 이고, 이미 존재 하는 파일 이네요.
Profile 파일을 열어서 새로 만든 prompt 함수를 추가 합니다.
메모장으로 추가 한 내용을 저장 하고, 새로운 PowerShell 창을 띄워서 잘 되는지 확인 할 차례입니다.
음! 잘 되는군요.
이제 익숙한 스타일의 Prompt 로 PowerShell 을 사용 할 수 있겠네요.
위 기록을 참고해서 여러분들도 각자 자신이 편한대로 Prompt 를 설정해서 사용해 보세요~!
AutoHotkey라는 프로그램 들어 보신적 있나요? 매크로를 이용한 자동화 프로그램입니다.
저는 이 것과 유사하다고 느꼈습니다.
지원하는 Cmdlet은 아래와 같습니다.
Select-Window - pick windows by process name or window caption (with wildcard support)
Select-ChildWindow - pick all owned windows of another window (eg: dialogs, tool windows)
Select-Control - pick controls (children) of a specific window, by class and/or name and/or index (with wildcard support) -- NOTE: the "Window" can be specified as "-Window 0" to get all parentless windows, which includes windows, dialogs, tooltips, etc... With -Window 0 this returns a true superset of the Select-Window output.
Send-Click - send mouse clicks (any button, with any modifier keys)
Send-Keys - Windows.Forms.SendKeys lets you send keys ... try this: Select-Window notepad | Send-Keys "%(ea)Testing{Enter}{F5}" (and for extra fun, try it with multiple notepad windows open).
Set-WindowActive - yeah, just activates the window
Set-WindowPosition - set any one of (or all of) top, left, width, height on a window ... or maximize/minimize/restore
Get-WindowPosition - get the position (kind-of redundant, actually, since the Window object has it's position as a property)
Remove-Window - closes the specified window
Cmdlet을 보시면 느낌이 확 오시죠? 윈도우를 선택, 활성화,창크기 변경, 창 닫기, Keyboard,Mouse Action 등을 할 수 있습니다.
압축파일을 다운로드 하면 파일이 3개 있는데 이 중 Install.ps1을 파워쉘에서 실행하시면 됩니다.
저는 -Force 스위치를 사용하여 설치했습니다.
PS C:\Users\windian7.SDS\Downloads\WASP\WASP> dir
디렉터리: C:\Users\windian7.SDS\Downloads\WASP\WASP
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2009-01-20 오전 12:50 2570 Install.ps1
-a--- 2009-01-20 오전 12:53 520 UnInstall.ps1
-a--- 2009-01-21 오전 11:13 43008 WASP.dll
PS C:\Users\windian7.SDS\Downloads\WASP\WASP> .\Install.ps1 -force
You're running PowerShell 2.0, so you don't need to Install this as a PSSnapin,
you can use Import-Module (or Add-Module in CTP2) to load it. If you still want
to install it as a PSSnapin, re-run this script with -Force
Microsoft (R) .NET Framework Installation utility Version 2.0.50727.4927
Copyright (c) Microsoft Corporation. All rights reserved.
트랜잭트 설치를 실행하고 있습니다.
설치의 Install 단계를 시작하고 있습니다.
C:\Users\windian7.SDS\Downloads\WASP\WASP\WASP.dll 어셈블리의 진행 상황을 보려면
로그 파일 내용을 검토하십시오.
파일은 C:\Users\windian7.SDS\Downloads\WASP\WASP\WASP.InstallLog 위치에 있습니다
.
어셈블리 'C:\Users\windian7.SDS\Downloads\WASP\WASP\WASP.dll'을(를) 설치하고 있
습니다.
영향을 받는 매개 변수:
assemblypath = C:\Users\windian7.SDS\Downloads\WASP\WASP\WASP.dll
logfile = C:\Users\windian7.SDS\Downloads\WASP\WASP\WASP.InstallLog
logtoconsole =
Install 단계는 완료되었으며 Commit 단계를 시작하고 있습니다.
C:\Users\windian7.SDS\Downloads\WASP\WASP\WASP.dll 어셈블리의 진행 상황을 보려면
로그 파일 내용을 검토하십시오.
파일은 C:\Users\windian7.SDS\Downloads\WASP\WASP\WASP.InstallLog 위치에 있습니다
.
어셈블리 'C:\Users\windian7.SDS\Downloads\WASP\WASP\WASP.dll'을(를) 커밋하고 있
습니다.
영향을 받는 매개 변수:
assemblypath = C:\Users\windian7.SDS\Downloads\WASP\WASP\WASP.dll
logfile = C:\Users\windian7.SDS\Downloads\WASP\WASP\WASP.InstallLog
logtoconsole =
Commit 단계가 완료되었습니다.
트랜잭트 설치가 완료되었습니다.
CommandType Name Definition
----------- ---- ----------
Cmdlet Get-WindowPosition Get-WindowPosition [-Window]...
Cmdlet Remove-Window Remove-Window [-Window] <Win...
Cmdlet Select-ChildWindow Select-ChildWindow [-Window]...
Cmdlet Select-Control Select-Control [[-Index] <In...
Cmdlet Select-Window Select-Window [[-ProcessName...
Cmdlet Send-Click Send-Click [[-Left] <Int32>]...
Cmdlet Send-Keys Send-Keys [-Keys] <String> [...
Cmdlet Set-WindowActive Set-WindowActive [-Window] <...
Cmdlet Set-WindowPosition Set-WindowPosition [[-Left] ...
To load the Windows Automation Snapin in the future, you need to run:
Add-PSSnapin WASP
You can also add that line to your Profile script to load it automatically.
설치 완료 후 다음 파워쉘 실행 시 "Add-PSSnapin WASP"을 통해서 스냅인을 로드해야 Cmdlet을 사용할 수 있습니다.
(프로필을 통해서 자동으로 로드 되도록 할 수도 있습니다.)
## "Remove-Window" Cmdlet을 통해 notepad를 종료합니다. 키 명령을 통해서 저장하지 않고 종료합니다.
Select-Window notepad | Select -First 1 | Remove-Window -Passthru | Select-ChildWindow | Send-Keys "n"
## ProcessID 파이프를 통해 Kill 명령으로 notepad를 종료합니다.
Select-Window notepad | Select -First 1 | kill
이렇게 파워쉘을 통해서 윈도우를 컨트롤 할 수 있습니다.
응용하기에 따라 유용한 도구가 될 것 같습니다.
그럼 다음 포스팅에서 뵙겠습니다.
PS. 스냅인 사용을 위해서는 Add-PSSanpin 명령을 통해 해당 스냅인을 로드해야 합니다. 기억하세요.
- Get-ExecutionPolicy 를 입력하시면 현재 설정된 실행정책(Execution_Policy)를 확인 할 수가 있습니다. 별도로 재설정을 하지 않았다면, 대부분 Restricted로 설정되어 있을 것 입니다. 이 실행정책을 변경하여 로컬에서 만든 스크립트를 실행 하려면 다음 명령을 입력하시면 됩니다.
파워쉘을 이용하여 특정 내용에 대하여 검색 또는 출력 후 검색 내용을 외부 파일로 출력하는 Out-File cmdlet 에 대해 알아 보도록 하겠습니다.
ex) get-process를 이용하여 현재 사용중인 processname이 iexplore 인 파일만 검색하여 파일로 보관이 필요한 경우 입니다. get-process를 실행시 현재 동작중인 많은 process가 확인이 되어 집니다. (출력되는 내용이 많아 일부만 넣었습니다.) 작업자가 필요한 내용은 processname이 iexplore 에 대한 내용만이 필요한 경우 좀더 효율적으로 데이터 값을 얻기 위하여 특정 조건값으로 출력이 되도록 get-process 이 외에 추가로 -processname iexplore을 추가하여 get-process -processname iexplore 실행 아래와 같이 검색을 원하는 값만이 출력되는 것이 확인 할 수 있습니다.
자 이제 원하는 값을 얻었습니다. 해당 내용을 문서또는 파일로 내보내야 합니다. 어떻게 외부 파일로 내보내기를 할까요?? Out-File cmdlet을사용하여출력을콘솔창이아니라파일로보낼수있습니다. get-process -processname iexplore | Out-File -FilePath d:\processname.txt 을 실행하여 D:에 processname.txt 이름의 텍스트 파일로 내보내기를 하였습니다.
TIP : Out-File cmdlet을사용하여출력을콘솔창이아니라파일로 내보낼 경우 엑셀(csv)등 MS office에서 지원하는 파일로 내보내기가 가능 합니다. 허접하지만 최근 유용하게 사용한 Out-File cmdlet에 대하여 알아 보았습니다. 다음엔 좀더 유용한 정보로 찾아 뵙도록 하겠습니다.
서버를 관리 하는 일을 하는 사용자 입장에서는 서버 댓수가 늘어날 때 마다 일도 늘어나지만 수 없이 늘어 나는 서버를 관리하기 위한 방법을 찾는 것도 골치가 아픕니다.요즘이야 거의 대부분RDP(Remote Desktop Protocol)로 서버에 접속 해서 관리 하기 때문에RDP관리 프로그램도 조금 더 편한 것을 찾게 되는데요.오늘은 무료로 사용할 수 있는RDP관리 프로그램4종 세트에 대해서 수박 겉핥기로 알아 보겠습니다.
RDP는 마이크로소프트의 윈도우NT 4.0서버의 터미널 서버 에디션에 처음 소개되었습니다.이때가RDP버전4.0입니다.물론 용어도RDP라는 용어 보다는 터미널 서비스 였습니다.이후에 버전이 올라 가고RDP 5.0이 윈도우2000서버에 탑재 되면서부터 비약적인 발전을 하게 됩니다.현재RDP 7.0은 윈도우 서버2008 R2와 윈도우7에 기본으로 탑재되어 있습니다.기능 또한 미디어 플레이어 리다이렉션이나,멀티 모니터 지원,에어로 글래스 지원등과 같이 많은 발전을 하게 됩니다.어디까지 발전하는지 두고 봅시다. 마이크로소프트의Remote Desktop Connection Manager http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=4603c621-6de7-4ccb-9f51-d53dc7e48047
서버를 관리하는 사람이라면 직관적으로 사용할 수 있게 잘 만들어진RDP관리 프로그램 입니다.더군다나 썸네일 화면에서도 마우스와 키보드가 작동을 하며 서버를 그룹화 하여 관리하기에 편합니다.예전에는 마이크로소프트 내부에서만 사용하던 프로그램이 버전업이 되고 무료 배포가 된 것으로 알고 있습니다.