我有一个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换行符为

,CRLF换行符则为

(被保留:它们在内存(在DOM中(中被转换为文字的换行符,并在序列化过程中重新转换为转义的形式,即当将内存中的DOM转换为字符串或将其保存到文件时