考虑这个说法:
Get-Content .\zipper.ps1 | Invoke-Expression
以下是Technet中logging的一个变体。
Invoke-Expression (Get-Content '.\zipper.ps1' -Raw)
这两个陈述工作得很好,虽然第二个执行得更快。 假设zipper.ps1是一个包含多行可执行Powershell代码的脚本。
上述语句是否将zipper.ps1中的每一行作为单独的命令执行?
或者,将整个脚本作为一个大的连接string来执行?
我的问题涉及到powershell语句的字符限制 – 如果每个代码行都在powershell字符限制内,但是整个脚本超过了字符限制,上述命令是否会超出字符限制?
PowerShell可能有260个字符的限制(不确定)。 这些页面在Powershell中提到了字符限制:
https://support.microsoft.com/en-us/kb/830473
https://social.technet.microsoft.com/Forums/windowsserver/en-US/f895d766-5ffb-483f-97bc-19ac446da9f8/powershell-command-size-limit?forum=winserverpowershell
细节:
Technet指出:
“ Get-Content cmdlet获取path指定位置的项目内容,例如文件中的文本。
和
“ Invoke-Expression cmdlet将评估或运行指定的string作为命令,并返回expression式或命令的结果。
到目前为止这么好 – 这非常清楚地解释了我的声明是如何以及为什么如此。 但它不会告诉我这些语句是作为单独的语句执行还是作为一个大的连接string来执行的。 第二个变化跑得快的事实可能是一个线索。
也许我需要添加一个For..Each
。
technet文档说Get-Content返回一个集合,而这个Technet文章说它返回一个数组。 这是冲突的信息,但不知道arraysVS收集事项我的问题在这里。
谢谢