PowerShell 错误 - 计划任务 - 预期表达式

Posted

技术标签:

【中文标题】PowerShell 错误 - 计划任务 - 预期表达式【英文标题】:PowerShell Error - Scheduled Task - expression expected 【发布时间】:2021-10-15 22:19:18 【问题描述】:

我正在设置计划任务以注销断开的会话。我使用下面显示的参数打开 PowerShell.exe 来设置任务

powershell.exe -ExecutionPolicy Bypass -NoProfile -command "Invoke-command -ScriptBlock quser | Select-String "Disc" | ForEach logoff ($_.tostring() -split " +")[2]"

该参数在 PowerShell 中单独起作用,但是当我尝试创建此任务时,它失败并出现错误:

powershell.exe : At line:1 char:89
At line:2 char:1
+ powershell.exe -ExecutionPolicy Bypass -NoProfile -command "Invoke-co ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (At line:1 char:89:String) [], RemoteException

    + FullyQualifiedErrorId : NativeCommandError
+ ...  quser | Select-String  Disc | ForEach logoff (((.tostring() -split ...
+                                                                  ~
An expression was expected after '('.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedExpression

我相信我需要对表达式进行评估以正确填充字符串,并尝试转义引号和括号以使其正常工作。任何帮助将不胜感激。

【问题讨论】:

在我看来, ($_.tostring() -split ' +')[2] 没有被理解为来自 quser 的管道对象的表达式。还在做一些测试。 powershell.exe -command "(quser | select-string 'Disc').count" 返回对象的计数,但 powershell.exe -command "quser | select-string 'Disc' | foreach- object $_ 不返回任何对象。我很困惑 【参考方案1】:

您的问题可能是引号。请注意,您必须正确引用和转义您的命令行参数。为简单起见,您可以在命令中使用单引号,或者在不需要时一起跳过它们。此外,Invoke-Command 是多余的。

试试这个:

powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "quser | Select-String Disc | foreach logoff ($_.Line -split ' +')[2]"

【讨论】:

如果我尝试运行“quser | Select-String 'Disc' | ForEach logoff ($_.tostring() -split ' +')[2]”它会工作并显示断开连接会议。当我运行 powershell.exe -ExecutionPolicy Bypass -NoProfile -command "quser | Select-String 'Disc' | ForEach logoff ($_.tostring() -split ' +')[2]" 你建议我仍然得到同样的错误“在'('之后需要一个表达式” 感谢您对调用命令的帮助。对我来说应该更明显的是它是多余的。 通过转义变量并使用下面的脚本块代码解决了这个问题。抱歉格式化:Powershell.exe –executionpolicy bypass –noprofile –command “Invoke-command –scriptblock $ints = (quser | select-string ‘Disc’).linenumber $ints | foreach-object &logoff `$_ ”

以上是关于PowerShell 错误 - 计划任务 - 预期表达式的主要内容,如果未能解决你的问题,请参考以下文章

尝试创建计划任务时出现Powershell错误?无法处理参数“参数”的参数转换

Powershell脚本安排每日任务错误

使用Powershell管理Windows计划任务

禁用多个计划任务 - PowerShell

PowerShell 脚本不会作为 Windows 计划任务执行

powershell 用于运行powershell脚本的计划任务条目