我有一个PowerShell脚本,它将数组作为输入参数:
Param(
Parameter(Mandatory=$true)]
[System.String[]] $Adapters
)
Write-Output "Disabling network adapter(s)."
foreach ($adapter in $Adapters) {
Disable-NetAdapterBinding -Name $adapter -ComponentID ms_tcpip6
Write-Host $adapter
}
从MDT 2013任务序列调用函数时出现以下错误:
+ ..."E:\Deploy\Scripts\Disable-IPV6.ps1" -Adapters @(Teamed_NIC1, Teamed_... Missing argument in parameter list.
这就是我对MDT 2013中的功能的看法:
我怀疑MDT是以意想不到的方式处理引号。
答案 0 :(得分:1)
@("Teamed_NIC1","Teamed_NIC2")
是一个PowerShell数组。该构造仅在 PowerShell中被识别,而不是从您调用PowerShell脚本的环境中识别。如果您删除@()
。
从PowerShell外部调用PowerShell脚本时,无法将数组值传递给参数。一个常见的解决方法是将参数作为分隔字符串传递并拆分:
Param(
Parameter(Mandatory=$true)]
[String]$Adapters
)
$AdapterList = $Adapters -split ','
foreach ($adapter in $AdapterList) {
...
}
这样的调用:
%SCRIPTROOT%\Disable-IPV6.ps1 "Teamed_NIC1,Teamed_NIC2"
或者您可以删除参数定义并使用automatic variable $args
:
if (-not $args) { throw 'Missing argument.' }
foreach ($adapter in $args) {
...
}
这样的调用:
%SCRIPTROOT%\Disable-IPV6.ps1 "Teamed_NIC1" "Teamed_NIC2"