자바스크립트를 활성화 해주세요

p066 Powershell 인터뷰 질문

 ·  ☕ 6 min read

인터뷰 질문이라고 해서 정리해 봤습니다. 특별히 파워쉘 전문가가 작성한 질문은 아닌 것 같은 느낌입니다.

인터뷰 시간이 길지 않다고 보고, 짧게 짧게 대답합니다.

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”}

레퍼런스

공유하기

tkim
글쓴이
tkim
Software Engineer