본문 바로가기
IT/Azure

Runbook으로 주기적으로 실행되는 powershell 만들기

by rapker 2023. 5. 18.
반응형
 

시작하기 전에

 
PowerShell Runbook은 기본적으로 AzureRM 모듈을 사용합니다.
아래 샘플 Powershell에 사용된 것처럼 AZ 모듈을 사용하기 위해 Automation > 모듈에서 필요한 Powershell AZ Module을 설치 해야 합니다.
 
샘플 PowerShell

호스트업데이트_outlook.ps1
0.00MB

728x90

 

 

az 모듈 설치 방법

 
Automation > 모듈 > 갤러리 찾아보기 에서 필요한 AZ 모듈을 설치하면 됩니다.
 

 

 
반응형
 

Automation 생성

 
Automation의 Runbook으로 주기적으로 실행되는 powershell을 만들 수 있습니다.
실행결과를 확인하기 위해 팀즈채널에 알림 보내기로 테스트 되었지만 powershell 내용은 상황에 따라 응용(메일 발송하기 등)이 가능합니다.
 
 

Runbook 생성

 

Powershell로 동작하는 Runbook을 생성합니다.

 
 

생성된 powershell타입의 runbook

빨간네모 영역에 동작할 powershell을 입력하면 됩니다.
 

 

테스트를 위해 팀즈 채널로 메세지를 보내 봅니다.
해당 테스트를 하기 위해서는 팀즈로 알림 보내기가 설정되어 있어야 합니다.
 
팀즈로 메세지 보내기 작성 후 저장
$url = "https://cloocus.webhook.office.com/webhookb2/4c243604-78c9-44fc-a212-db07d11ade8b@355deae4-a1d6-4d5e-be34-0ad0c20aaa0f/IncomingWebhook/b56e6ea32d2d4a6dadd47e42db39b51b/9003907b-3ea5-47ba-84d8-d42eee78d057"
$Body = '{
    "@context":"https://schema.org/extensions",
    "@type":"MessageCard",
    "themeColor":"0072C6",
    "title":"Hello Teams!!!",
    "text": "I am from Runbook"
    }' | ConvertFrom-Json | ConvertTo-Json
$Headers = New-Object 'system.collections.generic.dictionary[string,string]'
$Headers.Add("Content-Type", "application/json; charset=utf-8")   
   
Invoke-WebRequest -Uri $url -Body $Body -Method Post -Headers $Headers
 
 
runbook 저장 후 powershell이 잘 동작하는지 확인하기 위해 테스트 창으로 이동합니다.
 

 

테스트 화면에서 시작 버튼을 클릭합니다.
 
 
대기큐에 있다가 조금 있으면 실행이 완료 되면서 아래 오류 메세지가 출력되는데요
실행은 잘 되지만 응답 결과를 파싱하지 못하는것으로 보여지므로 그냥 무시합니다.
 
 
팀즈로 전달된 메세지 확인
 
 
 
runbook편집 창으로 이동한 후 게시 버튼을 클릭합니다.
 
 
게시가 완료 되면 runbook 메인화면으로 이동 됩니다.
 
 
 
 

Runbook에 일정 등록

 

runbook에 일정을 등록하여 주기적으로 powershell이 동작하도록 합니다.
runbook메인화면에서  일정에 연결 버튼을 클릭합니다.
 
 

 

Runbook에 일정 연결 클릭해서 일정을 생성합니다.

 

 
이제 모든 설정은 완료 되었구요
매 시간 35분 마다 팀즈로 메세지가 오는지 확인합니다.
 
 
 

 

 

 

Runbook에서 메일 보내기

 
runbook에서 powershell을 통해 메일을 보낼 수 도 있습니다.
(테스트 결과 gmail계정은 발송이 안되고 outlook계정으로 메일을 발송할 수 있습니다.)
$smtp_id = ""                          #smpt 계정 ID
$smtp_pw = ""                          #smtp 계정 PW
$smtp_addr = "smtp-mail.outlook.com"    #smtp 주소
$smtp_port = 587                        #smtp port
$mail_to = ""                          #수신 메일, 여러명일 경우 $To = ("",""...."")
$mail_subject = "Azure Host Update Check"
$pw = ConvertTo-SecureString -String $smtp_pw -AsPlainText -Force
$mail_credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $smtp_id, $pw 
$Body = "Test send mail" | Out-String
Send-MailMessage -From $smtp_id -To $mail_to -Subject $mail_subject -Body $Body -smtpServer $smtp_addr -Encoding UTF8 -Credential $mail_credential -UseSsl -Port $smtp_port
 
outlook smtp 정보

 

기업용 Office 365의 smtp서버 정보는 다음과 같습니다.
Port : 587
 
개인용 Office 365의 (outlook.com / Hotmail.com 등) SMTP 서버정보는 다음과 같습니다.
Port : 587
 
참고
 
반응형
LIST