如何使用 foreach 脚本锁定 Azure 资源组中的所有资源
How to lock all resources in an Azure resource group with a foreach script
我正在尝试创建一个 PowerShell 脚本,该脚本将使用以下方法对特定资源组内的所有 Azure 资源设置删除锁定:
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 14393 1715
我可以在我的资源组中获取当前资源并在 table 中格式化,如下
$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)
现在我想为上述 table 中的 7 个资源中的每一个创建一个锁,但我不确定如何找出语法以便 PowerShell 可以动态地通过管道传输 [=36] 中的值=] 到 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
参数。
我分别尝试使用 table 中的资源名称值填充 -resourcename
参数,最后使用 table 中的资源类型值填充 -resourcetype
参数我的问题。
请推荐一种可能的语法来实现这一点(使用 powershell foreach 循环创建上述所有 7 个锁)。
我们可以使用此脚本为该资源组中的每个资源创建锁,示例如下:
$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}
结果如下:
以下是使用 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 " " --resource-type ")}'
我正在尝试创建一个 PowerShell 脚本,该脚本将使用以下方法对特定资源组内的所有 Azure 资源设置删除锁定:
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 14393 1715
我可以在我的资源组中获取当前资源并在 table 中格式化,如下
$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)
现在我想为上述 table 中的 7 个资源中的每一个创建一个锁,但我不确定如何找出语法以便 PowerShell 可以动态地通过管道传输 [=36] 中的值=] 到 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
参数。
我分别尝试使用 table 中的资源名称值填充 -resourcename
参数,最后使用 table 中的资源类型值填充 -resourcetype
参数我的问题。
请推荐一种可能的语法来实现这一点(使用 powershell foreach 循环创建上述所有 7 个锁)。
我们可以使用此脚本为该资源组中的每个资源创建锁,示例如下:
$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}
结果如下:
以下是使用 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 " " --resource-type ")}'