본문 바로가기
8. 정보보안 노트 정리

파워쉘 기본 문법

by Robert8478 2023. 12. 28.

[실행 정책 -관리자 권한 필요]
get-executionpolicy
set-executionpolicy bypass

Get-Process - 프로세스 정보 확인

[원하는 명령어 찾기 및 실행하기]
Get-Help , Get-Command 명령어 사용
Get-Help (명령어 사용법을 확인)
:Get-Help Get-Process (-examples)
:Get-Help Get-*

get-help get-process -full -detailed //더 자세한 정보 출력
-examples 옵션은 해당 예제 코드를 출력

Get-Command (명령어에 대한 기본 정보 확인)
:Get-Command -verb set
:Get-Command -noun process_name
:Get-Command -Module Module_name

Get-Command *process* - 프로세스 관련 명령어 다 출력 (* 문자로 사이에 끼어있거나 한 모든 process를 찾는것)
Get-Command -Commandtype cmdlet *process* - commandtype이 cmdlet 인것 만 출력

[정보 저장 방법]
*변수 : 기본적으로 .NET 형식을 따름
$a = 12
$value.GetType()
(int)$a = 1.2 ? - 강제 형변환

*문자열
$a = "Hello World"
$a = @"
   Get-Process
   $(c:\temp\test.txt) //스크립트 블록
"@ //어노테이션을 이용하여 여러줄 문자열을 정의할수 있다.
각각 한줄이 명령어일 경우 스크립트 블록으로 한줄마다 명령어로 할수도 있다.

*배열
$a = Get-Process //cmd 명령 실행시 대부분 배열 형태로 출력 -> 변수에 삽입
$b = 1,2,3
$c = 1,2,"HI"

Get-Variable - 설정된 모든 변수 확인
Clear-Variable - 모든 변수 초기화

[변수 관련]
$var = 1
$var 또는 Write-Host $var - 변수 출력
대신 Write-Host $var $var 이라고 썼을 시 1 1 이라고 출력 되게 가능 ($var $var은 에러)
$num = 1+1
$num2 = 4
$num1 + $num2 - 더하기 결과 출력
$string = "hello world"
$string + $num2 - hello world4 로 결과 출력
$float = 1.1
$float.gettype() - 변수의 타입을 출력
$result = Get-Process
$result.gettype() - 배열 형식으로 들어가 있음

>>$here = @"
>> Get-Process
>> "Hello world"
>> "@
// 각각 엔터를 쳐서 넘김, @로 감싸줌으로써 여러 값이 들어간 here 스트링으로 삽입
//출력시 Get-Process 도 문자열으로 출력

[스크립트 블록]
Invoke-Command - 명령어를 실행하는 명령어
invoke-command -scriptblock { get-process; get-service } - ;으로 구분하며 뒤 두 명령어를 실행
invoke-command -scriptblock $com - $com 변수가 script block 형식일때 $com 명령어 실행
$here = [Scriptblock]::Create($here) - string 형태였던 $here을 스크립트 블록 형태로 변경

[포맷 스트링]
$header = "Report for Today"
$S1 = "$header`n-----------------------" // `n 으로 new character를 넣어준다.
$S2 = "$header`n$( '-' * $header.length)" //$header 변수길이만큼 ----- 쳐주는것
$S3 = "{0}`n{1}" -f $header,( '-' * $header.length) // -f 옵션이 포맷스트링 옵션으로 텍스트를 받으면 원하는 형식으로 출력하는것
$S3 - 출력