파워셸
-
[PowerShell] 함수 오버로딩처럼 시나리오별 입력 매개변수 정의를 변경하는 매개변수집합(Parameter Set) 알아보기Shell & CMD/PowerShell 2023. 12. 2. 16:23
파워셸에선 파라메터 명칭에 대한 자동완성 기능을 기본적으로 제공한다. 예를들어, Out-File 명령어에 '-f' 만 입력하고 탭 키를 누르면 -FilePath가 나온다. 편리한 기능이지만 일부 함수는 파라메터가 모두 필요하지 않거나, 다른 파라메터가 정의가 반드시되어야 사용할 수 있는 파라메터가 존재할 수 있다. 프로그래밍 상에선 함수 오버로딩(Overloading) 개념을 통해 동일한 함수명에 상황에 맞게 사용할 수 있도록 여러 파라메터를 지정할 수 있지만, 파워셸에선 원칙적으로 함수오버로딩을 지원하지 않는다. 만약 동일한이름을 가진 함수가 여러개 존재한다면 나중에 정의한 함수만 유효하다. 다행히 오버로딩처럼 사용할 수 있는 개념이 존재하는데, 파워셸에선 이것을 '매개변수 집합(Parameter Se..
-
[PowerShell] 자동변수(Automatic Variable) - 14. $PWD, $ShellId, $StackTrace, $switch, $thisShell & CMD/PowerShell 2023. 11. 26. 15:29
$PWD 현재 파워셸을 실행중인 세션의 경로를 의미한다. $ShellId 현재 파워셸의 식별자를 의미한다. Windows 버전과 Core 구분 없이 Microsoft.PowerShell로 출력한다. $StackTrace 가장 최근 발생한 오류에 대한 StackTrace 정보가 저장된다. stacktrace.ps1 이름의 파일 생성 후 아래와 같이 작성한다. $action = { Write-Host 'try divied by zero' 1 / 0 } $action.Invoke() $switch switch 블록 내에서만 선택 case 열거자 자동변수. 아래 코드는 $switch 변수를 통해 입력받은 case 객체를 화면에 출력한다. function Test-Switch { param ( [string] $..
-
[PowerShell] 자동변수(Automatic Variable) - 10. $null, $PID, $PROFILEShell & CMD/PowerShell 2023. 11. 25. 11:41
$null "값 없음"을 의미하는 값. 하지만 존재자체는 하기 때문에 배열에 포함되어 있을 경우 요소의 1개로 인식된다. "one", $null, "three" | ForEach-Object { "Hello " + $_} $PID 현재 PowerShell 세션을 호스팅하는 프로세스의 PID(프로세스 식별자) 번호를 나타낸다. $PID 작업관리자의 [자세히] 메뉴에 존재하는 PID 값이다. $PROFILE 현재 사용자 및 현재 호스트 애플리케이션에 대한 PowerShell 프로필의 전체 경로를 의미한다. 해당 경로에 프로필 ps1 파일에 함수나 변수값을 미리 지정해두면, 파워셸을 실행할 때마다 사용할 수 있다. $PROFILE을 파워셸을 보다 편리하게 사용할 수 있는 방법은 아래 포스트로 정리한 바 있다...
-
[PowerShell] 자동변수(Automatic Variable) - 9. $Matches, $MyInvocation, $NestedPromptLevelShell & CMD/PowerShell 2023. 11. 12. 13:05
$Matches -match, -notmatch 연산결과에서 -match 연산결과가 true일 때, $Matches에 해시테이블 형식으로 담긴다. 아래 이미지는 사용예시이다. 'helloworld' -match 'hello[abc]orld' 는 정규식 연산 규칙에 의해 일치하지 않으므로 $Matches 에선 아무 데이터가 들어가지 않았다. 'helloworld' -match 'hello[wyx]orld' 에선 -match에 일치결과가 있으므로 $Matches 에 값이 담긴것을 확인할 수 있다. match 이후 match 연산에 어긋나는 결과가 있다해도 $Matches 변수를 초기화하진 않는다. $MyInvocation 이름, 매개 변수, 매개 변수 값과 같은 현재 명령에 대한 정보와 명령이 시작, 호출 ..
-
[Windows Terminal] 윈도우 터미널 실행 명령어 (wt)ETC 2023. 11. 12. 12:15
cmd, powershell 및 사용자 추가에 의해 설치가능한 Linux Subsystem, powershell Core는 Windows Terminal 이란 프로그램에서 통합 관리할 수 있다. 해당 프로그램은 최신 Windows 11부터 기본 설치되어있다. CLI 또는 '실행(Win+R)'에서의 실행명령어는 아래와 같다. > wt 기본적인 실행명령에 옵션을 통해 추가적인 작업도 사용할 수 있다. 관련해선 아래 링크에서 확인 가능하다. Windows 터미널 명령줄 인수 | Microsoft Learn Windows 터미널 명령줄 인수 Windows Terminal에 대한 명령줄 인수를 만드는 방법을 알아봅니다. learn.microsoft.com powerhsell 에서 관리자 모드로 전환하고 싶을 때 ..
-
[PowerShell] 자동변수(Automatic Variable) - 8. $LASTEXITCODEShell & CMD/PowerShell 2023. 11. 6. 22:03
$LASTEXITCODE $LASTEXITCODE는 exit 명령어 뒤에 입력한 숫자값을 대입하는 자동변수이다. script 파일에서 exit 할때 입력한 exitcode 값이 대입된다. 예를들어, test.ps1 파일을 아래와 같이 생성했다면 $LASTEXITCODE 에 123 값이 입력된다. Write-Host 'hello world' exit 123 exit 만 입력한 채로 종료된다면 $LASTEXITCODE는 0이 대입된다. Write-Host 'hello world' exit 별도의 exit 선언없이 script를 실행했다면, 오류가 발생했어도 $LASTEXITCODE 에 영향을 주진 않는다. 이 부분은 이어서 설명할 -Command 를 통한 실행방식과 큰 차이가 있다. Write-Host 'h..
-
[PowerShell] 자동변수(Automatic Variable) - 7. $IsCoreCLR, $IsLinux, $IsMacOS, $IsWindowsShell & CMD/PowerShell 2023. 11. 5. 11:52
$IsCoreCLR (PowerShell Core 전용) 실행중인 Powershell이 Core 버전인지 아닌지 확인할 때 사용할 수 있는 Boolean 변수 아래 Test() 함수를 생성 후 실행시 PowerShell Core에선 `core` 라는 메시지를 확인할 수 있다. function Test() { if($IsCoreCLR) { Write-Host 'core' } else { Write-Host 'not core' } } 예측가능한 결과가 나왔지만 $IsCoreCLR 값은 Windows PowerShell 자체에서 유효하지 않을 수 있다. $IsCoreCLR.GetType() 를 실행하면 Core 기반 PowerShell에선 아래 이미지와 같이 정상적인 정보가 표출된다. 반면, Windows 버..
-
[PowerShell] 자동변수(Automatic Variable) - 6. $HOME, $Host, $inputShell & CMD/PowerShell 2023. 11. 5. 09:53
$HOME 사용자 홈 경로값이다. Windows 기준으로 기본 설정을 건드리지 않는 한 C:\Users\{계정} 위치가 표기된다. $Host 현재 사용중인 Powershell의 정보를 표기한다. $input $foreach와 마찬가지로 열거자를 가리키는 자동변수이다. $foreach, $input, $switch 와 같은 열거자 자동변수는 가급적 사용하지 않는 것을 권장하고 있다. https://learn.microsoft.com/ko-kr/powershell/module/microsoft.powershell.core/about/about_automatic_variables?view=powershell-7.3#using-enumerators 아래 소스코드는 입력받은 pipline 을 받아 그대로 화면에 ..