我编写了一个脚本来帮助我删除Azure VM以及随之而来的所有内容(NIC,IP,磁盘等)。目前,该脚本运行良好,但由于VM可能需要4-5分钟才能删除,因此在删除多个VM时,我尝试更新脚本以并行运行。
脚本的参数如下所示,为了安全起见,ID和名称之类的内容被删除了。
[CmdletBinding()]
Param (
[Parameter(Mandatory=$false)]
[string]$SubscriptionId = '[an id]',
[Parameter(Mandatory=$true)]
[string]$ResourceGroupName,
[string]$VmName,
[ValidateScript({
if ($VmName -eq $null -or $VmName -eq '') {
throw "The -Force switch cannot be used without specifying -VmName."
}
else { $true }
})]
[switch]$Force,
[Parameter(Mandatory=$false)]
[string]$ScriptPath
)
我需要使用$ ScriptPath,因为在使用Start-Job调用脚本时不会填充$ PSScriptRoot。
我使用以下方法调用此脚本:
$jobArgs = @($SubscriptionId,$ResourceGroupName,$VmName,$true)
$newJob = Start-Job -FilePath ".\Remove-VmAndAssets2.ps1" -ArgumentList $jobArgs
我没有发送$ ScriptPath的原因是因为如果我这样做,它声称它无法找到要绑定的参数。这对我来说似乎很奇怪,所以我把它减少到四个参数,我脚本中的第一段代码是将参数转储到一个文件中(因为我无法在Job中看到实时输出)。在如上所述调用脚本后检出脚本所引用的参数,显示如下:
Subscription ID: [the right ID]
Resource Group Name: [the right name]
VM Name: [the right name]
Force: False
Script Path: True
它接受我的第四个参数$ true,并将其传递到第五个位置。无论我做什么,我都无法击中那些 - 强制切换。我已经尝试过" -Force:$ true"," Force"," -Force"," -Force $ true", " -Force = $真&#34 ;.我能想到的一切。我已尝试在" -SubscriptionId $ SubscriptionID"等中发送参数,但随后参数的值最终成为字符串。
我错过了什么?
编辑:更新了$ Force上的ValidateScript以反映我实际拥有的内容。