Get-IISSite 和 Get-ChildItem 之间的区别 iis:\\sites

Get-IISSite 和 Get-ChildItem 之间的区别 iis:\\sites

我想知道是否有人可以向我解释我所看到的行为的差异。

我正在尝试查找 IIS 站点的物理路径。

此示例有效,正确返回 PhysicalPath

Import-Module WebAdministration
Get-ChildItem iis:\\sites | Select PhysicalPath

此示例不起作用。PhysicalPath 返回为 null/空。

Get-IISSite | select PhysicalPath

如果我没记错的话,两个示例都应该返回一个Microsoft.Web.Administration.Site对象。为什么第二个示例缺少数据?

答案1

让我们来看看:

Get-ChildItem iis:\sites | get-Member | 其中名称 -like p* | Sort-Object 名称

    TypeName: System.Object

 Name          MemberType   Definition
 ----          ----------   ----------
 password      NoteProperty string password=
 physicalPath  NoteProperty string physicalPath=C:\inetpub\wwwroot
 PSChildName   NoteProperty string PSChildName=Default Web Site
 PSDrive       NoteProperty PSDriveInfo PSDrive=IIS
 PSIsContainer NoteProperty bool PSIsContainer=True
 PSParentPath  NoteProperty string PSParentPath=WebAdministration::\\SANKNIGHT\Sites
 PSPath        NoteProperty string PSPath=WebAdministration::\\SANKNIGHT\Sites\Default Web Site
 PSProvider    NoteProperty IIsProviderInfo PSProvider=WebAdministration

获取 IISSite | 获取成员

    TypeName: Microsoft.Web.Administration.Site

 Name                       MemberType            Definition
 ----                       ----------            ----------
 ApplicationDefaults        Property              Microsoft.Web.Administration.ApplicationDefaults ApplicationDefault...
 Applications               Property              Microsoft.Web.Administration.ApplicationCollection Applications {get;}
 Attributes                 Property              Microsoft.Web.Administration.ConfigurationAttributeCollection Attri...
 Bindings                   Property              Microsoft.Web.Administration.BindingCollection Bindings {get;}
 ChildElements              Property              Microsoft.Web.Administration.ConfigurationChildElementCollection Ch...
 Delete                     Method                void Delete()

它没有任何以 P 开头的成员,并且成员数量比 Get-ChildItem 少得多。您可以看到它们也不是同一个对象。

使用 Get-ChildItem 时,每个提供程序都会提供一些有关应显示内容的提示。我认为这是在:

$pshome\Modules\WebAdministration\iisprovider.format.ps1xml

因此,所有额外信息均被添加。

答案2

上述答案是正确的,但似乎有些复杂。更简短的答案是它们返回不同的对象类型。

希望这可以更好地说明这一点:

$PSDriveThing = Get-ChildItem IIS:\Sites\
$IISSiteThing = Get-IISSite

这两个对象都是数组,但内容却大不相同,并且get-iisSite返回的对象不会在顶层显示 PhysicalPath 对象。因此,当您select查找不存在的内容时,您将创建一个空数组。

    > $PSDriveThing

    physicalPath
    ------------
    %SystemDrive%\inetpub\wwwroot
    D:\web\OurPortalWeb\site

    > $IISSiteThing
    PhysicalPath
------------

现在,获取实际的 IIS 对象:

> $IISSiteThing = Get-IISSite
> $IISSiteThing

Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
Default Web Site 1    Stopped    %SystemDrive%\inetpub\wwwroot  http *:80:
                                                                net.msmq localhost
                                                                msmq.formatname localhost
                                                                net.pipe *

OurPortalWeb    2    Started    D:\web\OurPortalWeb\site        https *:443:portal-test2.contoso.com sslFlags=None

有两个站点,所以有两个对象,因此我们将抓取数组索引 0 处的第一个对象:

>$IISSiteThing[0]
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
Default Web Site 1    Stopped    %SystemDrive%\inetpub\wwwroot  http *:80:
                                                                net.msmq localhost
                                                                msmq.formatname localhost
                                                                net.pipe *
                                                                net.tcp 808:*

当你深入研究对象时,你会发现很多子节点和信息Microsoft.Web.Administration.ConfigurationElement,直到最终找到你想要的:

> $IISSiteThing[0].Applications[0].VirtualDirectories[0].PhysicalPath
%SystemDrive%\inetpub\wwwroot

获取所需物理路径的一种方法是:

> Get-IISSite | % {$_.Applications} | % {$_.VirtualDirectories} | % {$_.PhysicalPath}
%SystemDrive%\inetpub\wwwroot
D:\web\OurPortalWeb\site

相关内容