<aside> ⭐ Powershell
Object-based Shell
→ Object = Property + Method
# cmdlet의 property와 method 확인
cmdlet | Get-Member
# bits status 확인
(Get-Service -Name bits).Status
# Stopped인 상태 확인
Get-Service | Where-Object {$_.Status -eq “Stopped”}
# 각 cmdlet의 Property의 값 확인
cmdlet | Format-List *
# Method 시작/중지 하기
(Get-Service -Name bits).Start()
(Get-Service -Name bits).Stop()
# 100일 후의 날짜 알아보기
(Get-Date).AddDays(100)
CLI 기반 관리작업
# disk 정보보기
diskmgmt.msc
get-disk
# 최근 업데이트
get-hotfix
(get-hotfix | sort-object -property installedon)[-1]
# 세션 들어가기
Enter-PSSession -ComputerName sea-svr1
# 서버 여러개 동시에 다루기
Invoke-Command -ComputerName Sea-svr1 {route print}
Invoke-Command -cn sea-dc1, sea-svr1, sea-svr2 {Install-WindowsFeature -Name telnet-client}
# 파일 찾기/복사
mkdir c:\\pics
get-childItem -Path c:\\Windows\\ -Filter *.jpg **-Recurse**
get-childItem -Path c:\\Windows\\ -Filter *.jpg **-Recurse** | copy-item -Destination c:\\pics
GUI 개발용도
Scripting 환경제공
→ 반복적으로 해야할 작업이나 자동화 해야할 작업에 사용
→ PowerShell ISE 사용
맞춤 가능(Customizable)
확장 가능(Expandable)
.NET Framework 기반 </aside>
<aside> ⭐ powershell 사용 상황
반복적인 작업을 할 때
# csv 파일을 만들어서 한꺼번에 동시작업
import-csv -Path .\\adusers.csv | new-aduser
세부적인 내용을 확인할 때
한꺼번에 여러 개의 데이터를 수정할 때
# 부서 이름 한꺼번에 수정
Get-ADUser -Filter {department -eq “Sales”} | Set-ADUser -Department “Dometic Sales1”
일상적인 작업을 신속하게 처리할 때
# IP Address 구성 정보
Get-NetIPConfiguration
# 공유된 폴더 목록 확인
Get-SmbShare
# 컴퓨터 이름 변경
Rename-Computer -NewName svr2 -Restart
# 특정 프로그램 종료
Get-Process -Name chrome | Stop-Process -Force
동시에 여러 대의 컴퓨터에 원격 관리 작업할 때
Script 파일을 Group Policy로 적용할 때 </aside>
<aside> ⭐ powershell 장점 cmd.exe에서 사용하는 거의 모든 명령어 사용 가능
Get-Command -CommandType Application | Where-Object {$_.name -like "*.exe"}
cmd.exe에서 부족했던 Pipeline 기능 사용 가능
Cmdlet이 계속 늘어난다
명령어의 구문이 이해하기 쉽다
도움말 기능이 탁월하다
사용한 명령어와 관련된 명령어를 쉽게 알 수 있다
</aside>
<aside> ⭐ powershell 장점
# .exe로 끝나는 명령어 확인 (msc 도 가능)
Get-Command -CommandType Application | Where-Object {$_.name -like "*.exe"}
Get-Command -CommandType Application | Where-Object {$_.name -like "*.msc"}
Get-Command -CommandType Application | ? {$_.name -like "*.msc"}
cmd.exe에서 부족했던 Pipeline 기능 사용 가능
→ cmd에는 pipeline이 없음.
Cmdlet이 계속 늘어난다
# 모듈 보기
Get-Module -ListAvailable
Import-Module -Name ActiveDirectory
명령어의 구문이 이해하기 쉽다
→ parameter 잘 활용
Verb-Noun
Verb-Noun -Parameter value
Verb-Noun -Parameter value1, value2
Verb-Noun -Parameter1 value -Parameter2 value
Verb1-Noun -Parameter value | Verb2-Noun | Verb3-Noun
Verb1-Noun ; Verb2-Noun
도움말 기능이 탁월하다
**# 하기전 필수**
update-help -force
help get-disk -showwindow
사용한 명령어와 관련된 명령어를 쉽게 알 수 있다
→ Get-Process를 알게 되면 Get-command -process를 하면 동사를 모두 알 수 있다.
GUI 관리도구에는 없는 기능을 구현한다
자동화 관리 및 반복 작업에 유용하다
Group Policy에서는 .vbs, .bat, .ps1 파일을 사용한다
원하는 cmdlet이 없는 경우에 Script 및 Function을 만들어 사용할 수 있다
원격 관리 기능이 탁월하다 </aside>
<aside> ⭐ PowerShell version
# version 확인
$psversiontable
쉬어가는코너
# 명령어를 command.txt에 다 저장
Start-Transcript c:\\command.txt
# 결과를 notepad에 저장
get-disk | clip.exe
notepad
Ctrl+v
</aside>
<aside> 📌 정리
<aside> 📌 필수적인 cmdlet
# parameter 알아보기
help get-childItem
# 별칭 알아보기
get-alias -definition select-string
get-alias -name sls
# 등록
Set-Alias excel
Export-Alias c:\\Lab\\AddedAlias.txt
# profile에 저장하여 사용
$profile
변수 사용하기
$profile
$host
$PSVersionTable
# -Filter, {}, Where-Object 앞에 나온 Object
$_
Get-Service | Where-Object {$_.name -like "app*"}
# windows powershell이 설치된 위치
cd $PsHome
필수적인 cmdlet
Get-Member
Select-Object
# property 선택하여 보기
get-service | select-object name, displayname | more
Where-Object
Get-ChildItem -Path c:\\windows\\ -filter *.txt -recurse
Get-ChildItem -Path c:\\windows\\ -recurse | where-Object {$_.name -like "*.txt"}
ForEach-Object
# \\lab폴더 파일 이름 또는 프로세스 이름 확인
dir c:\\lab -Recurse | ForEach-Object {$_.name}
get-process | foreach-object {$_.name}
# 숫자 사칙연산
1..13 | $ {$_*7}
# 원격 컴퓨터를 강제로 GPupdate하기
Get-ADComputer -Filter {Name -like "server*“} | % {Invoke-GPupdate -
Computer $_.name -Force -RandomDelayInMinutes 0}
**# 특정한 날 이후로 지금까지 변경된 파일 확인**
Get-ChildItem $Home -Recurse | Where-Object {$_.LastWriteTime -gt “04/30/2014”}
</aside>
<aside> 📌 가장 많이 쓰이는 명령어
# format list
Get-Process | fl *
Get-Process | Format-Wide -Column 4
Get-Process | fw -Column 4
$ProFILE | get-member | ft -wrap
*-csv
*-CliXml
Out-*
Get-Process | Out-Host
Get-Process | Out-Default
# grep
Get-Alias | Out-String -Stream | Select-String "get-command"
*-Host
ConvertTo-*
Test-*
</aside>
<aside> 📌 PowerShell 심화
항상 Property를 확인 → Select-Object , Where-Object
# Object 기반
Get-Process -Name notepad | gm
$ms=(Get-Process -Name notepad).Company
$ms.Length
parameter를 확인
# 온라인으로 보기
update-help -force
help Enter-PSSession -online
# Parameter 확인
# pscx안에 Get-Parameter 존재
Install-Module -name pscx -AllowClobber
Get-Parameter -CommandName Enter-PSSession
<aside> 🛠 online에서 module과 package설치
</aside>
<aside> 🛠 Azure
</aside>