본문 바로가기
PowerShell

Powershell 무한반복 및 키입력

by 이노닝 2023. 6. 29.

안녕하세요.

이번에는 Powershell 에 관련하여 작성하려고 합니다.

한국에서는 현재 Windows OS가 압도적으로 많은 터라,

파워셸을 조금 다룰 줄 알게 되면, 작업 효율이 어마무시하게 증가하게되는데요.

Powershell은 스크립팅 언어로 시스템 관리를 자동화 하는데 많이 사용됩니다.

테스트 및 솔루션 배포를 하기위해 사용 하기도 합니다.

언어 기반은 .NET CLR (공용 언어 런타임) 이기 때문에 모든 입력 및 출력은

.NET 개체 단위로 보시면 됩니다.

장점

  • 함수, 클래스, 스크립트 및 모듈을 통한 확장
  • 동적 형식 생성 및 확장
  • 간단한 출력으로 인한 확장 기능
  • CSV, JSON 그리고 XML 등 공통 데이터 형식 지원

실무자로써 PowerShell은 정말 강력한 노가다(?) 도구가 될 수 있다 라는것을

말씀 드리고 싶습니다.

Powershell 관련하여 무엇을 먼저 쓸까 하다가

당장 눈에 보이는 readkey 에 관련하여 몇 자 작성하고,

나중에 또 작성 하도록 하겠습니다.

#사용자가 특정 키를 입력하기 이전에 작업이 계속 이루어지는 SCRIPT
$Host.UI.RawUI.WindowTitle = "Example_ReadKEY_NONI_테스트"
[console]::TreatControlCAsInput = $true
while ($true)
{
    "처리중입니다..."
    if ([console]::KeyAvailable)
    {
        $key = [system.console]::readkey($true)

        if (($key.modifiers -band [consolemodifiers]"control") -and ($key.key -eq "C"))
        {
            "사용자 취소"
            break
        }
    }
}

Host.UI.RawUI.WindowTitle

--> PowerShell의 타이틀을 변경합니다. 배포 할 때 타이틀 변경은 필수겠죠?

그냥 'Windows PowerShell' 은 낭만이 없잖아요.

TreatControlCAsInput

--> Boolean 타입으로 Ctrl+C가 입력되면 True, 그렇지 않으면 False 입니다.

while

--> 무한으로 작업하겠다는 의미가 되겠죠?

KeyAvailable

--> 말 그대로 키 누름을 허용하는 속성입니다.

readkey(boolean)

--> 사용자가 입력한 키를 가져옵니다. 그리고 $key 변수에 담네요.

true일 경우 표시하지 않고, false일 경우 표시합니다.

.modifiers

--> readkey에서 입력받는 키보드 중 보조키를 의미합니다.

Shift, Alt, Ctrl 등등이 됩니다.

.key

--> 입력 받은 키 값이 되겠네요. C와 일치 여부를 판단합니다.

위 로직은 그러니까

로직이 원하는 키 입력을 무한정 대기하는 Script입니다.

그러다가 원하는 Ctrl 키와 C 키를 read하는 순간

"사용자 취소" 라는 문구와 break 걸리는 아주 간단한 Script입니다.

위 로직으로 어떤것을 만들 수 있을까요?

File Finder? File Copy? String Finder? Local IP Finder?

파일 찾기? 파일 복사? 문자열 검색? 내부 IP 검색?

당장에는 위 4가지만 생각이 드네요.

완료하거나 또는 사용자가 중지하고 싶을 때 중지하는

아주 간단한 기본 Script 입니다.

사실 이런 기본적인 Script부터 명확하게 알아야

무한 loop에 대해 고찰하게 되는 것 같습니다.

위 Script 보시고 어떤가요?

Exception 처리도 해줘야 하겠고,

while에 대한 완료 시점도 알아야하고,

이 이후 Process 는 어떻게 어디에 무엇을 넘겨 줄지,

다시 초기점으로 돌아갈지

어떤 프로그램을 만들지 벌써 설레네요.

다음에는 더 유용한 정보를 담아보도록 하겠습니다.