如何将多个网络作业作为参数传递给 PowerShell 脚本

How to pass multiple webjobs as a parameter to the PowerShell script

提供以下脚本以启动 azure.But 中的 Webjobs 我将 Json 文件包含到 Powershell 脚本中,运行 宁 Webjobs.Its 适用于只有一个 environment.But 我希望同一个脚本用于具有不同 Webjob 的多个环境 names.So 如何修改此脚本以便我可以在发布定义时停止和启动 VSTS 中的 Webjobs,目前,我有 4 个用于 Dev 环境的 Web 作业,我有 8 个用于 Int 环境的 Web 作业,具有不同的 azure subscriptions.So 我如何使用下面的脚本来处理不同的 environments.Kindly 帮助我 this.I 不能使用下面的所有环境的脚本,因为我正在导入唯一的 json file.So 它只会接受特定的 json parameters.But 在我的情况下 json 参数将是不同的 environments.So 如何将不同的 json 文件内容导入到下面的脚本中?是否有可能包含多个 json 文件和脚本只能接受特定的 Json 脚本基于我在 VSTS 中的发布定义 运行 的环境并且可以 运行因此。

Parameter.json:

{
    "userName": "user1",
    "password": "password1",
    "webAppName": "webapp1",
    "resourceGroup": "resourceGroup1",
    "webJobs": [   
      {
        "name": "abc",
        "typeName": "continuous"
      },
      {
        "name": "def",
        "typeName": "continuou‌s"
      }
    ]
  }

脚本:

[object]$paramObj=Get-Content "PowerShellModuleProject1\parameter2.json"|ConvertFrom-Json 
        $userName =$paramObj.userName
        $password =$paramObj.password
        $webAppName =$paramObj.webAppName
        $resourceGroup=$paramObj.resourceGroup
        [object[]]$webJobs=$paramObj.webJobs
        foreach($wj in $webjobs){
         if($wj.typeName -eq "continuous")
         {
    Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName "$webAppName/$($wj.name)" -Action start -ApiVersion 2015-08-01 -Force
          Write-Host "continuous"
         Write-Host $wj.name
         }
         else{
         Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/TriggeredWebJobs -ResourceName "$webAppName/$($wj.name)" -Action run -ApiVersion 2015-08-01 -force
         Write-Host "triggered"
         Write-Host $wj.name
         }
         }

您可以像这样更新 Parameter.json 文件 (parameter2.json):

{
  "Dev": {
    "userName": "user1",
    "password": "password1",
    "webAppName": "webapp1",
    "resourceGroup": "resourceGroup1",
    "webJobs": [
      {
        "name": "abcDev",
        "typeName": "continuous"
      },
      {
        "name": "defDev",
        "typeName": "continuous"
      }
    ]
  },
  "Int": {
    "userName": "userInt",
    "password": "passwordInt",
    "webAppName": "webappInt",
    "resourceGroup": "resourceGroupInt",
    "webJobs": [
      {
        "name": "abcInt",
        "typeName": "continuous"
      },
      {
        "name": "defInt",
        "typeName": "continuous"
      }
    ]
  }
}

脚本:

param(
[string]$currentEnv
)
[object]$paramObj=Get-Content "PowerShellModuleProject1\parameter2.json"|ConvertFrom-Json 
$userName =$paramObj.$currentEnv.userName
$password =$paramObj.$currentEnv.password
$webAppName =$paramObj.$currentEnv.webAppName
$resourceGroup=$paramObj.$currentEnv.resourceGroup
[object[]]$webJobs=$paramObj.$currentEnv.webJobs
foreach($wj in $webjobs){
         if($wj.typeName -eq "continuous")
         {
    Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName "$webAppName/$($wj.name)" -Action start -ApiVersion 2015-08-01 -Force
          Write-Host "continuous"
         Write-Host $wj.name
         }
         else{
         Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/TriggeredWebJobs -ResourceName "$webAppName/$($wj.name)" -Action run -ApiVersion 2015-08-01 -force
         Write-Host "triggered"
         Write-Host $wj.name
         }
         }

参数:-currentEnv $(Release.EnvironmentName)。在发布定义中修改每个环境的名称。

或者您可以为每个发布环境添加同名的环境变量(例如currentEnv),参数:-currentEnv $(currentEnv)