考虑这个陈述:
Get-Content .\zipper.ps1 | Invoke-Expression
这是Technet中记录的变体。
Invoke-Expression (Get-Content '.\zipper.ps1' -Raw)
两个语句都运行得很好,尽管第二个语句的执行速度要快得多。 假设zipper.ps1是一个包含多行可执行Powershell代码的脚本。
上述语句是否会将zipper.ps1中的每一行作为单独的命令执行?
或者,整个脚本是否会作为一个大的连接字符串执行?
我的问题与powershell语句的字符限制有关 - 如果每个代码行都在powershell字符限制范围内,但整个脚本超出字符限制,上述命令是否会超出字符限制?
PowerShell可能有260个字符的限制(不确定)。这些页面提到了Powershell中的字符限制:
https://support.microsoft.com/en-us/kb/830473
详细信息:
Technet声明:
" Get-Content cmdlet获取路径指定位置处项目的内容,例如文件中的文本。"
和
" Invoke-Expression cmdlet将指定的字符串作为命令进行计算或运行,并返回表达式或命令的结果。"
到目前为止一直很好 - 这清楚地解释了我的陈述如何以及为什么起作用。但它并没有告诉我这些语句是作为单独的语句执行,还是作为一个大的连接字符串执行。第二种变化运行得更快的事实可能是一个线索。
也许我需要添加For..Each
。
technet doc说Get-Content返回一个集合,而this Technet article表示它返回一个数组。这个相互矛盾的信息,但不确定数组与收集问题在这里是我的问题。
THX