인터뷰 질문이라고 해서 정리해 봤습니다. 특별히 파워쉘 전문가가 작성한 질문은 아닌 것 같은 느낌입니다.
인터뷰 시간이 길지 않다고 보고, 짧게 짧게 대답합니다.
1. 파워쉘이 뭔지 설명하면요?
- 파워쉘은 확장된 커맨드 쉘이기도 하구요, 스크립트 언어이기도 합니다.
2. 파워쉘의 주된 특성은 무엇인가요?
powershell.exe 의 실행되는 것들을 설명하자면,
- 객체기반이구요 (객체지향이라고 하면 그렇게 사용하지 않는 사람도 있으므로 갸윳하게 됨)
- 파워쉘 커맨드는 커스터마이징 할 수 있구요
- 인터프리터이기도 하고, 스크립트 환경이기도 합니다.
3. 파워쉘에서 변수는 뭘 담을 수 있나요?
- 문자열이나, 정수나, 객체들을 담을 수 있어요.
- 몇몇 특별한 변수들 예를 들면 $debugpreference 같은 특별한 변수는 디폴트 값을 가지고 있어요
4. 파워쉘에서 괄호들(brackets)의 의미들을 설명해 보면요?
- 패런떼시스 브래킷은 우선 실행되는 명령, 또는 함수를 정의할 때 아규먼트를 나타낼 때 씁니다.
- 컬리 브래킷은 스크립트 블럭? 블럭된 스테이트먼트? 를 나타낼 때 쓰고
- 스퀘어 브래킷은 컬렉션에서 인덱스, 또는 변수의 타입선언할 때, 클래스의 네임스페이스 나타낼 때 사용합니다.
5. 커맨들렛은 뭐죠?
- c# 이나 vb.net과 같이 닷넷언어로 작성된 파워쉘 커맨드를 말합니다.
- 빌트인으로도 있고, 새로 작성도 가능합니다.
6. 파워쉘에서 루프가 뭔지 설명하면요?
- 완전히 초보인 사람인 경우를 걸러내기 위한 질문이겠지요? 무시하는 것이 아니니 이런 질문을 받았다고 흥분하면 안됩니다. 의도를 존중해 주시고 정중하게 대답해야합니다.
- 인터뷰이는 이 인터뷰의 기능에 대해 매우 협조적이라는 의사를 내비치기 위해, “완전히 초보인 사람인 경우를 걸러내기 위한 질문이겠지요?” 라고 얘기하는 것 정도는 인터뷰어에게 무례하지 않을 것 같습니다.
- 스크립트 블럭을 반복하는 statement입니다.
- for, foreach foreach-object, while, do-while, do-until 등이 있어요
7. 쉐어포인트용 컴포넌트를 디플로이하는 파워쉘 스크립트를 어떻게 실행하지요?
스크립트 로직을 설명하라는 건 지? 아니면 일반적인 작성 방법을 얘기해 보라는 건 지?
- 파워쉘 문법으로 ps1 파일을 작성합니다.
- 실행은 cmd.exe 에서 powershell.exe -f filename.ps1 과 같이 실행하는 방법이 있고
- powershell.exe 를 실행한 환경에서 실행하는 방법이 있습니다. (이런 것까지 설명해야 해?)
- 일반적인 터미널 윈도우에서 powershell.exe를 실행시켜 하는 방법도 있고, ise를 이용하는 방법도 있습니다.
- vscode안의 terminal panel에서 실행하는 방법도 있고,
- visual studio나 jetbrains와 같은 ide에서 실행하는 방법도 있어요.
- 쉐어포인트용 컴포넌트 작성에 대해서는 경험이 없습니다만, javascript? typescript? nodejs의 프로젝트일 확률이 높겠네요? 패키징 하는 커맨드가 있을 테고, 디플로이하는 스크립트는 아마도 이 프로젝트의 스크립트폴더에 들어가 있는 형태일 수도 있겠네요.
- Microsoft 365 테넌트에 접근해야 할 텐데, 경험이 없지만 작성이 까다로울 것 같지는 않습니다.
8. 파워쉘의 비교 연산자에 대해서 설명해 보세요
- 파웨쉘의 비교 연산자는
- 두 객체간의 비교에 대해서라면 큰 지, 작은 지, 같은 지 판단하는 것(equality)도 있고
- 정규표현식으로 일치하는지(match), 포함하는지(contain) 등과 같은 연산자도 있습니다.
- 다른 언어와는 조금 다른 표현방식을 사용합니다. 예를 들면 -eq, -lt, -le, -gt, -ge
9. 파워쉘 파이프라인은 어디에 사용하나요?
- 두개의 스테이트먼트를 연결할 때 사용합니다.
- 하나의 스테이트먼트의 아웃풋을 다른 스테이트먼트의 인풋으로 전달할 때 사용합니다.
- 파라메터를 선언할 때
[CmdletBinding()]
으로 선언된 어트리뷰트를 사용해야 하구요, ValueFromPipeline
이라는 변수 어트리뷰트 파라메터를 사용해야 합니다.- 만일 객체를 파이프로 전달할 때는, 그 객체의 어떤 값을 써야할 지 모르기 때문에
ValueFromPipelineByPropertyName
라고 하는 엄청 긴 어트리뷰트 파라메터를 사용해야 합니다.
10. Get-Command 라는 명령어에 대해 설명해보세요
- 커맨드를 객체를 가져올 때 사용합니다.
- 모듈이 가지고 있는 커맨드를 알아볼 때도 사용하고,
- 스크립트의 정의를 살펴볼 때도 사용합니다.
- 명령어 이름이 기억나지 않을 때도 사용합니다.
- 패턴을 파라메터로 받기 때문에
Get-Command [L–R]*
와 같이 사용할 수도 있습니다.
11. 네트웍드라이브를 파워쉘로 맵핑할 때는 어떻게 하나요?
- 로컬의 vhdx를 마운트하는 것이 아니므로 mountvhd는 사용할 수 없을 것이고,
- WScript의 Network 객체를 사용해야 할까요?
- 어쩌면 WMI를 사용해야 할 것 같습니다.
- 권한이 제한되어 있어서 Credential이 필요하다면 WScript보다는 Powershell이 편할 것 같습니다. 마운트할 드라이브레터도 중복되는 지 확인 해야 할 것 같구요.
12. 파워쉘에서 Select
라는 키워드는 어떻게 사용하나요?
- 우선 먼저 Select-String이라는 커맨드의 일부로 사용하구요
- Select-Object라는 커맨드의 일부로도 사용하고
- Get-WmiObject의
-query
파라메트의 값으로 사용하는 WQL 스테이트먼트에서 사용하기도 합니다. 예를 들면gwmi -query "Select * from Win32_Process"
.
13. 파워쉘에서 Get-Service 함수는 뭔가요?
- 윈도우즈 서비스의 리스트를 가져오는 함수입니다.
14. 파워쉘 스크립트가 뭔지 설명해 보세요
- 파워쉘 커맨드가 순차적으로 연속으로 이루어진 문장? 스테이트먼트? 의 집합입니다.
- 파일명은 대체로
ps1
이라는 확장명을 가진 파일명을 사용합니다. - 이 스크립트를 실행하려면, 에디터로 작성하고, ps1확장명으로 저장하고, powershell.exe로 실행합니다.
15. 파워쉘에서 해쉬테이블은 어떻게 사용하나요?
- 닷넷에서는 딕셔너리라고도 부르는데, 이름과 값을 페어로 가지는 데이터 구조체를 말합니다.
- 선언하려면 @ 뒤에 컬리브레이스를 붙여서 @{} 와 같이 선언하구요.
- 사용하려면 프라퍼티처럼 사용해도 되고, 인덱서 처럼 사용하는 방법이 있습니다.
16. 파워쉘에서 배열은 어떻게 사용하나요?
- 배열은 데이터를 연속으로 가지는 구조체입니다.
- 선언하는 방법은 @ 뒤에 퍼런떼시스 브래킷 으로 사용합니다.
17. 특정 폴더의 모든 차일드폴더를 구하려면 어떻게 하나요?
- Get-ChildItem C:\Scripts -Directory -recurse
- -Directory 를 빼면 파일도 선택이 됩니다.
18. 객체를 HTML로 변환은 어떻게 하나요?
- ConvertTo-HTML을 사용합니다.
Get-Process | ConvertTo-HTML | Out-File "process.html"
19. 변수를 Rename하려면 어떻게 하나요?
- Rename-Item -Path Env:/MyVariable -NewName MyRenamedVar
20. $input 변수의 기능은 무엇인가요?
- 파이프로 받은 다이터에 접근할 때 사용합니다.
21. 현재 컴퓨터에 설치된 어플리케이션을 구하는 방법은 뭔가요?
- Get-WMIObject -class Win32_Product -ComputerName . | Format-Wide -Column 1
22. sql 서비스를 모두 구하는 파워쉘 커맨드는 뭔가요?
- get-service로 하는 방법이 있고, gwmi로 하는 방법이 있습니다.
- get-service sql*
- get-wmiobject win32_service | where-object {$_name-like “sql”}