如何使用foreach脚本锁定Azure资源组中的所有资源

时间:2017-10-27 10:43:14

标签: powershell azure-powershell

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

$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

这是输出:

New-AzureRmResourceLock

您还可以在附加的屏幕截图enter image description here

中找到输出的外观

现在我想为上表中的7个资源中的每一个创建一个锁,但我不确定如何找出语法,以便PowerShell可以动态地将表中的值传递给{{1}的参数} 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

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

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

2 个答案:

答案 0 :(得分:1)

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

{{1}}

结果如下: enter image description here

答案 1 :(得分:0)

以下是使用bash和蔚蓝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)}'