IT민들레 - M365 Specialist

Office 365 라이선스 현황 메일링 - Power Automate 를 활용하여 라이선스 현황 자동 메일링 / Use Power Automate to keep an eye on your licenses 본문

Microsoft Office 365

Office 365 라이선스 현황 메일링 - Power Automate 를 활용하여 라이선스 현황 자동 메일링 / Use Power Automate to keep an eye on your licenses

IT민들레 2021. 12. 18. 17:40
728x90
반응형

Power Automate 를 활용하면 매일 정해진 시간에 O365 라이선스 현황(잔여수량/할당수량/구매수량 등) 을 정기적으로 이메일로 리포팅 받는 흐름(Flow)을 만들 수 있습니다. Microsoft Admin Center 에서 라이선스 현황을 수동으로 확인하지 않아도 되는 장점이 있습니다. 

전체적인 단계는 아래와 같습니다.

  1. Azure AD 에 새로운 App 등록 - Graph API 호출에 필요한 권한
  2. Power Automate 에서 새로운 흐름(Flow) 생성
  3. Microsoft Graph API 로 라이선스 현황 가져오기
  4. API로 받은 결과를 Parsing
  5. 가져온 배열 데이터에서 필요한 라이선스만 필터링
  6. Excel Online 에 라이선스 수량 업데이트
  7. Excel Online 을 읽어서 HTML 생성
  8. HTML 을 이메일로 보내기

Power Automate 에 이 단계들을 완성된 Flow 로 보면 다음과 같습니다. 위의 1번 단계는 API 호출을 위해 설정하는 별도의 단계입니다. 

아래는 상세 설명입니다.

  • App 등록 - Azure AD 에 새로운 App을 등록
    1. Global Admin 또는 Azure AD Admin 권한 필요
    2. Azure Active Directory > App registrations 접속
    3. "+ New registration" 클릭
    4. Name 입력 후 저장
    5. API permission 등록 - API permission 메뉴를 선택하고, Add a permission 을 클릭합니다. 
    6. Microsoft Graph API 클릭
    7. Organization.Read.All 로 검색하여 선택 후 저장


    8. Organization.Read.All 이 추가되면 "Grant admin consent for ..." 를 클릭하여 적용하세요. 
    9. Certificates & secrets 메뉴에서 Client secret 을 등록합니다. 만료기한은 24개월이 최대입니다. 
      주의! Secret ID 및 Value 는 자동으로 마스킹처리가 되어 나중에는 확인할 수 없으니 반드시 복사해서 별도로 저장해 두시기 바랍니다. 


    10. Overview 의 Tenant ID, Client ID 를 확인합니다. 이 ID들과 Secret value 를 Power Automate 에서 API 호출을 위해 사용하게 됩니다. 


      API를 통해 데이터를 가져오기 위한 App 등록이 완료되었으니 이제 Power Automate 에서 데이터를 가져오고 메일을 보내는 흐름을 만듭니다. 

  • Power Automate 에서 새로운 흐름(Flow) 생성
    1. Power Automate 에 접속하여 New flow > Scheduled cloud flow 를 선택합니다. 정해진 시간 또는 반복적으로 라이선스 현황을 이메일로 보내기 위한 유형입니다.  
    2. 평일 오전10시 마다 동작하도록 설정합니다. 
    3. New step 을 클릭합니다. 
    4. MS Graph API 호출을 위하여 HTTP 를 추가하고 아래와 같이 입력합니다. 
      2번 : https://graph.microsoft.com/v1.0/subscribedSkus
      4번 : Tenant ID, 6번 : Client ID, 7번 : Secret value 를 입력하면 됩니다. 
      5번은 https://graph.microsoft.com 를 입력하세요. 
       
    5. 하나의 Step 이 완료되면 Save & Test 를 통해서 현재까지의 흐름에 오류는 없는지 테스트 결과를 확인합니다. 테스트 결과에는 실제 동작 단계별로 데이터도 확인할 수 있습니다. 아래는 HTTP 단계까지 테스트를 실행한 결과입니다. 

      아래와 같이 오류없이 결과가 출력되면 정상인 것입니다. 
    6. HTTP로 https://graph.microsoft.com/v1.0/subscribedSkus 로 호출한 결과를 Parsing 하기 위하여 Parse JSON 단계를 추가합니다. 
      Schema는 이전 단계의 테스트결과를 복사하여 "Generate from sample" 을 클릭하고 열리는 창에 붙여넣기하면 위와같이 설정됩니다. 또는 아래 코드를 복사&붙여넣기 하세요. 
      { "type": "object", "properties": { "@@odata.context": { "type": "string" }, "value": { "type": "array", "items": { "type": "object", "properties": { "capabilityStatus": { "type": "string" }, "consumedUnits": { "type": "integer" }, "id": { "type": "string" }, "skuId": { "type": "string" }, "skuPartNumber": { "type": "string" }, "appliesTo": { "type": "string" }, "prepaidUnits": { "type": "object", "properties": { "enabled": { "type": "integer" }, "suspended": { "type": "integer" }, "warning": { "type": "integer" } } }, "servicePlans": { "type": "array", "items": { "type": "object", "properties": { "servicePlanId": { "type": "string" }, "servicePlanName": { "type": "string" }, "provisioningStatus": { "type": "string" }, "appliesTo": { "type": "string" } }, "required": [ "servicePlanId", "servicePlanName", "provisioningStatus", "appliesTo" ] } } }, "required": [ "capabilityStatus", "consumedUnits", "id", "skuId", "skuPartNumber", "appliesTo", "prepaidUnits", "servicePlans" ] } } } }​



    7. 필요한 라이선스만 필터링하기 위하여 Filter array 단계를 추가합니다. 
      Edit in advanced mode 를 클릭 후 아래 코드를 넣습니다. 이 예제는 2개의 라이선스코드만 필터링합니다. 

      @or(contains(item()?['skuPartNumber'], 'DEVELOPERPACK_E5'),contains(item()?['skuPartNumber'], 'FLOW_FREE'))
      (*FLOW_FREE 는 "MICROSOFT FLOW FREE" 라이선스이고, DEVELOPERPACK_E5 는 "OFFICE 365 E5"  입니다. 라이선스 코드와 일반적인 제품명은 Product names and service plan identifiers for licensing 를 참고하세요.)

    8. 데이터를 저장할 Excel Online 파일을 준비합니다. OneDrive 또는 SharePoint 에 Excel 파일을 만들고 Table 지정을 하면 해당 Table 의 데이터를 업데이트할 수 있습니다. 라이선스 수량이 변화되므로 항시 업데이트가 되어야 합니다. Excel Online 에서 Insert > Table 을 클릭하고, Header 포함 옵션을 선택한 후 OK 합니다. 

      Header는 skuPartNumber, enabled, consumedUnits 3개로 설정하고, 위에 설명한 skuPartNumber 에 라이선스코드를 기재합니다. (*이 값이 Key 가 되어 나머지 컬럼을 업데이트하게 됩니다.)


    9. 결과를 반복문으로 돌면서 업데이트 하기 위하여 Apply to each 를 선택하고, Update a row(Excel Online Business) 을 선택 후 아래와 같이 설정합니다. 
      동적 변수의 값은 항목 부분을 클릭 시 우측에서 선택하여 클릭하면 됩니다. 
    10. 이제 Test 를 다시 진행해서 Excel 에 업데이트가 잘 되는지 확인합니다. 잘 동작된다면 아래처럼 각 컬럼의 숫자가 업데이트 됩니다. 이어서 이 Excel 에 저장된 데이터를 불러와서 HTML 포맷으로 만든 후 이메일을 전송할 것입니다. 


    11. Excel Online 데이터를 읽어오기 위하여 List rows present in a table 단계를 추가한 후 해당 Excel 의 위치와 Table 을 설정합니다. 
    12. 읽어온 데이터를 HTML 로 구성하기 위하여 Create HTML table 단계를 추가하고 아래처럼 표 형태를 설정합니다. Show advanced option 선택 후 Custom 모드로 각 컬럼을 지정할 수 있습니다. 
      Test 를 실행하면 아래와 같은 Output 확인이 가능합니다. 이제 이것을 이메일로 전송하면 성공입니다. 
    13. Send an email 단계를 추가하고, 수신받을 이메일주소 및 제목, 본문을 설정합니다. 
      제목에 현재 날짜를 동적으로 추가하려면 formatDateTime(utcNow(),'yyyy-MM-dd') 를 동적변수 부분에서 설정합니다. 

이제 최종 Test 를 수행하여 이메일로 도착하는 결과를 확인해 보세요. 
아래와 같은 결과를 확인할 수 있습니다. 

 

감사합니다. 

728x90
반응형