如何在强制转换为[void]的PowerShell命令中使用行续行?
解决[void]与PowerShell命令拆分的兼容问题
嘿,这个问题我之前折腾过!核心原因是PowerShell对`换行符和[void]语法的解析规则不一样,咱们把关键点理清楚:
问题根源
[void]是PowerShell的类型加速器,作用是抑制命令的输出,但它的语法要求非常严格:必须紧跟括号包裹的完整表达式,不能在[void]和(之间用`符号换行拆分。
你不带[void]时能正常拆分,是因为此时New-VM本身就是一个独立的命令,符号只是告诉PowerShell“命令还没写完,下一行继续”;但加了[void]后,PowerShell会把[void]当成单独的命令,后面换行的(`就成了语法错误。
正确的拆分方式
推荐两种写法,都能完美解决问题:
写法一:[void]与(紧密相连,括号内拆分参数
[void](New-VM -Name $serveur ` -Template $template ` -vmhost $vmhost ` -datastore $datastore.name ` -description $description ` -errorvariable erreur ` -erroraction silentlycontinue)
这里要确保[void]和(之间没有用换行(空格没问题),括号内的参数用拆分完全正常。
写法二:括号内换行(无需`符号,更简洁)
其实PowerShell在括号内部会自动识别参数换行,完全可以去掉`符号,写法更干净:
[void]( New-VM -Name $serveur -Template $template -vmhost $vmhost -datastore $datastore.name -description $description -errorvariable erreur -erroraction silentlycontinue )
这种方式可读性更强,也避免了`符号可能带来的语法问题。
避坑提醒
千万别犯这个错:在[void]和(之间加`换行,比如:
# ❌ 错误写法,会触发语法错误 [void]` (New-VM -Name $serveur ` -Template $template)
PowerShell会把[void]当成单独的命令执行,后面的(就成了无效语法。
内容的提问来源于stack exchange,提问作者chris
相关产品推荐
相关产品推荐

