2017-01-14 7 views
0

을 가지고 내가 입력 내 푸른 웹 응용 프로그램의 모든 이름을 나열하려면 PowerShell에서 다음은 Get-AzureRmWebApp : 필터링 결과 것은 예기치 않은 동작이

Get-AzureRmWebApp | % { $_.Name } 

그것은 출력 : 다음

coolum-exercise-web-app 
practice-web-app 
AzureSandbox 

그러나 이 출력을 이름으로 필터링하고 싶습니다. 이를 입력하면

Get-AzureRmWebApp | ? { $_.Name -like "coolum-exercise-web-app" } | % { $_.Name } 

출력이 하나만 표시됩니다. 대신 내가 볼

coolum-exercise-web-app 
practice-web-app 
AzureSandbox 

이름 필터가 적용되지 않은 이유는 무엇입니까? 내가 Get-AzureRmWebApp에 직접 -Name 매개 변수를 사용하는 경우

그것은 작동합니다

Get-AzureRmWebApp -Name "coolum-exercise-web-app" | % { %_.Name } 

출력 :

coolum-exercise-web-app 

where-object 예상대로 필터를 적용하지 않습니다?


여기에 약간의 수수께끼 같은 행동이 있습니다. Get-AzureRmWebApp을 대괄호로 묶는 경우 예상대로 필터가 작동합니다.

(Get-AzureRmWebApp) | ? { $_.Name -like "coolum-exercise-web-app" } | % { $_.Name } 

출력 :

coolum-exercise-web-app 

사람이 동작을 설명 할 수 있습니까? 괄호 안에 명령을 넣으면 필터링이 작동하는 이유는 무엇입니까? (괄호주의)

(Get-AzureRmWebApp) | ? { $_.Name -like 'cool*' } 

이 절은 Get-AzureRmWebApp을 할 수있는 기본 명명 된 매개 변수로 간주됩니다 전체 같은데 :

답변

0

으로 시도하십시오. 그래서 where 절에서 CmdLet을 대괄호로 구분해야합니다.

실제로 Get-AzureRmWebApp는 목록을 반환하지만 Get-AzureRmVM과 같은 다른 CmdLet은 단일 개체를 반환합니다.

Get-AzureRmWebApp | gm 
Get-AzureRmVM | gm 
0

이 알려진 버그 : Get-AzureRmWebApp#1544 Get-AzureRmWebApp - unable to pipe into select-object

결과 목록입니다. 목록의 각 항목이 파이프를 통해 항목별로 전송 될 것으로 예상됩니다. 대신 전체 목록이 단일 객체로 파이프를 통해 한 번 전송됩니다.

을 보여주기 위해 :

Get-AzureRmWebApp | % { $_.GetType().FullName } 

표시

System.Collections.Generic.List`1[[Microsoft.Azure.Management.WebSites.Models.Site, Microsoft.Azure.Management.Websites, Version=1.0.0.2, Culture=neutral, PublicKeyToken=31bf3856ad364e35]] 

동안

(Get-AzureRmWebApp) | % { $_.GetType().FullName } 

표시

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)


를 호출해야 할 때 691,363,210

버그가 발생합니다. 그런 다음이 로컬 임시 객체는 일반 목록처럼 작동합니다.

불행한 자동화 스크립트 작성자가 의도하지 않은 결과를 낳기 때문에 Azure 팀에서이를 수정하기를 바랍니다. 예를 들어

, 내 원래 전화 :

Get-AzureRmWebApp | ? { $_.Name -like "coolum-exercise-web-app" } | % { $_.Name } 

는 "값의이 Namecoolum-exercise-web-app처럼, 다음의 값을 모두 표시가 합니다."로 해석됩니다