在 MDT 2013 中将参数传递给 PowerShell 脚本
Passing Parameters to a PowerShell Script in MDT 2013
我有一个将数组作为输入参数的 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 以意外的方式处理引号。
@("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"
我有一个将数组作为输入参数的 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 以意外的方式处理引号。
@("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"