当我在这个代码段上运行backtick(`)命令时:
Get-WmiObject win32_service | Where-Object { $_.pathname -notlike "C:\windows\*" -and $_.startmode -eq "auto" -and $_.startname -eq "localsystem"} | Select-Object displayname, `
pathname, startmode, startname | Format-List | Out-Host
我犯了一些错误。这些错误是什么?
首先,在第一行按F8键,我得到:
不完整的字符串标记。CategoryInfo:ParserError:(:)[],ParentContainerErrorRecordException FullyQualifiedErrorId:UncompleteString
目标:运行代码段并假设PC将自动跳转到下一行,因为它具有字符。
其次,当我只突出显示第一行时,通过单击行号左侧,我现在得到:
在行: 1字符: 170
~ Missing expression after ',' > in pipeline element.
目标:运行代码段并假设PC将自动跳转到下一行,因为它具有字符。
然而,当我按下F5时,它就像一个魅力。请原谅我对PowerShell的无知,但是我在这里做错了什么?
其他信息:这是我的powershell信息:
后续@Santiagos链接评论:
这被称为声明终止。使用Powershell时,有两个语句终止符字符。
- 新线(有时)
换行符的规则只是有时由于一些用户使用命令的性质。基本上意味着,如果前面的文本在语法上是一个完整的语句,新行被认为是语句终止。因此,如果它不完整,换行符将被视为空白。
快速示例:
PS C:\Users\Abraham> 3 +
>> 4
7
当我添加
运算符时,它期待另一个参数,这就是为什么它没有出错。
在您的情况下,我将假设错误来自powershells Tokenizer(词法分析器),在通过您的命令进行解析时,它会将您的反勾号作为逗号的转义字符读取(假设它是完整的——因此是语句终止符——将下一行作为换行符而不是空格读取);在我看来(如果我错了,有人会纠正我),我认为这是一个错误的错误。
Backtik(`)也称为转义字符,可以扩展不可扩展的行。如果行中的最后一个字符是反勾号,则换行符将被视为空白,而不是“换行符”。
因此,你不需要那个反勾号,因为你的逗号(
,
)告诉powershell后面还有更多的内容,我们将其引用到第2段,因为它在语法上不完整。
总而言之:这是powershells端的一个错误(:
PS——很抱歉这篇长帖子,因为第一部分并不是回答你问题的必要部分;只是一些信息,可以帮助你理解它是如何结合在一起的。
编辑:
没有看到
F8
是这里的罪魁祸首,哈哈,感谢@briantist指出了这一点。错误不在PowerShell端。无视这篇文章(:
您的错误来自PowerShell ISE的功能。
首先,您尝试在第一行使用F8,即“运行选择”,而不进行选择。这将隐式选择第一行的所有字符,然后尝试运行它。
执行此操作时,会出现不完整的字符串标记错误,这是因为解析器遇到了单独的backtick`
(转义字符),后面没有任何字符。这是因为行尾的换行符(backtick通常是转义的)(这就是它作为行延续字符的工作方式)丢失了,因为单行选择没有包含它。
第二,当我只突出显示第一行时,单击行号左侧
现在,在本例中,您将注意到您的选择已将光标放置在下一行的开头。这意味着这个选择包含了换行符,所以你现在有了一个完整的字符串标记。
你的错误是,你现在用逗号结束了你的命令,好像你要传递更多的参数,然后什么都没有出现(剩下的参数没有包含在你的选择中)。
问题的根源是ISE中处理运行选择的命令正是这样做的,所以如果您希望它们包含下一行的内容,您也必须将它们包含在选择中。
顺便说一句,我可能会建议您寻找让您自然使用换行符的代码元素,例如管道|
字符、运算符和脚本块大括号{}
。
Get-WmiObject win32_service |
Where-Object {
$_.pathname -notlike "C:\windows\*" -and
$_.startmode -eq "auto" -and
$_.startname -eq "localsystem"
} |
Select-Object displayname, pathname, startmode, startname |
Format-List |
Out-Host
这并不能解决你的选择问题,但在我看来,阅读这本书更好,而且不需要尴尬的背景。
此问题是由拼写错误或无法再复制的问题引起的。虽然类似的问题可能与此相关,但这个问题的解决方式不太可能帮助未来的读者。 我正在尝试向这样的代码字符串添加一些代码
内建函数 eval 允许执行一个代码字符串。 语法如下: let result = eval(code); 例如: let code = 'alert("Hello")'; eval(code); // Hello 代码字符串可能会比较长,包含换行符、函数声明和变量等。 eval 的结果是最后一条语句的结果。 例如: let value = eval('1+1'); alert(value); /
我有一个方法,它迭代一个映射,对值执行一个操作,并填充一个要返回的映射。 我的问题是,我如何将其转换为Java8(执行不循环的操作)? 代码:
因此,下面的代码,从txt文件中取序列号作为参数,在我的计算机上正常工作。每个数字都写在一行上。下面是代码: 但它在CodeEval中不起作用。站点编译器是这么说的: Fontconfig错误:无法加载默认配置文件线程“main”java.awt.HeadLessException:未设置X11显示变量,但此程序执行了需要它的操作。在java.awt.GraphicsEnvironment.Che
问题内容: 我已经测试了elasticsearch突出显示字段功能,并且工作正常。我使用了 elasticsearch2.4.4 和 spring-data- elasticsearch-2.0.0.RELEASE 我最近将 elasticsearch 升级到 5.5.0 和 spring-data-elasticsearch-3.0.0.M4 当我测试相同的代码时,突出显示不会发生 下面是示例代
问题内容: 我一直在试图弄清楚为什么我按下按钮时布尔值没有改变,而当我手动改变它时却起作用了,但是它什么也没做。我试图按照教程学习这个词,但是它们不起作用。有人可以指出我要去哪里了吗? 感谢您的所有帮助,当我尝试建议的代码但没有成功时,我返回并更改了菜单。以前,我使用onClick制作了一个按钮来创建菜单,当使用代码创建图标时,我之前编写的代码可以正常工作。希望这对我以外的人有帮助,所以我不会觉得