【问题标题】:Get-AzureRmResource : A parameter cannot be found that matches parameter name 'Tag'Get-AzureRmResource:找不到与参数名称“标记”匹配的参数
【发布时间】:2019-01-01 02:07:51
【问题描述】:

所以我完全被这个难住了。

问题

我有一个 powershell 脚本(一个 .ps1 文件),它有时会执行以下操作:

Import-Module AzureRM

Login-AzureRmAccount -Credential $azureCredentials | out-null
Select-AzureRmSubscription -SubscriptionId $azureSubscriptionId -TenantId $azureTenantId | out-null

Write-Host (ConvertTo-Json((Get-AzureRmResource -Tag @{ "env"="dev"}) | Select Name, Location))

我通过执行以下操作在 .NET 控制台应用程序中运行脚本:

Dim process = New Process() With {.StartInfo = New ProcessStartInfo With {
    .FileName = "powershell.exe",
    .Arguments = "-ExecutionPolicy ByPass -file """ & _powershellScriptsPath & "\get-webapps.ps1",
    .UseShellExecute = False,
    .RedirectStandardOutput = True,
    .RedirectStandardError = True
}}

脚本在我的笔记本电脑上运行良好,无论是从 ISE 还是从控制台应用程序运行。

然后在我的桌面上,它在 ISE 中运行良好,但在控制台应用程序中失败,并显示以下错误消息:

Get-AzureRmResource : A parameter cannot be found that matches parameter name 'Tag'.

我想不通。

一些见解

我的$PSVersionTable 在两台电脑上都是一样的:

Name                           Value                                                                                                                                                                                                                                                
----                           -----                                                                                                                                                                                                                                                
PSVersion                      5.1.17134.165                                                                                                                                                                                                                                        
PSEdition                      Desktop                                                                                                                                                                                                                                              
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                                                                                                                                              
BuildVersion                   10.0.17134.165                                                                                                                                                                                                                                       
CLRVersion                     4.0.30319.42000                                                                                                                                                                                                                                      
WSManStackVersion              3.0                                                                                                                                                                                                                                                  
PSRemotingProtocolVersion      2.3                                                                                                                                                                                                                                                  
SerializationVersion           1.1.0.1

我的笔记本电脑有 6.1.0 版的 AzureRm 模块:

PS C:\WINDOWS\system32> Get-InstalledModule -Name AzureRm

Version    Name                                Repository           Description                                                                                                                                                                                                     
-------    ----                                ----------           -----------                                                                                                                                                                                                     
6.1.0      AzureRM                             PSGallery            Azure Resource Manager Module

虽然我的桌面版本为 6.5.0:

PS C:\WINDOWS\system32> Get-InstalledModule -Name AzureRm

Version    Name                                Repository           Description                                                                                                                                                                                                     
-------    ----                                ----------           -----------                                                                                                                                                                                                     
6.5.0      AzureRM                             PSGallery            Azure Resource Manager Module

所以这里有不同的版本,但 -Tag 确实存在于 6.1.0 中,因为在 Powershell ISE 中脚本确实有效。而且它必须使用 6.1.0,因为它似乎是唯一安装的版本(?)。

此外,控制台应用程序在两个 Visual Studio(笔记本电脑/台式机)中运行相同的配置(至少据我所知)。值得注意的是,它编译为 AnyCPU 并在两台计算机上以 32 位运行。

【问题讨论】:

  • 是什么阻止您将 azurerm 更新到 6.5.0 只是为了确定?此外,您可以将 get-command get-azurermresource -full 添加到控制台应用程序并检查输出
  • 您的命令指出了我认为的问题 - 从 ISE 运行时显示为 6.2.0(当脚本工作时),但从控制台应用程序运行时显示为 5.5.2(当失败时)。我假设 -Tag 参数在 5.5.2 中不存在。现在的问题是 - 它从哪里获得 5.5.2 以及为什么?

标签: .net visual-studio azure powershell azure-powershell


【解决方案1】:

查看this 似乎-tag 缺少AzureRm 6.0.0 之前的版本。这是由以下人员确定的问题的根本原因:

get-command get-azurermresource -full

解决方法是升级该版本。您可以通过以下方式找到模块所在的位置:

get-module azurerm  | select modulebase

ps。另一种解决方法是使用 odata 查询:

Get-AzureRmResource -ODataQuery "`$filter=tagname eq 'something'"

【讨论】:

  • 好吧,在“故障”计算机上,出于某种原因,控制台应用程序正在从C:\Program Files (x86)\WindowsPowerShell\Modules\AzureRM\5.7.0 加载模块。当从 ISE 或(相同版本的).NET 运行时,为什么相同的脚本会运行不同版本的模块?
  • 我尝试在 Import-Module 命令中添加 -MinimumVersion,但结果是 Import-Module : The specified module 'AzureRM' with version '6.5.0' was not loaded because no valid module file was (也尝试了 6.0.0)。似乎 Visual Studio / .NET 不知道 ISE 默认安装和使用的 6.5.0 版本,我不知道如何解决。
  • 我猜它只为您的用户安装?
  • 我已通过在两台计算机上运行 Install-Module -Name AzureRm 并按照此处的说明安装它:docs.microsoft.com/en-us/powershell/azure/…。所以这会很奇怪,但我将如何检查它是否仅为我的用户安装?话虽这么说,所有 Windows 的东西都让我有点不知所措,所以为了规避这个问题,我喜欢 -ODataQuery 解决方法的想法......只需要弄清楚如何也测试标签的值(你的示例返回给我所有具有给定标签但不查看标签值的资源)。
  • 好吧,我找不到任何官方文档,因为微软,但我已经想通了:Get-AzureRmResource -ODataQuery "`$filter=tagname eq 'env' and tagvalue eq 'dev'"returns me what I want。我不知道为什么我的 Visual Studio 不会加载 6.5.0 模块,但此时我有一个脚本可以返回我需要的内容并在旧版本的 AzureRm 模块上运行,所以我很好!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多