LINE WORKS API 2.0 を PowerShell で叩いてみる (その5 : ユーザーの登録)

これまでの記事では、PowerShell を使い、LINE WORKS API 2.0 を呼び出して LINE WORKS の[登録済みのユーザー一覧を取得](https://qiita.com/msato-3/items/4342e44b9ecf64be33e9)したり、[ユーザー写真のアップロード](https://qiita.com/msato-3/items/98f1ff90c833246d6c97)や[ダウンロード](https://qiita.com/msato-3/items/e8965e082a640ad0ba7b)をしてみました。

今回は、ユーザーの登録を試してみます。

[ユーザーの登録](https://developers.worksmobile.com/jp/reference/user-create?lang=ja)を確認し、リファレンスに従って、ユーザー情報を JSON で記載し、POST リクエストの Body として呼び出します。
JSON 形式で文字列をカリカリ書いても良いですが、PowerShell を使用する場合には HashTable として Object を組み立てて、最期に JSON 形式に変換するのが簡単だと思います。
必須パラメータと、後々の動作確認のために `telephone` だけを記載すると、以下でユーザーが作成できます。

```powershell
<# Token を取得して Header を作るところまでは、その 1 の記事参照#>

$postUserURL = "https://www.worksapis.com/v1.0/users"

[HashTable]$User = @{
    domainId        = 12345678
    email           = "newuser@yourcompany"
    userName        = @{
        lastName            = "lastName"
    }
    passwordConfig  = @{
        passwordCreationType    = "ADMIN"
        password                = "Password1!?"
    }
    telephone       = "090-1234-5678"
}

$response =Invoke-RestMethod -Method POST -Uri $postUserURL -Headers $Header -body (ConvertTo-Json  $User)

```

作成されたユーザーは $response に入っており、こんな感じで確認できます。
LINE WORKS API 2.0 では、値の入っていないプロパティも返してくれます。
```powershell
>$response
domainId                  : 12345678
userExternalKey           : 
email                     : newuser@yourcompany
userName                  : @{lastName=lastName; firstName=; phoneticLastName=; phoneticFirstName=}
i18nNames                 : {}
nickName                  : 
privateEmail              : 
aliasEmails               : {}
employmentTypeId          : 
searchable                : True
organizations             : {@{domainId=12345678; primary=True; userExternalKey=; email=newuser@yourcompany; levelId=; executive=False; orgUnits=System.Object[]; organizationName=あなたの会社の名前; levelExternalKey=; levelName=}}
telephone                 : 090-1234-5678
cellPhone                 : 
fax                       : 
location                  : 
task                      : 
messenger                 : 
birthdayCalendarType      : 
birthday                  : 
hiredDate                 : 
locale                    : ja_JP
timeZone                  : Asia/Tokyo
customFields              : {}
relations                 : {}
userId                    : 483ea9b2-1977-4ed9-1593-041c9000c16b
isAdministrator           : False
isPending                 : True
isSuspended               : False
leaveOfAbsence            : @{startTime=; endTime=; isLeaveOfAbsence=False}
isDeleted                 : False
suspendedReason           : 
employmentTypeExternalKey : 
employmentTypeName        : 
```

または、`ConertTo-Json` を使えば、JSON 形式で確認することもできます。`ConertTo-Json` は、階層が深くなると正しく表示してくれないので、`-depth` を指定しておきます。
JSON 形式でリクエスト ボティを手書きする場合にはこちらも参考になります。
```json
> $response  | ConvertTo-Json -Depth 10
{
  "domainId": 12345678,
  "userExternalKey": null,
  "email": "newuser@yourcompany",
  "userName": {
    "lastName": "lastName",
    "firstName": "",
    "phoneticLastName": "",
    "phoneticFirstName": ""
  },
  "i18nNames": [],
  "nickName": null,
  "privateEmail": null,
  "aliasEmails": [],
  "employmentTypeId": null,
  "searchable": true,
  "organizations": [
    {
      "domainId": 12345678,
      "primary": true,
      "userExternalKey": null,
      "email": "newuser@yourcompany",
      "levelId": null,
      "executive": false,
      "orgUnits": [],
      "organizationName": "あなたの会社の名前",
      "levelExternalKey": null,
      "levelName": null
    }
  ],
  "telephone": "090-1234-5678",
  "cellPhone": null,
  "fax": null,
  "location": null,
  "task": null,
  "messenger": null,
  "birthdayCalendarType": null,
  "birthday": null,
  "hiredDate": null,
  "locale": "ja_JP",
  "timeZone": "Asia/Tokyo",
  "customFields": [],
  "relations": [],
  "userId": "483ea9b2-1977-4ed9-1593-041c9000c16b",
  "isAdministrator": false,
  "isPending": true,
  "isSuspended": false,
  "leaveOfAbsence": {
    "startTime": null,
    "endTime": null,
    "isLeaveOfAbsence": false
  },
  "isDeleted": false,
  "suspendedReason": null,
  "employmentTypeExternalKey": null,
  "employmentTypeName": null
}
```