如何在XML中执行ps脚本



我有一个PS脚本,需要通过XML执行/调用。获得类似的错误

$sessions=获取RDUserSession foreach($sessions中的$session({调用-…

表达式或语句中出现意外的标记"in"。第1行字符:78$sessions=获取RDUserSession foreach($sessions中的$session({Invoke-…
表达式中缺少关闭"("。行:1字符:109

config.xml

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

[1]当XML文本被解析为DOM(文档对象模型(时,XMLtext 的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]相比之下,转义的换行符(仅LF换行符为&#xA;,CRLF换行符则为&#xD;&#xA;(被保留:它们在内存(在DOM中(中被转换为文字的换行符,并在序列化过程中重新转换为转义的形式,即当将内存中的DOM转换为字符串或将其保存到文件

最新更新