powershell - Powershell 中的字符串构建问题

标签 powershell

我正在尝试参数化一个 powershell 脚本。唯一的问题是,出于某种原因,当我使用 $url 的 -uri 调用 invoke-restmethod 时,它似乎令人窒息。事实上,无论我在哪里尝试使用它,它都令人窒息。我相信我可能正在尝试错误地执行此操作。是否有更好或更直接的方法来完成此脚本的参数化。

 #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。路径“ApplicationName”,第 1 行,位置 31。(错误代码:c2d09f7a-f31a-4db1-a448-8214b6ab65ed) 在 C:\inetpub\wwwroot\WebIZ_Shane\CustomerSQLScripts\Powershell\20150522_Scheduled_Jobs_API_Calls.ps1:25 字符: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

最佳答案

您是否尝试过将 JSON 值和键一起包装在单个 qoutes 中?

例如 - 在构建 $jsonHeader 时在 $applicationname 和 $rooturl 周围放置单引号?

示例

$jsonHeaders = "{'UserId':$userId,'ApplicationName':'$applicationName','RootUrl':'$rootUrl','ApplicationInsightsGUID':'8773f299-9fed-4431-ab34-888888888888',',' DisableEmail':'true'}";

原因

我这么说是因为您的错误表明 Web 服务正在接收“w”而不是 ApplicationName 的另一个预期值。查看原始代码为 JSON header 生成的值,您可以清楚地看到/w 是字符串中第一个未加引号的字符(来自/webiznet_dev),很可能会破坏您的网络服务。
{{'UserId':,'ApplicationName':/webiznet_dev,'RootUrl': http://c3po:140/webiznet_dev ,'ApplicationInsightsGUID':'8773f299-9fed- 4431-ab34-888888888888','DisableEmail':'true'}, token

关于powershell - Powershell 中的字符串构建问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31566697/

相关文章:

powershell - 如何在do/while循环中正确使用函数?

c# - 比较 Powershell 中的对象数组

PowerShell/Azure VM - 将首选语言移至列表顶部

c# - 复制文件夹并保留权限

c# - 从代码运行 PS CMDLet 返回错误 : "not recognized"

powershell - 使用 powershell 设置文本格式并使用新行创建一个新文件

python - 如何通过 PowerShell 读取 python 中的文本文件? window 10

powershell - 如何处理复制项的错误

powershell - 是否可以通过Exchange PowerShell查询谁是activesync/bb用户?

powershell - 如何从 PowerShell 中的 SFTP 服务器删除早于 x 天的文件