2017-11-09 1 views
0

Wir haben eine Funktion, die das Zurücksetzen auf eine Anwendung ermöglicht, die beim Aufruf aufgerufen wird. Dies funktioniert perfekt, wenn auf einem Client PowerShell v3.0 oder höher ausgeführt wird. Wir haben jedoch einen hybriden Status und es gibt keine Möglichkeit, PowerShell jetzt zu aktualisieren. Ich habe gesehen, dass Sie .NET verwenden können, um XML auf die gleiche Weise zu posten, aber ich kann das nicht zum Laufen bringen. HierAnfrage über API über PowerShell nicht posten

ist die Version, die funktioniert:

function SetTaskRealTimeStatus() 
{ 
    param($pRealTimeStatusId, $pResourceGuid, $pNewStatus) 

    $url = 'http://server001/myappname/api/resource/'; 
    $url = $url + $pResourceGuid + '/task/' + $realTimeStatusId + '/status/'+ $pNewStatus; 

    Write-Host ("Sending request: $url") ; 

    # Returns Guid of task history record that is created. Empty guid means db call failed 
    # Invalid inputs will return BadRequest response 
    Invoke-RestMethod -Uri $URL -Method Post 
} 

Hier ist meine Version, die nicht funktioniert:

function SetTaskRealTimeStatus() 
{ 
    param($pRealTimeStatusId, $pResourceGuid, $pNewStatus) 

    $url = 'http://server001/myappname/api/resource/'; 
    $urlCombined = $url + $pResourceGuid + '/task/' + $pRealTimeStatusId + '/status/'+ $pNewStatus; 

    Write-Host ("Sending request: $urlCombined") ; 

    # Returns Guid of task history record that is created. Empty guid means db call failed 
    # Invalid inputs will return BadRequest response 

    #Used for PowerShell version 2.0 
    $WebRequest = [System.Net.WebRequest]::Create("$urlCombined") 
    $WebRequest.Method = "POST" 
    $WebRequest.ContentType = "application/xml" 
    $WebRequest.UseDefaultCredentials = $true 
    $Response = $WebRequest.GetResponse() 
    $ResponseStream = $Response.GetResponseStream() 
    $ReadStream = New-Object System.IO.StreamReader $ResponseStream 
    $Data=$ReadStream.ReadToEnd() 
    $Request.Timeout = 10000; 

    #Invoke-RestMethod -Uri $urlCombined -Method Post 
} 

Die Parameter Vergangenheit in der Funktion gut funktionieren, wie sie mit der ersten Version arbeiten .

+0

Jede Fehlermeldung? Was ist der Inhalt der Parameter, wenn sie an die Funktion gesendet werden? – Manu

+0

Keine Fehlermeldungen, kein Update in der Web App. \t # Get benutzerdefiniertes Computer-ID-Token (SELECT% COMPUTERID%), übergeben von Altiris, die das Skript hosten \t $ resourceGuid = "% COMPUTERID%"; \t # Get RealTimeStatus Id. Dies wird über die Anwendung \t in das Skript übergeben. $ RealTimeStatusId = "%! _ APPPARAM_REALTIMESTATUSID!%"; \t $ currentStatus = "Arbeiten mit Powershell-Skript" Ich habe sie in eine Textdatei geoutet. In diesem Fall wurden sie auf: d02fbf0e-588e-4ef0-Afea-cea28d4ebdda a99c99b1-3bc5-e711-80ce-005056bb137a Gestartet PS1 Es zeigt ein PS-Fenster, sieht aus wie das Skript funktioniert gut, aber nicht aktualisiert, über API –

+0

Sorry, ich sollte hinzufügen, die Powershell-Prompt bleibt offen und wird nicht korrekt beendet, so dass es auf einen offenen Stream warten kann, nicht sicher. –

Antwort

0

ich es geschafft, die Funktion arbeitet je nach Bedarf zu erhalten:

function SetTaskRealTimeStatus() 
{ 

    param($setID, $pResourceGuid, $pNewStatus) 


    $url = 'http://server001/myapplication/api/resource/'; 
    $urlCombined = $url + $pResourceGuid + '/task/' + $setID + '/status/' + $pNewStatus; 

    Write-Host ("Sending request: $urlCombined") ; 

    # Returns Guid of task history record that is created. Empty guid means db call failed 
    # Invalid inputs will return BadRequest response 

    #Used for PowerShell version 2.0 

    $WebRequest = [System.Net.WebRequest]::Create("$urlCombined") 
    $body = "$pNewStatus" 
    $encodedContent = [System.Text.Encoding]::UTF8.GetBytes($body) 
    $WebRequest.Method = "POST" 
    $WebRequest.ContentType = "application/xml" 
    $WebRequest.UseDefaultCredentials = $true 
    $requestStream = $webRequest.GetRequestStream() 
    $requestStream.Write($encodedContent, 0, $encodedContent.length) 
    [System.Net.WebResponse] $response = $webRequest.GetResponse(); 
    $response.close() 
    $requestStream.Close() 


    #used for PowerShell Version 3.0 and above 
    #Invoke-RestMethod -Uri $urlCombined -Method Post 
}