2015-07-22 3 views
3

Я пытаюсь параметризовать сценарий powershell. Единственная проблема заключается в том, что по какой-то причине, когда я вызываю метод invoke-restmode с -uri $ url, он, кажется, задыхается. На самом деле везде я пытаюсь использовать это, это задыхается. Я считаю, что, возможно, я попытаюсь сделать это неправильно. Есть ли лучший или более прямой способ выполнить параметризацию этого скрипта.String Building Issue in Powershell

#Variables that will probably need to change depeneding on environment 
$server = "c3po:140" 
$applicationName = "/webiznet_dev" 
$applicationPath = "webiz_serviceapi" 
$protocol = "http:" 

#Variables that probably won't need to change 
$userName = "PowerShellUser" 
$auth = "token " 
$rootUrl = '{0}//{1}{2}' -f $protocol, $server, $applicationName 
$userId = 0 

#Decrypting PWord 
#Might need to change $PSScriptRoot to where you have the txt file 
$securePassword = Get-Content "$PSScriptRoot\password.txt" | ConvertTo-SecureString 
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePassword) 
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) 
$login = @{"Username"=$userName; "Password"=$password; } 

#Login and Get Token 
$fullApplicationPath = "{0}//{1}/{2}" -f $protocol, $server, $applicationPath 
$url = "{0}/job/login" -f $fullApplicationPath 
$jsonHeaders = "{'UserId':$userId,'ApplicationName':$applicationName,'RootUrl':$rootUrl,'ApplicationInsightsGUID':'8773f299-9fed-4431-ab34-888888888888','DisableEmail':'true'}"; 
$HeaderWrap = @{"Authorization"=$auth}; 
$HeaderWrap.Add("x-webiz-app-info",$jsonHeaders); 
$token = Invoke-RestMethod -Uri $url -Method Post -Body $login -Headers $HeaderWrap; 


#Write out url which works fine 
Write-Host $url 

#Load values for api calls as the token is now populated so the appInfo can get properly populated 
$encryptedString = $token.EncryptedString 
$userId = $token.UserId 
$auth = "token $encryptedString" 
$jsonHeaders = "{'UserId':$userId,'ApplicationName':$applicationName,'RootUrl':$rootUrl,'ApplicationInsightsGUID':'8773f299-9fed-4431-ab34-888888888888','DisableEmail':'true'}"; 
$HeaderWrap = @{"Authorization"=$auth}; 
$HeaderWrap.Add("x-webiz-app-info",$jsonHeaders); 

#Scripts to call scheduled notification jobs in 
$url = '{0}/Job/RunNotificationReminders' -f $fullApplicationPath 
Invoke-RestMethod $url -Method Post -Headers $HeaderWrap 
$url = '{0}/Job/RunAddressChanges' -f $fullApplicationPath 
Invoke-RestMethod $url -Method Post -Headers $HeaderWrap; 
$url = '{0}/Job/RunStorageUnitTemperatureReadingDueAlerts' -f $fullApplicationPath 
Invoke-RestMethod $url -Method Post -Headers $HeaderWrap; 
$url = '{0}/Job/RunThermometerCalibrationDueAlerts' -f $fullApplicationPath 
Invoke-RestMethod $url -Method Post -Headers $HeaderWrap; 

Одна из ошибок получили

Invoke-RestMethod: Ошибка синтаксического анализа комментариев. Ожидаемое: *, получено w. Path 'ApplicationName', строка 1, позиция 31. (код ошибки: c2d09f7a-f31a-4db1-a448-8214b6ab65ed) В C: \ inetpub \ wwwroot \ WebIZ_Shane \ CustomerSQLScripts \ Powershell \ 20150522_Scheduled_Jobs_API_Calls.ps1: 25 char: 10 + $ token = Invoke-RestMethod -Uri $ url -Method Post -Body $ login -Headers $ HeaderW ... + ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest: HttpWebRequest) [Invoke-RestMethod], WebException + FullyQualifiedErrorId: WebCmdletWebResponseException, Microsoft.PowerShell.Commands.InvokeRestMethodCommand

+0

Возможно, методы REST слишком длинные для выполнения, поэтому ваш клиент Powershell ждет возврата REST API. – Vesper

+0

@Vesper Ошибка, с которой я получаю звуки, больше похоже на то, что мне не нравится то, что я положил в uri. – DeadlyChambers

+0

Отлаживаем скрипт и прерываем его. Дамп параметра '$ url' и посмотрите, что такое строка * на самом деле *. –

ответ

1

вы пробовали оборачивать свои значения JSON в отдельных qoutes, а также ключи?

Например, размещение одиночных кавычек вокруг $ applicationname и $ rooturl при создании $ jsonHeader?

Пример

$ jsonHeaders = «{ 'UserId': $ USERID, 'Имя_приложения': '$ ApplicationName', 'RootUrl': '$ rootUrl', 'ApplicationInsightsGUID': '8773f299-9fed- 4431-ab34-888888888888' , 'DisableEmail': 'правда'} ";

Причина

Я говорю, потому что ваша ошибка указывает на веб-службы получает «ш» вместо другого ожидаемого значения для ApplicationName. Который смотрит на значения, которые ваш исходный код генерирует для заголовка JSON, вы можете ясно видеть, что/w является первым символом без кавычек в строке (из/webiznet_dev) и, скорее всего, нарушает ваш веб-сервис.
{{ 'UserId' :, 'Имя_приложения':/webiznet_dev, 'RootUrl': http://c3po:140/webiznet_dev, 'ApplicationInsightsGUID': '8773f299-9fed- 4431-ab34-888888888888', 'DisableEmail': 'истинный'}, token}