Azure PowerShell:如何验证输入存储帐户是否属于某个订阅

Azure PowerShell:如何验证输入存储帐户是否属于某个订阅,azure,powershell,Azure,Powershell,如何验证某个存储帐户名(作为输入接收)是否属于某个特定订阅 $storageAccountName = <something from input> $storageAccountKey = <something from input> $subscriptionName = "MySubscription" $subscription = Get-AzureSubscription -SubscriptionName $subscriptionName $Stora

如何验证某个存储帐户名(作为输入接收)是否属于某个特定订阅

$storageAccountName = <something from input>
$storageAccountKey = <something from input>

$subscriptionName = "MySubscription"
$subscription = Get-AzureSubscription -SubscriptionName $subscriptionName

$StorageAccountContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey 
$storageAccountName=
$storageAccountKey=
$subscriptionName=“MySubscription”
$subscription=Get AzureSubscription-SubscriptionName$SubscriptionName
$StorageAccountContext=New AzureStorageContext-StorageAccountName$StorageAccountName-StorageAccountKey$StorageAccountKey
现在怎么办?

如何验证给定的存储帐户是否确实属于此特定订阅


(如果没有,我想退出脚本,现在允许继续。)

对我来说,答案是: 它位于哪个资源组中,订阅位于哪个资源组中:

$sa = Get-AzureRmStorageAccount -Name <input storage account name>

$sa
StorageAccountName ResourceGroupName Location   SkuName     Kind      AccessTier CreationTime        ProvisioningState EnableHttpsTrafficOnly
------------------ ----------------- --------   -------     ----      ---------- ------------        ----------------- ----------------------
sa001           rg080        westeurope StandardLRS StorageV2 Hot        02/09/2019 15:16:15 Succeeded         False

Get-AzureRmResourceGroup -Name $sa.ResourceGroupName -Location $sa.Location


ResourceGroupName : rg080
Location          : westeurope
ProvisioningState : Succeeded

ResourceId        : /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/rg080
大概是这样的:

(Get-AzureRmResourceGroup -Name $sa.ResourceGroupName -Location $sa.Location).ResourceId.Split('/')[2] -like (Get-AzureRmSubscription | where name -like $subscriptionName).SubscriptionId

对我来说,答案是: 它位于哪个资源组中,订阅位于哪个资源组中:

$sa = Get-AzureRmStorageAccount -Name <input storage account name>

$sa
StorageAccountName ResourceGroupName Location   SkuName     Kind      AccessTier CreationTime        ProvisioningState EnableHttpsTrafficOnly
------------------ ----------------- --------   -------     ----      ---------- ------------        ----------------- ----------------------
sa001           rg080        westeurope StandardLRS StorageV2 Hot        02/09/2019 15:16:15 Succeeded         False

Get-AzureRmResourceGroup -Name $sa.ResourceGroupName -Location $sa.Location


ResourceGroupName : rg080
Location          : westeurope
ProvisioningState : Succeeded

ResourceId        : /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/rg080
大概是这样的:

(Get-AzureRmResourceGroup -Name $sa.ResourceGroupName -Location $sa.Location).ResourceId.Split('/')[2] -like (Get-AzureRmSubscription | where name -like $subscriptionName).SubscriptionId

根据我的测试,我们可以在一个订阅中获得所有存储帐户名,然后我们确保这些名称是否包含您提供的名称。例如:

Connect-AzAccount 
$SubscriptionName=""
$Subscription=Get-AzSubscription -SubscriptionName  
Select-AzSubscription -Subscription $Subscription

#get all storage account name in the subscription 
$name = Get-AzStorageAccount | Select-Object StorageAccountName


$StorageAccountName="test" 

$value=$name.StorageAccountName.IndexOf($StorageAccountName)

if($value -ne -1) {
   Write-Host " exist"
}else {
   Write-Host "does not exist"
}
更新

根据我的测试,我们可以在一个订阅中获取所有存储帐户名,然后我们会确保这些名称是否包含您提供的名称。例如:

Connect-AzAccount 
$SubscriptionName=""
$Subscription=Get-AzSubscription -SubscriptionName  
Select-AzSubscription -Subscription $Subscription

#get all storage account name in the subscription 
$name = Get-AzStorageAccount | Select-Object StorageAccountName


$StorageAccountName="test" 

$value=$name.StorageAccountName.IndexOf($StorageAccountName)

if($value -ne -1) {
   Write-Host " exist"
}else {
   Write-Host "does not exist"
}
更新

您是通过powershell登录azure,还是仅尝试使用基于StorageAccountName和AccessKey的AzureStorageContext获取订阅详细信息?@AnishK“仅尝试使用基于StorageAccountName和AccessKey的AzureStorageContext获取订阅详细信息”。谢谢你正在尝试另一种方法,即尝试从azure资源获取订阅详细信息,这是不可能的。我不确定您的使用情况,但无论是否订阅,存储帐户名称始终保持唯一。请在此处找到存储帐户命名约定:该约定声明存储帐户名称为“全局唯一名称”。您是通过powershell登录azure,还是仅尝试使用基于StorageAccountName和AccessKey的AzureStorageContext获取订阅详细信息?@AnishK“只是尝试使用基于StorageAccountName和AccessKey的AzureStorageContext获取订阅详细信息“.Thanksy您正在尝试另一种方法,即尝试从azure资源获取订阅详细信息,这在目前是不可能的。我不确定您的使用情况,但无论是否订阅,存储帐户名称始终保持唯一。请在此处找到存储帐户命名约定:该约定声明存储帐户名称为“全局唯一名称”。谢谢。回答得好。但是我没有资源名,这是获取AzureRMStorageAccount的一个必需参数。这是来自您的代码:`$storageAccountName=所以,您已经将其作为输入提供了,不是吗?我从用户那里获取了存储帐户名和密钥。我有两个变量:$storageAccountName和$StorageAccountKeys你有资源名吗?我手头有:SubscriptionName、SubscriptionId、storageAccountName和StorageAccountKey。我还需要点别的吗?谢谢。回答得好。但是我没有资源名,这是获取AzureRMStorageAccount的一个必需参数。这是来自您的代码:`$storageAccountName=所以,您已经将其作为输入提供了,不是吗?我从用户那里获取了存储帐户名和密钥。我有两个变量:$storageAccountName和$StorageAccountKeys你有资源名吗?我手头有:SubscriptionName、SubscriptionId、storageAccountName和StorageAccountKey。我还需要点别的吗?谢谢。比较名称不够安全!我们可以有两个不同的订阅,其中每个订阅都有一个存储帐户,但它们有相同的帐户StorageAccountName@Samer-两个存储帐户不能具有相同的名称。您可以通过尝试在单个/不同订阅中创建两个名称相同的存储帐户来验证这一点。@SamerAamar根据我的测试,存储帐户是唯一的。我们不能在单个/不同的订阅帐户中使用相同的帐户名。比较名称不够安全!我们可以有两个不同的订阅,其中每个订阅都有一个存储帐户,但它们有相同的帐户StorageAccountName@Samer-两个存储帐户不能具有相同的名称。您可以通过尝试在单个/不同订阅中创建两个名称相同的存储帐户来验证这一点。@SamerAamar根据我的测试,存储帐户是唯一的。我们不能在单个/不同订阅中使用相同的帐户名