gpt4 book ai didi

c# - PowerShell 脚本错误 "Unexpected token ' h' 在表达式或语句中。字符串缺少终止符 :"

转载 作者:行者123 更新时间:2023-11-30 22:57:59 28 4
gpt4 key购买 nike

我的控制台应用程序中有以下代码,用于使用 PowerShell 获取服务器信息:

string PsCmd = "add-pssnapin VMware.VimAutomation.Core; $vCenterServer = '" + vCenterName.Trim() + "';$vCenterAdmin = '" + vCenterUsername.Trim() + "' ;$vCenterPassword = '" + vCenterPassword + "';" + System.Environment.NewLine;

PsCmd = PsCmd + "$VIServer = Connect-VIServer -Server $vCenterServer -User $vCenterAdmin -Password $vCenterPassword;" + System.Environment.NewLine;

PsCmd = PsCmd + "Get-VMHost " + System.Environment.NewLine;

现在脚本在我们拥有的 150 台服务器上运行良好,但在一台服务器上我遇到了这个异常:

At line:1 char:131 + ... !*******(********6'*;*****'; + ~ Unexpected token 'h' in expression or statement. At line:1 char:135 + ... **(******';'; + ~~ The string is missing the terminator: '. | ABC

这会在密码变量上引发错误。在我的例子中,我从外部 RESP API 获取密码。现在密码具有以下格式:

\"************

它以 2 个保留字符 \" 开头,我得到的 JSON 对象将如下所示 {"PASSWORD":"\"*******".. 那么问题可能是密码包含保留字符集 \" 吗?我该如何解决这个问题?

最佳答案

Now the password have this format:

\"*******

Where it starts with 2 reserved characters \"

如果您的密码确实来自 JSON,例如 {"PASSWORD":"\"*******"}您的密码不是\" 开头 - 它们以 " 开头,因为 \ 只是一个 JSON 转义字符 需要在 char 中嵌入文字 "。在(始终用双引号引起来的)JSON 字符串值中。

换句话说:如果您正确解析 JSON,则实际密码值将是:

"*******

您可以按如下方式验证:

PS> ('{ "PASSWORD": "\"*******" }' | ConvertFrom-Json).PASSWORD
"*******

您的下一个问题是您将密码嵌入到表示PowerShell 源代码 的字符串中,并且在该字符串中您正在使用(嵌入) 单引号 ('...') 将值[1] 括起来。
为此,您必须将值嵌入的 ' 实例转义为 '',以免 PowerShell 稍后解析时导致语法错误代码:

// Note the .Replace() calls
string PsCmd = "add-pssnapin VMware.VimAutomation.Core; $vCenterServer = '" +
vCenterName.Trim().Replace("'", "''") + "';$vCenterAdmin = '" +
vCenterUsername.Trim().Replace("'", "''") +
"' ;$vCenterPassword = '" + vCenterPassword.Replace("'", "''") + "';" +
System.Environment.NewLine;

使用 "***'*** 的文字密码值(以及中心和用户名的示例值),C# 变量 PSCmd 将收到一个字符串以下文字内容:

add-pssnapin VMware.VimAutomation.Core; $vCenterServer = 'center1';$vCenterAdmin = 'jdoe' ;$vCenterPassword = '"***''***';

[1] 单引号正确的选择,因为使用双引号可能会导致 PowerShell 对嵌入值进行不需要的解释(字符串插值)。

关于c# - PowerShell 脚本错误 "Unexpected token ' h' 在表达式或语句中。字符串缺少终止符 :",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53264505/

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