Командлет PowerShell показывает свойство, но не может отобразить его с помощью «select» - PullRequest
14 голосов
/ 20 декабря 2011

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

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

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

1 Ответ

20 голосов
/ 20 декабря 2011

Модуль WebAdministration определяет формат по умолчанию для соответствующего типа. В этом случае получаемое веб-приложение имеет тип 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"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...