Workspace ONE UEM をAPIで操作する(Windows PowerShell)

2022/07/14

API Workspace ONE

t f B! P L

こんにちは。tkです。
今回はAPIシリーズの3回目です。

以前の記事はこちら↓↓
Workspace ONE UEM をAPIで操作する(Workspace ONE UEM Explorer)
Workspace ONE UEM をAPIで操作する(Postman)

PoserShellでWorkspace ONEにAPIを実行する方法については、以下英語のブログで紹介されていますので、これを参考に今回検証していきたいと思います!
How to Use REST API in Workspace ONE UEM (with PowerShell) - Brooks Peppin's Blog

【UEM:認証用 AOuthトークン作成】

Postmanの時はAccessの認証用にトークンを作成しました。
UEMの認証用にトークンを作成します。

①Workspace ONE UEMにログインし、[グループと設定] > [構成] > [OAuth クライアント管理] を選択する。

②「追加」をクリックする。

③「新しいクライアントを登録」で以下の通り設定し、「保存」をクリックする。

項目設定値
名前任意の名前を入力。
説明利用目的などを入力。
組織グループOAuthトークンがアクセスする組織グループ
役割トークンの権限。Console Administratorを設定。
状態有効

④クライアントIDとクライアントシークレットが表示されるため、メモ帳などにコピーする。
 ※クライアントシークレットは後から確認できないため注意

一覧に作成したトークンが表示される。


【PowerShell でUEMにAPIを実行する】

UEMユーザー情報を取得するサンプルスクリプト

作成したトークン認証を使い、APIを実行します。
PowerShellでは、「Invoke-WebRequest」コマンドを使います。
access_token_urlは、以下サイトを参考に確認します。
REST API による UEM 機能の使用 (vmware.com)
<# 環境変数の指定。接続先となるUEMとそのトークン情報 #>
$server = "https://cnXXXX.awmdm.com"
$client_id = "クライアントID"
$client_secret = "クライアントシークレット"
$access_token_url = "https://na.uemauth.vmwservices.com/connect/token"

<# リクエストパラメータ #>
$body = @{
    grant_type    = "client_credentials"
    client_id     = $client_id
    client_secret = $client_secret
}
try {
    $response = Invoke-WebRequest -Method Post -Uri $access_token_url -Body $body -UseBasicParsing
    $response = $response | ConvertFrom-Json
    $oauth_token = [string]$($response.access_token)
}
catch {
    $ErrorMessage = $PSItem | ConvertFrom-Json
    Write-Log "Failed to create OAuth Token for: $env with following ErrorCode: $($ErrorMessage.errorCode) - $($ErrorMessage.message)" -ForegroundColor Red
}

<# ヘッダー情報。認証情報とデータ形式 #>
$header_v1 = @{
    "Authorization" = "Bearer " + $oauth_Token;
    "Accept" = "application/json;version=1";
    "Content-Type" = "application/json"
}
$header_v2 = @{
    "Authorization" = "Bearer " + $oauth_Token;
    "Accept" = "application/json;version=2";
    "Content-Type" = "application/json"
}

<# コマンドを実行 #>
$UEMusers = Invoke-RestMethod -Uri "$server/API/system/users/search?" -Method Get -Headers $header_v1

<# 情報を整形して出力 #>
$UEMusers.Users | ft -AutoSize -Wrap -Property * | Out-file -filepath C:\temp\UEM.txt -width 10000
APIによってはjsonのバージョンがv1とv2で出力が異なるものがあるようです。
v1とv2両方のヘッダーで試して、出力結果を見たほうがいいかもしれません。

UEMユーザー情報を取得するサンプルスクリプト2

ユーザー名とIDだけ出力など、複数パターンのサンプルです。実行結果も載せます。
<# ユーザー名とIDだけ出力 #>
$UEMusers.Users | ft UserName,Id

UserName         Id
--------         --
User01           @{Value=150500}
User02           @{Value=150501}
User03           @{Value=150499}
User04           @{Value=150691}
User05           @{Value=150778}


<# IDだけ出力 #>
$UEMusers.Users.Id

 Value
 -----
150500
150501
150499
150691
150778
150747
150746
150877
151641
150670

<# テーブルのヘッダを消し、空行を削除する #>
$UEMusers.Users.Id | ft -hide | Out-String -Stream | ?{$_ -ne ""}
150500
150501
150499
150691
150778
150747
150746
150877
151641
150670

UEMユーザー情報を取得するサンプルスクリプト3

IDのリストを読み込んでユーザー情報を取得するサンプルスクリプトです。
対象のIDに関する情報をGETするスクリプトですが、Deleteなどいろいろな使い方ができそうです。
$list = $UEMusers.Users.Id | ft -hide | Out-String -Stream | ?{$_ -ne ""}
foreach ( $userid in $list)
{
    Invoke-RestMethod -Uri "$server/API/system/users/$userid" -Method Get -Headers $header_v1
}

【PowerShell でAccessにAPIを実行する】

基本的にはUEMと同じです。
環境変数の接続先やトークン情報を変更し、コマンドをAccessのものに変更するだけです。
AccessのトークンについてはPostmanの記事を参考にしてください。
<# 環境変数の指定。接続先となるAccessとそのトークン情報 #>
$server = "https://XXXXXXXXXX.vidmpreview.com"
$client_id = "AccessのサービスクライアントトークンID"
$client_secret = "Accessのクライアントシークレット"
$access_token_url = "https://XXXXXXXXXX.vidmpreview.com/SAAS/auth/oauthtoken"


<# リクエストパラメータ #>
$body = @{
    grant_type    = "client_credentials"
    client_id     = $client_id
    client_secret = $client_secret
}
try {
    $response = Invoke-WebRequest -Method Post -Uri $access_token_url -Body $body -UseBasicParsing
    $response = $response | ConvertFrom-Json
    $oauth_token = [string]$($response.access_token)
}
catch {
    $ErrorMessage = $PSItem | ConvertFrom-Json
    Write-Log "Failed to create OAuth Token for: $env with following ErrorCode: $($ErrorMessage.errorCode) - $($ErrorMessage.message)" -ForegroundColor Red
}

<# ヘッダー情報。認証情報とデータ形式 #>
$header_v1 = @{
    "Authorization" = "Bearer " + $oauth_Token;
    "Accept" = "application/json;version=1";
    "Content-Type" = "application/json"
}
$header_v2 = @{
    "Authorization" = "Bearer " + $oauth_Token;
    "Accept" = "application/json;version=2";
    "Content-Type" = "application/json"
}

<# コマンドを実行 #>
$accessusers = Invoke-RestMethod -Uri "$server/SAAS/jersey/manager/api/scim/Users?" -Method Get -Headers $header_v1

<# 情報を整形して出力 #>
$accessusers.Resources | ft -AutoSize -Wrap -Property * | Out-file -filepath C:\temp\access.txt -width 10000

【まとめ】

WindowsのPowerShellからAPIを実行する方法を紹介しました。
以前紹介したWorkspace ONE UEM Explorerでコマンドを調べながら使うと、スクリプトの苦手な私でも結構簡単にいろいろできそうです。
また役に立つスクリプトなど作ることがあったら紹介したいと思います!

自己紹介

自分の写真
インフラ系システムエンジニア。Omnissa (旧VMware) Workspace ONEを専門に扱うことになったため、お勉強と備忘のためにブログを始めることに。

・VCP-DW 2022
・vExpert 2024
・Omnissa Certified Administrator – Workspace ONE
・2026 Omnissa Tech Insiders

X : https://x.com/a2px3ufsjnwcuef?s=21&t=D8E-kTvlDF8LLprCK1vuxA

このブログを検索

連絡フォーム

名前

メール *

メッセージ *

QooQ