在powershell中为循环使用管道失败,变量名为无法验证参数的实参

mnemlml8  于 2023-03-08  发布在  Shell
关注(0)|答案(1)|浏览(135)

我正在尝试使用循环来更改其中一个webapp配置的属性。我的想法是只更改属性为false的webapp配置。我有下面的代码,但是它失败了,错误为Cannot validate argument on parameter 'ResourceGroupName'

$is_https boolean
    Get-AzSubscription | ForEach-Object {
       Set-AzContext -SubscriptionName $_.Name       
       Get-AzWebApp | ForEach-Object {
        $is_https =(Get-AzWebApp -ResourceGroupName $resourcegroup  -Name $appName | select HttpsOnly).HttpsOnly
        if ($webapp_https -eq $false )
          {
            Set-AzWebApp -ResourceGroupName $_.ResourceGroup -Name $_.Name -HttpsOnly $true
          }
       }
   }
    • 编辑**

我现在已经通过添加第二个foreach循环修复了这个问题,但是我希望有一个If语句,这样Set-AzWebApp只在-httpsOnly为$false时运行。目前它会更改所有Web应用的设置,无论是否需要。上面的代码片段不起作用,但是下面的代码片段可以起作用,因为它没有if语句。

Get-AzSubscription | ForEach-Object {
       Set-AzContext -SubscriptionName $_.Name       
       Get-AzWebApp | ForEach-Object {
       Set-AzWebApp -ResourceGroupName $_.ResourceGroup -Name $_.Name -HttpsOnly $true
       
       }
   }
ppcbkaq5

ppcbkaq51#

从我这边复制后,我可以使用下面的脚本来实现您的要求,其中HttpsOnly设置为$false。下面是为我工作的完整脚本,其中我在资源组级别设置了值。

$AllWebApps=Get-AzWebApp -ResourceGroupName <RESOURCE_GROUP_NAME>
$AllWebApps
foreach($webapp in $AllWebApps)
{
    $is_https = (Get-AzWebApp -Name $webapp.Name -ResourceGroupName $webapp.ResourceGroup).HttpsOnly
    $is_https
    if ($is_https -eq $false)
    {
        Set-AzWebApp -ResourceGroupName $webapp.ResourceGroup -Name $webapp.Name -HttpsOnly $true
    }
}

结果:

相关问题