# Select Template and add ID for easy selection
$templates = Get-Folder Templates01 |
             Get-Template |
             Select name |
             % {$counter = -1} {
               $counter++;
               $_ | Add-Member -Name Template_ID -Value $counter -MemberType NoteProperty -PassThru
             }

$templates | ft -Auto
$MyTemplate = Read-Host "select VM Template_ID"
$VMTemplate = $templates[$MyTemplate]

$VMNAME = Read-Host "Specify VM Name"

New-Vm -Name $VMNAME -Template $vmtemplate.Name

上面的脚本效果很好。我现在想使用Start-Job在后台运行它,所以我将其修改为:
# Select Template and add ID for easy selection
$templates = Get-Folder Templates01 |
             Get-Template |
             Select name |
             % {$counter = -1} {
               $counter++;
               $_ | Add-Member -Name Template_ID -Value $counter -MemberType NoteProperty -PassThru
             }

$templates | ft -Auto
$MyTemplate = Read-Host "select VM Template_ID"
$VMTemplate = $templates[$MyTemplate]

$VMNAME = Read-Host "Specify VM Name"

$scriptblock = {
  Param( $1, $2 )
  New-Vm -Name $1 -Template $2
}

Start-Job -ScriptBlock $scriptblock -ArgumentList $vmname $vmtemplate.Name

我得到这个错误:

开始作业:无法绑定(bind)参数“InitializationScript”。不能
将类型为“System.String”的“template01”值转换为类型
“System.Management.Automation.ScriptBlock”。
在线:1个字符:59个
+ ...-作业-ScriptBlock $ scriptblock -ArgumentList $ vmname $ vmtemplate.Name
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo:InvalidArgument:(:) [开始作业],ParameterBindingException
+ FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.StartJobCommand

我该如何解决?

最佳答案

检查一下,我知道您需要一点更改代码:)

Start-Job -ScriptBlock {Get-ChildItem  $args[0],$args[1] } -ArgumentList $a,$b

关于powershell - 如何将变量传递给Start-Job?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41764926/

10-09 20:51