gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:23:36 26 4
gpt4 key购买 nike

我正在尝试参数化一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com