Pretty close. The body for an Invoke call is always an array. For Cirrus.ConfigArchive/Execute, the first argument is also an array. The "transfer ID" string uses the NCM NodeID (which is a GUID), not the integer NodeID, and the username segment is not wrapped in {braces} - that's just powershell string interpolation syntax.
So this command: Invoke-SwisVerb $swis Cirrus.ConfigArchive Execute @($nodeIdList, $script, $username)
Turns into this HTTP request:
POST /SolarWinds/InformationService/v3/Json/Invoke/Cirrus.ConfigArchive/Execute
[
["44550400-8415-4209-b78e-c5596cdfe086"],
"show clock",
"admin"
]
And the transfer id string would be "{44550400-8415-4209-b78e-c5596cdfe086}:admin:ExecuteScript"
I use a Chrome extension called "postman" to test REST APIs. I attached example requests to this reply. If you are having trouble with these calls, you might find it helpful to install postman and load up this file.