jenkins 如何执行XML格式ps脚本

wbrvyc0a  于 2022-11-02  发布在  Jenkins
关注(0)|答案(1)|浏览(188)

我有一个PS脚本需要通过XML执行/调用。
$sessions = Get-RDUserSession foreach($个会话中的$个会话){调用-...
运算式或陈述式中有未预期的词语基元'in'。位于第1行,字符:78 $sessions = Get-RDUserSession foreach($sessions中的$session){叫用-...
表达式中缺少右括号“)”。位于第1行,字符:109

配置文件xml

<Action name="KillAllUsers" Type="Powershell" Executor='$sessions = Get-RDUserSession
foreach ( $session in $sessions ) 
{ Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionId -Force }'></Action>
vs91vp4v

vs91vp4v1#

Literal[1]当XML文本被解析为DOM (Document Object Model)时,XML * 文本的XML * 属性 * 中的换行符(换行符)似乎 * 没有 * 被保留;它们被替换为 * 空格

因此,无论您在Executor属性中放入什么代码,最后都是 * 单行 *,这就是为什么您必须使用;(PowerShell的语句分隔符)来分隔语句;请注意Get-RDUserSession后面的;,并注意此处的换行符纯粹是为了可读性:

<Action name="KillAllUsers" Type="Powershell" Executor='
$sessions = Get-RDUserSession;
foreach ( $session in $sessions ) { 
  Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionId -Force
}
'></Action>

至于您看到的错误:
由于您的代码全部放在一行中,没有使用语句分隔符,因此foreach语句在语法上变成了Get-RDUserSession命令的 * 参数 *,从而导致了语法错误;引发错误的简单方法是:


# -> ERROR: "Unexpected token 'in' in expression or statement."

Get-Date foreach ($i in 1..2) { $i }

[1]相比之下,*转义 * 换行符&#xA;用于仅LF换行符,&#xD;&#xA;用于CRLF换行符)**被 * 保留:它们在内存 *(DOM中)中被转换为 * 文本 * 换行符 *,并在序列化期间重新转换为它们的 * 转义 * 形式,即,当将内存中的DOM转换为 * 字符串 * 或将其保存到 * 文件 * 时。

相关问题