使用 powershell 列出 IIS 中的 Web 应用程序

List webapplications in IIS with powershell

首先抱歉我的英语不好,但我需要您帮助我编写 powershell 脚本。 我必须使用 powershell 脚本配置 IIS 服务器,但 "add application" 有问题。我需要检查站点中是否存在 webapplication。我想 选择站点 "testsite2"

中的所有 Web 应用程序
$webapplication=Get-WebApplication | Where-Object {$_. applicationpool -eq "testsite2"} | select -expand Name;

但我遇到问题,命令以错误结尾

select : Property "Name" cannot be found.At line:1 char:75 Get-WebApplication | Where-Object {$_. applicationpool -eq "testsite2"} | select ... CategoryInfo : InvalidArgument: (Microsoft.IIs.P...gurationElement:PSObject) [Select-Object], PSArgumentException FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand

我不明白。当我想从 "Name" 列中选择值时我做了什么?

我得到相同的结果

Get-ChildItem –Path IIS:\AppPools\ | Where-Object {$_. Name -eq "testsite2"} | select -ExpandProperty applications 

结果:

select : Property "applications" cannot be found. At line:1 char:80 Get-ChildItem –Path IIS:\AppPools\ | Where-Object {$_. Name -eq "testsite2"} | s ... CategoryInfo : InvalidArgument: (Microsoft.IIs.P...gurationElement:PSObject) [Select-Object], PSArgumentException FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand

WebAdministration 模块可能有点欺骗性,因为它使用自定义格式数据来显示 NameFormat-Table 之类的东西(即使底层对象没有 Name 属性).

要获得等效的 Name 值,请取 Path 属性 和 trim /:

$WebAppNames = Get-WebApplication |Select @{Name='Name';Expression={$_.Path.Trim('/')}} |Select -Expand Name

以上正是 PowerShell 中的格式化子系统计算 Name 值的方式。


您可以使用 Get-Member cmdlet 探索对象的实际属性:

Get-WebApplication |Get-Member

这还将向您显示类型名称,您可以使用它来探索可能适用的任何其他类型或格式数据:

Get-TypeData -TypeName 'Microsoft.IIS.PowerShell.Framework.ConfigurationElement#site#application'
Get-FormatData -TypeName 'Microsoft.IIS.PowerShell.Framework.ConfigurationElement#site#application'