Powershell-Azure WebApp IpRestrictions - Массив WebApps - PullRequest
0 голосов
/ 28 октября 2018

В течение нескольких дней я изо всех сил пытался найти рабочее решение для этого

Чего я пытаюсь достичь?

Foreach ($item in $webApps){ 
$WebAppConfig = (Get-AzureRmResource -ResourceType Microsoft.Web/sites/config -ResourceName $item -ResourceGroupName $resourceGroup -ApiVersion $APIVersion) 
} 

проблема в том, что -resourceName не будет принимать объекты, а только строку

Я ищу способ получить выходные данные следующей команды, преобразовать ее в строку, чтобы онаможет удовлетворять –ResourceName и циклически проходить по каждому элементу в строке

$webApps = (Get-AzureRmResourceGroup -Name $resourceGroup | Get-AzureRmWebApp).name 

Возвращает хороший список веб-приложений Azure, которые существуют в указанной ResourceGroup, однако они представлены в виде объекта, который не будет принимать –ResourceName

Я пробовал несколько способов преобразовать выходные данные $ webApps в строку, добавить запятую в конец, затем выполнить –split ',' но, похоже, ничего не работает должным образом, где -ResourceName приметit

Метод 1:

[string]$webAppsArrays =@() 

Foreach ($webApp in $webApps){ 

$webAp+',' -split ',' 

} 

Метод 2:

$

webApps | ForEach-Object { 

$webApp = $_ + "," 

Write-Host $webApp 

} 

Метод 3:

$csvPath2 = 'C:\Users\Giann\Documents\_Git Repositorys\QueriedAppList2.csv' 

$webApps = (Get-AzureRmResourceGroup -Name $resourceGroup | Get-AzureRmWebApp).name | out-file -FilePath $csvPath1 -Append 

$csvFile2 = import-csv -Path $csvPath1 -Header Name 

Это выводит список в CSV,однако это все еще объекты, поэтому я не могу передать каждый элемент в –ResourceName

. Я иду по кругу, пытаясь сделать приведенный ниже повторяющийся циклический скрипт

Желаемый конечный результат будетиспользовать приведенный ниже сценарий с массивом webApps, запрашиваемым из предоставленной переменной группы ресурсов:

Любая помощь будет очень полезна для использования этого сценария, но получить динамический списокWebApps из указанной группы ресурсов с учетом ограничений -ResourceName "String" в переменной $ WebAppConfig

Вот оригинальный скрипт для создания ограничений IP для 1 веб-приложения и 1 группы ресурсов с использованиемсвойства из файла CSV:

#Create a Function to create IP Restrictions for 1 Web App and 1 Resource Group, using properties from the CSV file:  

#Variables 
$WebApp = "" 
$resourceGroup ="" 
$subscription_Id = '' 

#Login to Azure 
Remove-AzureRmAccount -ErrorAction SilentlyContinue | Out-Null 
Login-AzureRmAccount -EnvironmentName AzureUSGovernment -Subscription $subscription_Id 

Function CreateIpRestriction {  
Param (  
[string] $name,  
[string] $ipAddress,  
[string] $subnetMask,  
[string] $action,  
[string] $priority  
)  

$APIVersion = ((Get-AzureRmResourceProvider -ProviderNamespace Microsoft.Web).ResourceTypes | Where-Object ResourceTypeName -eq sites).ApiVersions[0]  

$WebAppConfig = (Get-AzureRmResource -ResourceType Microsoft.Web/sites/config -ResourceName $WebApp -ResourceGroupName $ResourceGroup -ApiVersion $APIVersion)  

$ipRestriction = $WebAppConfig.Properties.ipSecurityRestrictions  
$ipRestriction.name = $name  
$ipRestriction.ipAddress = $ipAddress  
$ipRestriction.subnetMask = $subnetMask  
$ipRestriction.action = $action  
$ipRestriction.priority = $priority  
return $ipRestriction  
}  

#Set csv file path:  
$csvPath5 = 'C:\Users\Giann\Documents\_Git Repositorys\ipRestrictions5.csv' 

#import CSV Contents  
$ipRestrictionArray = Import-Csv -Path $csvPath5  

$ipRestrictions = @()  
foreach($item in $ipRestrictionArray){  
Write-Host "Adding ipRestriction properties for" $item.name  
$newIpRestriction = CreateIpRestriction -name $item.name -ipAddress $item.ipAddress -subnetMask $item.subnetMask -action $item.action -priority $item.priority  
$ipRestrictions += $newIpRestriction  
}  

#Set the new ipRestriction on the WebApp 
Set-AzureRmResource -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/config -ResourceName $WebApp/web -ApiVersion $APIVersion -PropertyObject $ipRestrictions 

1 Ответ

0 голосов
/ 29 октября 2018

В качестве продолжения комментариев, мне действительно нужна многострочная информация, поэтому здесь в качестве ответа.

Обратите внимание, что я не могу проверить это сам

Эта страница здесь показывает, что Set-AzureRmResource -Свойства должны иметь тип PSObject. (вместо -Properties вы также можете использовать псевдоним -PropertyObject)

В вашем коде я не думаю, что функция CreateIpRestriction возвращает объект PSObject, но пытается сделать это тожемного.

В любом случае, попробуйте так:

Function CreateIpRestriction {  
    Param (  
        [string] $name,  
        [string] $ipAddress,  
        [string] $subnetMask,  
        [string] $action,  
        [string] $priority  
    )  
    # There are many ways to create a PSObject (or PSCustomObject if you like).  
    # Have a look at https://social.technet.microsoft.com/wiki/contents/articles/7804.powershell-creating-custom-objects.aspx for instance.
    return New-Object -TypeName PSObject -Property @{
            name = $name  
            ipAddress = $ipAddress  
            subnetMask = $subnetMask  
            action = $action  
            priority = $priority
        }
}

#Set csv file path:  
$csvPath5 = 'C:\Users\Giann\Documents\_Git Repositorys\ipRestrictions5.csv' 

#import CSV Contents  
$ipRestrictionArray = Import-Csv -Path $csvPath5  

# create an new array of IP restrictions (PSObjects)
$newIpRestrictions = @()  
foreach($item in $ipRestrictionArray){  
    Write-Host "Adding ipRestriction properties for" $item.name  
    $newIpRestrictions += (CreateIpRestriction -name $item.name -ipAddress $item.ipAddress -subnetMask $item.subnetMask -action $item.action -priority $item.priority  )
}  

# here we set the restrictions we collected in $newIpRestrictions in the $WebAppConfig.Properties.ipSecurityRestrictions array
$APIVersion = ((Get-AzureRmResourceProvider -ProviderNamespace Microsoft.Web).ResourceTypes | Where-Object ResourceTypeName -eq sites).ApiVersions[0]  
$WebAppConfig = (Get-AzureRmResource -ResourceType Microsoft.Web/sites/config -ResourceName $WebApp -ResourceGroupName $ResourceGroup -ApiVersion $APIVersion)  
$WebAppConfig.Properties.ipSecurityRestrictions = $newIpRestrictions
$WebAppConfig | Set-AzureRmResource -ApiVersion $APIVersion -Force | Out-Null

Приведенный выше код заменит ipSecurityRestrictions новым набором.Возможно, вы захотите сначала получить их и добавить в уже существующий список.

Я нашел примеры получения, добавления и удаления ipSecurityRestrictions здесь , но я могу представить, что есть и другие примерынайдено.

Надеюсь, что поможет.

...