====== Create json-rpc web-request from within a powershell script to query the json-rpc api ====== $urlJSON = 'https://xxx.xxx.xxx.xxx:4447/rpc' $authUser = "[username]" $authPass = "[password]" $method = "[method]" $params = @("[param1]","[param2]") Function CallJSON($url,$object,$authUser,$authPass,$method,$params) { $cred = New-Object System.Net.NetworkCredential -ArgumentList $authUser,$authPass $bytes = [System.Text.Encoding]::ascii.GetBytes($object) $web = [System.Net.WebRequest]::Create($url) [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} $web.Method = "POST" $web.ContentLength = $bytes.Length $web.ContentType = "application/json" $web.Credentials = $cred $stream = $web.GetRequestStream() $stream.Write($bytes,0,$bytes.Length) $stream.close() $reader = New-Object System.IO.Streamreader -ArgumentList $web.GetResponse().GetResponseStream() return $reader.ReadToEnd()| ConvertFrom-Json $reader.Close() } $data = (New-Object PSObject | Add-Member -PassThru NoteProperty method $method | Add-Member -PassThru NoteProperty params $params | Add-Member -PassThru NoteProperty id '1') | ConvertTo-Json -depth 3 $request = CallJSON $urlJSON $data $authUser $authPass $method $params **example**: automatically assign a meta-package of default software to every new client registered to OPSI $urlJSON = 'https://your-opsi-server-url:4447/rpc' $authUser = "adminuser" $authPass = "TopSecretPassword" $method = "setProductActionRequestWithDependencies" $params = @("hwaudit","servername.domain.tld","setup") Function CallJSON($url,$object,$authUser,$authPass,$method,$params) { $cred = New-Object System.Net.NetworkCredential -ArgumentList $authUser,$authPass $bytes = [System.Text.Encoding]::ascii.GetBytes($object) $web = [System.Net.WebRequest]::Create($url) [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} $web.Method = "POST" $web.ContentLength = $bytes.Length $web.ContentType = "application/json" $web.Credentials = $cred $stream = $web.GetRequestStream() $stream.Write($bytes,0,$bytes.Length) $stream.close() $reader = New-Object System.IO.Streamreader -ArgumentList $web.GetResponse().GetResponseStream() return $reader.ReadToEnd()| ConvertFrom-Json $reader.Close() } $data = (New-Object PSObject | Add-Member -PassThru NoteProperty method $method | Add-Member -PassThru NoteProperty params $params | Add-Member -PassThru NoteProperty id '1') | ConvertTo-Json -depth 3 $request = CallJSON $urlJSON $data $authUser $authPass $method $params