Подтвердить что ты не робот

Командлет PowerShell показывает свойство, но он не может отображать его с помощью 'select'

Я пытаюсь выполнить следующее утверждение.

dir IIS:\Sites| foreach{ get-webapplication -site $_.Name} | select -first 1

В результате получается

Name             Application pool   Protocols    Physical Path
----             ----------------   ---------    -------------
i1               DefaultWebSite     http         C:\inetpub\hosts\DefaultWebSite\i1

Но когда я выполняю следующее, результат пуст

dir IIS:\Sites| foreach{ get-webapplication -site $_.Name} | select -first 1 name

Итак, я просмотрел свойства для этого объекта

dir IIS:\Sites| foreach{ get-webapplication -site $_.Name} | select -first 1 | get-member | sort
Name | select Name, MemberType | format-table -auto

Name                                MemberType
----                                ----------
applicationPool                   NoteProperty
Attributes                            Property
ChildElements                         Property
ClearLocalData                          Method
Collection                        NoteProperty
ConfigurationPathType             NoteProperty
Copy                                    Method
Delete                                  Method
ElementTagName                        Property
enabledProtocols                  NoteProperty
Equals                                  Method
GetAttribute                            Method
GetAttributeValue                       Method
GetChildElement                         Method
GetCollection                           Method
GetHashCode                             Method
GetMetadata                             Method
GetParentElement                        Method
GetType                                 Method
Item                     ParameterizedProperty
ItemXPath                         NoteProperty
LoadProperties                          Method
Location                          NoteProperty
Methods                               Property
path                              NoteProperty
PhysicalPath                    ScriptProperty
PSPath                            NoteProperty
Schema                                Property
SetAttributeValue                       Method
SetMetadata                             Method
ToPSObject                              Method
ToString                                Method
Update                                  Method
UpdateCollection                        Method
virtualDirectoryDefaults          NoteProperty

Так что нет свойства "Имя". Как получается, что get-webpplication может показать свойство name, но мы не можем его выбрать?

4b9b3361

Ответ 1

Модуль WebAdministration определяет формат по умолчанию для соответствующего типа. В этом случае WebApplication, который вы получаете, имеет тип Microsoft.IIs.PowerShell.Framework.ConfigurationElement#site#application

Если вы посмотрите на файл iisprovider.format.ps1xml в модуле (обычно находится в C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration), вы увидите, что формат, указанный для имени этого типа, выглядит следующим образом:

...
<TableColumnItem>
   <ScriptBlock>
        $name = $_.Path.Trim('/')
        $name
   </ScriptBlock>
</TableColumnItem>
...

Таким образом, имя действительно получено из $_.Path.Trim('/'), поэтому вы можете сделать то же самое, если хотите:

get-webapplication -site "test" | select @{e={$_.Path.Trim('/')};l="Name"}