PowerShellスクリプトを使用してAPI呼び出しを行うときに確認するガイドラインを次に示します。
1。 確認してください $ requestvars 正しい変数が正しい順序でリストされています。
たとえば、GETスクリプトは次のようになります。
$ requestVars = $ httpVerb + $ epich + $ resourcePath
POST、PATCH、またはPUTスクリプトは次のようになります。
$ requestVars = $ httpVerb + $ epich + $ data + $ resourcePath
2.次のことを確認してください $ accessId or $ accessKey ています $二重引用符ではなく、一重引用符で囲まれている文字列内。 これにより、文字列内にnull変数が追加され、認証が失敗します。
3.応答が正しく作成されていることを確認します。
GETリクエストの場合、 $応答 次のようになります。
$ response = Invoke-RestMethod -Uri $ url -Method $ httpVerb -Header $ headers
POST、PATCH、またはPUTリクエストの場合
$ response = Invoke-RestMethod -Uri $ url -Method $ httpVerb -Body $ data -Header $ headers
4.次のことを確認します $ url 変数は $ resourcePathと $ queryParms 必要に応じて、しかし決して $データ.
$url = "https://$company.logicmonitor.com/santaba/rest$resourcePath"
$url = "https://$company.logicmonitor.com/santaba/rest$resourcePath$queryParams"
5。 の前に $応答、署名とヘッダーがそのように構築されていることを確認してください
<# Get current time in milliseconds #>
$epoch = [Math]::Round((New-TimeSpan -start (Get-Date -Date "1/1/1970") -end (Get-Date).ToUniversalTime()).TotalMilliseconds)
<# Construct Signature #>
$hmac = New-Object System.Security.Cryptography.HMACSHA256
$hmac.Key = [Text.Encoding]::UTF8.GetBytes($accessKey)
$signatureBytes = $hmac.ComputeHash([Text.Encoding]::UTF8.GetBytes($requestVars))
$signatureHex = [System.BitConverter]::ToString($signatureBytes) -replace '-'
$signature = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($signatureHex.ToLower()))
<# Construct Headers #>
$auth = "LMv1 $accessId:$signature:$epoch"
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization",$auth)
$headers.Add("Content-Type",'application/json')
これらすべてが良さそうな場合は、 $ queryParms 及び $データ 引用符が一致していることと、整数である必要があるものが引用符で囲まれていないことを確認してください。