Windows 뿐만 아니라 Linux, Cloud도 Powershell 로 관리할 수 있다
Linux에 powershell 설치하기
# Register the Microsoft RedHat repository
curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
# Install PowerShell
sudo yum install -y powershell
# Start PowerShell
pwsh
>> powershell 시작
Linux에서 Powershell 설치하여 실행
** 패키지가 어디있는지 정보 : repository(unix), provider(powershell)
yum install nginx -y : nginx 설치 (안됨)
yum repolist : repository에 nginx 있는지 확인
yum install epel-release -y : 하면 13000개 가량의 repository가 추가되어 nginx 설치됨
Linux의 repository에 해당하는게 Powershell의 Provider
(ps) Get-PackageProvider : 설치된 패키지 확인
Package 관리
Package : Excel과 같은 프로그램
Module : cmdlet의 집합. 명령어를 사용하는 것 windows powershell의 기본 명령어는 얼마 없기 때문에 모듈을 추가해야 한다.
인터넷에 연결하여 모듈과 패키지 설치로 많은 종류의 cmdlet을 추가하여 사용할 수 있다.
이미지 출처 https://www.red-gate.com/simple-talk/sysadmin/powershell/managing-packages-using-windows-powershell/
PowerShell v5.0 부터는 다음과 같이 모듈을 추가하면 Online에서 공유하고 있는 Module(cmdlet 집합)과 Package를사용할 수 있다
Import-Module -Name PackageManagement
이제 Find-Package / Install-Package 와 같은 명령어 사용이 가능하다
Import-Module -Name PowerShellGet
이제 Find-Module / Install-Module 와 같은 명령어 사용이 가능하다
PackageManagement
Linux에서는 yum, apt-get으로 Online에 접속하여 Package를 설치하고 있는데, 이것들과 동일한 개념이 바로PackageManagement이다.
통합 Package 관리 유틸리티로서 Package를 Online에서 검색,설치, 업데이트 및 제거한다.
PackageManagement 모듈에 속한 cmdlet 확인하기이런 식으로 패키지 설치가 가능하다
PowerShellGet 모듈에 속한 cmdlet 확인하기특정 이름의 모듈을 찾는 것과 비슷한 이름의 모듈을 찾는 것도 가능하다
실습)Find-Module로 원하는 모듈을 찾고,Install-Module로 모듈을 설치,Get-Command로 원하는 함수(기능)을 찾고,실행하기
**find-command -name get-parameter등 해당 명령어를 포함하는 모듈을 찾아서 install 할 수도 있다.
•cmd.exe에서 사용하는 거의 모든 명령어를 사용 가능하다 •강력한 Pipeline 기능 •도움말이 탁월하다 •하나의 명령어를 알게 되면 연관 명령어를 쉽게 찾을 수 있다 •GUI에 비하여 내용을 구체적으로 확인 및 상세히 설정 가능하다 •반복 작업에 유용하다 •Group Policy를 통하여 PowerShell Script도 적용할 수 있다 •원하는 cmdlet이 없는 경우에 Script를 만들어 사용할 수 있다 • Function, Module 등을 사용자가 필요에 따라서 생성할 수 있다 • 원격관리 기능이 탁월하다 • CLI 기반의 관리 작업 : GUI는 작업 속도가 느리고 세부적인 정보를 확인하는데 한계가 있고 원격 작업 시 방화벽을 통과하지 못할 수도 있다
cmdlet : powershell 명령어
module : cmdlet 모음
Get-Module -ListAvailable : 사용 가능한 모듈 목록 출력
Import-Module -Name activedirectory : activedirectory 관련 모듈을 임포트(임포트해야 사용 가능)
Get-Command -Module activedirectory : activedirectory 모듈의 사용가능한 cmdlet 출력
특정 단어와 관련된 cmdlet 찾기 Get-Command(줄여서 gcm) 이용
Get-Command *address* : address 관련 명령어 찾기
gcm *ip* : ip 관련 명령어 찾기
Get-Command -CommandType application | Where-Object {$_.name -like "*.exe"}
: type이 application 인 것 중에 .exe가 들어가는 명령어 찾기
명령어가 기억 안날 때 도움받는 법 Help, -examples 옵션 활용하기 ** 항상 Help 기능을 최신으로 유지한다 : Update-Help
Get-Help -Name cmdlet
줄여서 >> Help -Name cmdlet
줄여서 >> Help cmdlet
Help *서비스*
Help cmdlet -Examples : 예시 문장을 볼 수 있음
** 역할 및 기능을 설치할 때는 습관적으로 -IncludeManagementTools 와 -IncludeAllSubfeature 매개변수를 사용하는 게 좋다.
cmdlet마다 Property와 Method를 확인해야 한다. (확인 방법 : cmdlet | Get-Member)
get-service | get-member
get-process | get-member
특정 서비스의 Property 내용 보기
(get service -Name bits).status
get-service | Where-Object {$_.status -eq "stopped"}
: Where-Object는 필터링. $_는 오브젝트 하나하나. 그 중에 status가 stopped인 서비스만 보여달라
각 cmdlet의 property 값 확인 : Property와 그 값까지 보고싶으면 fl * 사용
cmdlet | fl *
cmdlet | Format-List *
Method 실행하기
(Get-Service -name bits).start() : 서비스 시작
(Get-Service -name bits).stop() : 서비스 중지
(Get-Date).Adddays(100) : 100일 후 날짜 알아보기
get-process -name notepad | Stop-Process -Force : 강제 종료
정렬하여 확인 가능 sort-object 이용
get-hotfix : 업데이트 확인
get-hotfix | sort-object -property = installedon : 설치된 날짜 순으로 정렬하여 보여달라
(get-hotfix | sort-object -property installedon)[-1] : 제일 마지막으로(최신에) 설치된 항목
특별히 WinRM 서비스 5985, 5986 포트를 사용하여 원격 관리를 하므로, 방화벽 관리가 쉬움 >> 원격 컴퓨터 내용보기 1. enter-pssession : 아예 원격 컴퓨터로 들어감 2. invoke-command(줄여서 icm) : 작업하고 빠져나옴
enter-pssession -computername sea-dc1
enter-pssession -cn sea-dc1
Invoke-Command -cn sea-dc1 {dir c:\ }
Invoke-Command -cn sea-dc1 {Restart-Computer -Force} : 강제 재시작
Invoke-Command -cn sea-svr1, sea-svr2 {Install-WindowsFeature -Name telnet-client} : 텔넷 서비스를 두대의 컴퓨터 동시에 설치
기존의 Windows 명령어를 그대로 사용할 수 있음
Net users, route, ipconfig, ping, fsutil.exe, netdom.exe 등
Pipeline과 Script를 적절히 사용하면 시스템을 강력하게 관리 가능
Get-ChildItem -Path c:\ -Filter *.png -Recurse | Copy-Item -Destination e:\backup : c드라이브에서 png 파일을 찾아서 e드라이브에 복사
Scripting 환경 제공 : 반복적으로 해야 할 작업이나 자동화 해야 할 작업에 적합하다.
특정 서비스 중지되어 있을 때 강제로 시작시키는 스크립트
반복 작업 ex) 사용자 계정을 1000개 생성할 때 ex) File Server의 특정한 폴더를 1주일에 한 번씩 Copy 또는 Backup할 때
사용자를 추가하는 엑셀파일
Import-Csv -path ~ | new-aduser 명령어로 1초만에 users 추가 가능