API Actions: PowerShell
The following is a sample PowerShell script that demonstrates how to call the CLOUDBASIC API.
For the latest version of all CLOUDBASIC examples please refer to our GitHub repositories here
cb_api_call.ps1
/* */ <# Sample PowerShell script to call the CLOUDBASIC API #> $method = 'POST' $service = 'cloudbasic' $region = '' <#In version 12.301 and above, for AMI (non-SaaS, instance deployed to customer's VPC) product versions, region must be left blank; earlier versions required region to be defaulted to us-east-1 for backward compatibility with AWS API#> $scheme="AWS4" $algorithm = 'AWS4-HMAC-SHA256' <# API Method and body content for it #> $host1 = 'YOUR.HOST.NAME.HERE:YOUR_PORT' <#10.10.10.2:82#> <#default http port is 82, default https port is 4432 (if SSL is installed over RDP, or self-generated on the web console under /Configuration) is 4432#> $canonical_uri = 'API_CALL_PATH' <#/api/GetReplicationsList#> $endpoint = 'http://' + $host1 + $canonical_uri $access_key = 'YOUR_CLOUDBASIC_API_KEY' <#https://cloudbasic.net/documentation/api/#> $secret_key = 'YOUR_CLOUDBASIC_SECRET_API_KEY' <#https://cloudbasic.net/documentation/api/#> $bodyContent ='{"replicationId":""}' <#Put any expected parameters in here. Leave blank if no parameters are expected.#> function getStringHash([String] $String,$HashName = "SHA256") { $StringBuilder = New-Object System.Text.StringBuilder [System.Security.Cryptography.HashAlgorithm]::Create($HashName).ComputeHash([System.Text.Encoding]::UTF8.GetBytes($String))|%{ [Void]$StringBuilder.Append($_.ToString("x2")) } $StringBuilder.ToString() } function computeKeyedHash($key, $data) { $hmacsha = New-Object System.Security.Cryptography.HMACSHA256 $hmacsha.key = $key return $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($data)) } function hash($request) { $hash =getStringHash($request) return $hash } $contentHash = hash $bodyContent; $amz_date = [DateTime]::UtcNow.ToString('yyyyMMddTHHmmssZ') $datestamp = [DateTime]::UtcNow.ToString('yyyyMMdd') <# canonical headers #> $canonical_headers = 'content-type:' + "application/xml" + "`n"; $canonical_headers = $canonical_headers +'host:' + $host1 + "`n" $canonical_headers = $canonical_headers + 'x-amz-content-sha256:' + $contentHash + "`n"; $canonical_headers = $canonical_headers + 'x-amz-date:' + $amz_date; $canonical_header_names = 'content-type;host;x-amz-content-sha256;x-amz-date'; <#---------------------------#> $credential_scope = $datestamp + '/' + $region + '/' + $service + '/' + "aws4_request" function getSignatureKey($key, $dateStamp, $regionName, $serviceName) { $kSecret = [Text.Encoding]::UTF8.GetBytes(("AWS4" + $key).toCharArray()) $kDate = computeKeyedHash $kSecret $dateStamp; $kRegion = computeKeyedHash $kDate $regionName; $kService = computeKeyedHash $kRegion $serviceName; $kSigning = computeKeyedHash $kService "aws4_request"; return $kSigning; } function canonicalizeRequest($uri, $httpMethod, $queryParameters, $canonicalizedHeaderNames, $canonicalizedHeaders, $bodyHash) { $canonicalRequest="" $canonicalRequest += $httpMethod + "`n" $canonicalRequest += $uri + "`n" $canonicalRequest += $queryParameters + "`n" $canonicalRequest += $canonicalizedHeaders + "`n`n" $canonicalRequest += $canonicalizedHeaderNames + "`n" $canonicalRequest += $bodyHash return $canonicalRequest } $canonical_request1= canonicalizeRequest $canonical_uri "POST" "" $canonical_header_names $canonical_headers $contentHash Write-Host "`n Request `n" Write-Host $canonical_request1 Write-Host "`n ----------------------" $canonical_request_hash = hash -request $canonical_request1 $string_to_sign = $algorithm + "`n" + $amz_date + "`n" + $credential_scope + "`n" + $canonical_request_hash Write-Host "`n String to sign: `n" $string_to_sign Write-Host "`n ----------------------" $signing_key = getSignatureKey $secret_key $datestamp $region $service $signatureHash = computeKeyedHash -key $signing_key -data $string_to_sign $signature= [System.BitConverter]::ToString($signatureHash).Replace('-','').ToLower() Write-Host "`n Signature:" $signature $auth_string= $algorithm + " Credential="+$access_key+"/"+$credential_scope + ", SignedHeaders=" +$canonical_header_names + ", Signature=" + $signature Write-Host "`n" $auth_string <# Setting HTTP headers for the Invoke-WebRequest call #> $iwr_headers=@{'host' = $host1; 'x-amz-content-sha256' = $contentHash; 'x-amz-date' = $amz_date; 'content-type' = 'application/xml'; 'authorization' = $auth_string } <# executing Invoke-WebRequest call #> $r= iwr -URI $endpoint -Method 'POST' -Headers $iwr_headers -Body $bodyContent Write-Host "`n" $r