首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Get-AzureRmWebApp:过滤结果有意想不到的行为

Get-AzureRmWebApp:过滤结果有意想不到的行为
EN

Stack Overflow用户
提问于 2017-01-14 07:20:11
回答 1查看 496关注 0票数 0

我在Powershell中输入以下内容,以列出我所有的蔚蓝web应用程序的名称:

代码语言:javascript
复制
Get-AzureRmWebApp | % { $_.Name }

它的产出如下:

代码语言:javascript
复制
coolum-exercise-web-app
practice-web-app
AzureSandbox

但是,我想在名称上过滤这个输出。我键入以下内容:

代码语言:javascript
复制
Get-AzureRmWebApp | ? { $_.Name -like "coolum-exercise-web-app" } | % { $_.Name }

我只希望看到一个输出。相反我看到了

代码语言:javascript
复制
coolum-exercise-web-app
practice-web-app
AzureSandbox

为什么没有应用名称过滤器?

如果我直接在-Name上使用Get-AzureRmWebApp参数,它可以工作:

代码语言:javascript
复制
Get-AzureRmWebApp -Name "coolum-exercise-web-app" | % { %_.Name }

产出:

代码语言:javascript
复制
coolum-exercise-web-app

但是为什么where-object不能按照预期应用过滤器呢?

下面是一些非常令人费解的行为:如果将Get-AzureRmWebApp封装在括号中,过滤器就会像您预期的那样工作。

代码语言:javascript
复制
(Get-AzureRmWebApp) | ? { $_.Name -like "coolum-exercise-web-app" } | % { $_.Name }

产出:

代码语言:javascript
复制
coolum-exercise-web-app

有人能解释一下这种行为吗?为什么将命令括在括号中使过滤工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-14 20:55:37

这是一个已知的bug:#1544 Get-AzureRmWebApp -无法进入select对象

Get-AzureRmWebApp的结果是一个列表。您将期望列表的每一项都通过管道逐项发送。相反,整个列表只作为一个对象通过管道发送一次。

展示:

代码语言:javascript
复制
 Get-AzureRmWebApp | % { $_.GetType().FullName }

显示

代码语言:javascript
复制
System.Collections.Generic.List`1[[Microsoft.Azure.Management.WebSites.Models.Site, Microsoft.Azure.Management.Websites, Version=1.0.0.2, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]

代码语言:javascript
复制
(Get-AzureRmWebApp) | % { $_.GetType().FullName }

显示

代码语言:javascript
复制
Microsoft.Azure.Management.WebSites.Models.Site
Microsoft.Azure.Management.WebSites.Models.Site
Microsoft.Azure.Management.WebSites.Models.Site

这个错误的发生是因为底层C#代码调用WriteObject(sendToPipeline = list),而它应该调用WriteObject(sendToPipeline = list,enumerateCollection = true)

将调用包装在括号中的操作将返回的列表分配给本地临时对象。然后,这个本地临时对象的行为就像一个普通的列表。

我希望Azure团队能够解决这个问题,因为这将给不幸的自动化脚本编写人员带来意想不到的后果。

例如,我最初的电话:

代码语言:javascript
复制
Get-AzureRmWebApp | ? { $_.Name -like "coolum-exercise-web-app" } | % { $_.Name }

被解释为“如果任何值的都有类似于coolum-exercise-web-appName,则显示所有的值。”

编辑(2019年3月)

我已经用Azure Az Powershell模块对此进行了测试,我可以看到这个问题已经解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41647719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档