Advertisement
jeroenburen

Run-SRSScript

Jan 12th, 2021
972
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #region: Workaround for SelfSigned Cert and force TLS 1.2
  2. add-type @
  3.   using System.Net;
  4.   using System.Security.Cryptography.X509Certificates;
  5.   public class TrustAllCertsPolicy : ICertificatePolicy {
  6.     public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate,WebRequest request, int certificateProblem) {
  7.       return true;
  8.     }
  9.   }
  10. @
  11.  
  12. [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
  13. [System.Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
  14. #endregion
  15.  
  16. #region Set the stage
  17. $Credentials = Get-Credential -Message "Enter credentials for SRS"
  18.  
  19. $Headers = @{
  20. "accept" = "application/json"
  21. "content-type" = "application/json"
  22. }
  23. #endregion
  24.  
  25. #region Logon
  26. Write-Host "Logging on..."
  27. $WebRequest = @{
  28.   Uri = "https://srs.local.lab/api/auth/login"
  29.   Method = "POST"
  30.   Headers = $Headers
  31.   Credential = $Credentials
  32. }
  33. $Logon = Invoke-WebRequest @WebRequest
  34. $Headers.Add('X-SRS-API-KEY', $Logon.Headers['X-SRS-API-KEY'])
  35. #endregion
  36.  
  37. #region Create Runspace
  38. Write-Host "Creating a new runspace..."
  39. $Body = @{
  40.   name = 'MyRunSpace'
  41.   run_vc_connection_script = $true
  42. }
  43. $WebRequest = @{
  44.   Uri = "https://srs.local.lab/api/runspaces"
  45.   Method = "POST"
  46.   Headers = $Headers
  47.   Credential = $Credentials
  48. }
  49. $WebRequest.Add('Body', ($Body | ConvertTo-Json))
  50. $RunSpace = Invoke-WebRequest @WebRequest
  51. $RunSpace = $RunSpace.Content | ConvertFrom-Json
  52. #endregion
  53.  
  54. #region Check runspace status
  55. Write-Host "Checking the runspace status..."
  56. while ($RunSpace.state -eq 'Creating') {
  57.   $WebRequest = @{
  58.     Uri = "https://srs.local.lab/api/runspaces/$($RunSpace.id)"
  59.     Method = 'GET'
  60.     Headers = $headers
  61.     Credential = $Credentials
  62.   }
  63.   $getRunSpace = Invoke-WebRequest @WebRequest
  64.   $RunSpace = $getRunSpace.Content | ConvertFrom-Json
  65. }
  66. Write-Host "New runspace is ready..."
  67. #endregion
  68.  
  69. #region Run script
  70. Write-Host "Running the script..."
  71. $Body = @{
  72.   runspace_id = $RunSpace.Id
  73.   name = "MyScript"
  74.   script = "Get-VM"
  75.   script_parameters = @()
  76. }
  77. $WebRequest = @{
  78.   Uri = "https://srs.local.lab/api/script-executions"
  79.   Method = "POST"
  80.   Headers = $Headers
  81.   Credential = $Credentials
  82. }
  83. $WebRequest.Add('Body', ($Body | ConvertTo-Json))
  84. $RunScript = Invoke-WebRequest @WebRequest
  85. $RunScript = $RunScript.Content | ConvertFrom-Json
  86. #endregion
  87.  
  88. #region Check script status
  89. Write-Host "Checking script status..."
  90. while ($RunScript.state -eq 'running') {
  91.   $WebRequest = @{
  92.     Uri = "https://srs.local.lab/api/script-executions/$($RunScript.id)"
  93.     Method = 'GET'
  94.     Headers = $Headers
  95.   }
  96.   $GetScript = Invoke-WebRequest @WebRequest
  97.   $RunScript = $GetScript.Content | ConvertFrom-Json
  98. }
  99. Write-Host "Script is ready..."
  100. #endregion
  101.  
  102. #region Retrieve Script output
  103. Write-Host "Retrieving script output..."`n
  104. $WebRequest = @{
  105.   Uri = "https://srs.local.lab/api/script-executions/$($RunScript.id)/Output"
  106.   Method = 'GET'
  107.   Headers = $Headers
  108. }
  109. $ScriptOutput = Invoke-WebRequest @WebRequest
  110. $ScriptOutput.Content | ConvertFrom-Json
  111. #endregion
  112.  
  113. #region Retrieve Script streams
  114. Write-Host `n"Retrieving script streams..."
  115. $Status = 'information','error','warning','debug','verbose'
  116. $Status | ForEach-Object -Process {
  117.   $WebRequest = @{
  118.     Uri = "https://srs.local.lab/api/script-executions/$($RunScript.id)/streams/$($_)"
  119.     Method = 'GET'
  120.     Headers = $headers
  121.   }
  122.   $Stream = Invoke-WebRequest @WebRequest
  123.   if ($Stream.Content -ne '[]') {
  124.     $out = ($Stream.Content | ConvertFrom-Json).message | Out-String
  125.     switch($_){
  126.       'information' {Write-Information -MessageData $out}
  127.       'error' {Write-Error -Message $out}
  128.       'warning' {Write-Warning -Message $out}
  129.       'debug' {Write-Debug -Message $out}
  130.       'verbose' {Write-Verbose -Message $out}
  131.     }
  132.   }
  133. }
  134. #endregion
  135.  
  136. #region Remove Runspace
  137. Write-Host "Removing runspace..."
  138. $WebRequest = @{
  139.   Uri = "https://srs.local.lab/api/runspaces/$($RunSpace.id)"
  140.   Method = "DELETE"
  141.   Headers = $Headers
  142.   Credential = $Credentials
  143. }
  144. $WebRequest.Add('Body', ($Body | ConvertTo-Json))
  145. $RunSpace = Invoke-WebRequest @WebRequest
  146. $RunSpace = $RunSpace.Content | ConvertFrom-Json
  147. #endregion
  148.  
  149. #region Logout
  150. Write-Host "Logging out..."
  151. $WebRequest = @{
  152.   Uri = "https://srs.local.lab/api/auth/logout"
  153.   Method = "POST"
  154.   Headers = $Headers
  155.   Credential = $Credentials
  156. }
  157. $Logout = Invoke-WebRequest @WebRequest
  158. #endregion
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement