【问题标题】:How to lock all resources in an Azure resource group with a foreach script如何使用 foreach 脚本锁定 Azure 资源组中的所有资源
【发布时间】:2017-10-27 10:43:14
【问题描述】:

我正在尝试创建一个 PowerShell 脚本,该脚本将使用以下方法对特定资源组内的所有 Azure 资源设置删除锁:

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  1715

我可以在我的资源组中获取当前资源并在下表中格式化

$resources=Get-AzureRmResource |Format-Table -property resourcename, resourcetype

这是输出:

ResourceName          ResourceType
------------          ------------
georgitestVM          Microsoft.Compute/virtualMachines
georgitestvm39        Microsoft.Network/networkInterfaces
georgitestVM-nsg      Microsoft.Network/networkSecurityGroups
georgitestVM-ip       Microsoft.Network/publicIPAddresses
georgitest-vnet       Microsoft.Network/virtualNetworks
dummyresourcegroup407 Microsoft.Storage/storageAccounts
storagedummyaccount   Microsoft.Storage/storageAccounts

您还可以在随附的屏幕截图中找到输出的外观CLICK HERE FOR SCREENSHOT)

现在我想为上表中的 7 个资源中的每一个创建一个锁,但我不确定如何找出语法,以便 PowerShell 可以动态地将表中的值传递给 New-AzureRmResourceLock cmdlet 的参数.

在没有循环的情况下执行这 7 个锁的虚拟方法是

New-AzureRmResourceLock -LockLevel CanNotDelete -LockName YouWontDeletegeorgitestVM `
-resourceName georgitestVM -ResourceType Microsoft.Compute/virtualMachines `
-resourceGroupName dummyresourcegroup -force -verbose

New-AzureRmResourceLock -LockLevel CanNotDelete -LockName YouWontDeletegeorgitestvm39 `
-resourceName georgitestvm39 -ResourceType Microsoft.Network/networkInterfaces `
-resourceGroupName dummyresourcegroup -force -verbose

New-AzureRmResourceLock -LockLevel CanNotDelete -LockName YouWontDeletegeorgitestVM-nsg `
-resourceName georgitestVM-nsg -ResourceType Microsoft.Network/networkSecurityGroups `
-resourceGroupName dummyresourcegroup -force -verbose

New-AzureRmResourceLock -LockLevel CanNotDelete -LockName YouWontDeletegeorgitestVM-ip `
-resourceName georgitestVM-ip -ResourceType Microsoft.Network/publicIPAddresses `
-resourceGroupName dummyresourcegroup -force -verbose

New-AzureRmResourceLock -LockLevel CanNotDelete -LockName YouWontDeletegeorgitest-vnet `
-resourceName georgitest-vnet -ResourceType Microsoft.Network/virtualNetworks `
-resourceGroupName dummyresourcegroup -force -verbose

New-AzureRmResourceLock -LockLevel CanNotDelete -LockName YouWontDeletedummyresourcegroup407 `
-resourceName dummyresourcegroup407 -ResourceType Microsoft.Storage/storageAccounts `
-resourceGroupName dummyresourcegroup -force -verbose

New-AzureRmResourceLock -LockLevel CanNotDelete -LockName YouWontDeletestoragedummyaccount `
-resourceName storagedummyaccount -ResourceType Microsoft.Storage/storageAccounts `
-resourceGroupName dummyresourcegroup -force -verbose

可以看出,我希望用("YouWontDelete"+$resourceName) 的串联值填充-LockName 参数。 我分别尝试用表中的资源名称值填充-resourcename 参数,最后用我的问题开始时表中的资源类型值填充-resourcetype 参数。

请推荐一种可能的语法来实现这一点(使用 powershell foreach 循环创建上述所有 7 个锁)。

【问题讨论】:

    标签: powershell azure-powershell


    【解决方案1】:

    我们可以使用此脚本为该资源组中的每个资源创建锁,示例如下:

    $rg = 'jasonauto'
    $resources = Get-AzureRmResource | ?{ $_.ResourceGroupName -eq 'jasonauto' } | select -expandpropert resourcename 
    foreach($resource in $resources){$ln = 'YouWontDelete' + $resource;
    $resourcetype = (Get-AzureRmResource -ResourceGroupName 'jasonauto' -ResourceName $resource ).resourcetype;
    New-AzureRmResourceLock -LockLevel CanNotDelete -LockName $ln -resourceName $resource -ResourceType $resourcetype -resourceGroupName $rg -force -verbose}
    

    结果如下:

    【讨论】:

      【解决方案2】:

      这是使用 bash 和 azure cli 的方法:

      az resource list -g myResourcegroup -o tsv --query [].[name,type] | awk '{system("az lock create -t CanNotDelete --notes myDeleteNotes -n myNameOfLock -g myResourcegroup --resource "$1 " --resource-type "$2)}'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-21
        • 1970-01-01
        相关资源
        最近更新 更多