Nano Server에 대한 내용


 

PowerShell 5.0에서는 Open source Package를 사용할 수 있는 장점이 있다.
이를 위해서는 다음과 같이 한다.

  1. Find-PackageProvider
  2. Find-Package -ProviderName nuget -Source http://www.nuget.org/api/v2
  3. Install-Package  -ProviderName nuget -Source http://www.nuget.org/api/v2 -Name node.js -Destination c:\node
  4. cd c:\node\node.js.5.3.0
  5. dir
  6. node.js가 잘 동작하는지 확인하기
    ‘console.log(“God is Love. – NanoServer (and PowerShell) “);’ | Out-File -Encoding ascii hello.js
  7. 생성한 hello.js 파일 실행하기
    .\node.exe hello.js

나머지 내용은 html 파일을 nano server로 복사한 후 IISAdministration 모듈을 설치한 후 IIS Web Site를 생성하여 직접 Web Server에 접속하는 것이다.

다음과 같이 하면 된다.

1. Import-Module -Name IISAdministration
2. New-IISSite -Name “ASPNet5” -PhysicalPath c:\HelloASPNet5\wwwroot -BindingInformation “*:8000:”
3. ipconfig
4. Web Browser로 접속하기

 

PowerShell의 Pipeline의 처리 방법 이해하기


<전제 조건>
Get-Service -Name bits | Stop-Service를 이해할 때
B는 도움말을 확인하고, A는 Get-Member를 하여 이해해야 한다
즉, Help Stop-Service -ParameterName InputObject
Get-Service -Name bits | Get-Member
<예제-1>
Get-Service -Name bits | Stop-Service
1) 반드시 B의 -InputObject라는 Parameter가 존재해야 한다 (필수 사항)
2) 1)이 충족된 경우에 한해서, B의 -InputObject의 value와 A의 Class Name이 반드시 동일해야 한다.
(Get-Service -Name bits | Get-Member를 하면 class name이 “ServiceController”로서 B의 -InputObject의 value와 동일하다)
3) 2)가 충족된 경우에 한해서, Plan-A로서 우선적으로 ByValue로 처리하게 되는데, A의 Parameter 중에서 -InputObject를 제외한 Parameter 중에서 [파이프라인 입력 적용 여부]가 True(ByValue)인 Parameter를 찾아서 그 Parameter와 Value를 가져와서 B가 처리하게 된다. 이것이 ByValue로 처리하는 것이다. (여기서는 -Name이다.)

<예제-2>
Get-Process -Name notepad | Stop-Process
(Get-Process -Name notepad | Get-Member를 하면 class name이 “Process”로서 B의 -InputObject의 value와 동일하다)
4) 3)의 경우에 실패한 경우에 그 대안으로 ByPropertyName으로 처리하게 된다. A의 Property Name와 B의 Parameter Name이 같은지를 확인하여 동일한 경우에 한해서, B는 A의 Property의 value를 가지고 와서 B의 Parameter에 대한 value를 넣어서 처리하게 된다.
이것이 바로 Plan B로서 처리하는 것이다.
A의 Property name에 Name이 있고, B의 Parameter name에 -Name이 있어서 B에서 숨겨진 Parameter은 ByPropertyName인 Name이다. 그래서 B에서 -Name에 대한 value를 A의 동일한 Property의 value를 가져와서 처리하게 된다

<예제-3>
Get-Service | Where-Object -FilterScript {$_.Status -eq “Stopped”}
2) B의 -InputObject에 대한 value가 <PSObject>이므로 A는 PowerShell Object이면 모두 파이프라인으로 처리 가능하다
3) A의 결과의 한 줄 한 줄이 object이므로 그 Object를 가지고 와서 조건에 충족한 것만 처리하게 되는 것이다.
즉, status가 stopped인 object만 결과로 뽑아내게 된다.