如何从PowerShell中的所有网站中列出IIS中的虚拟目录

use*_*725 8 powershell virtual-directory windows-server-2012 iis-8

我遇到了一个完整的障碍,无法弄清楚如何在IIS 8. 我一直在检索应用程序和空的空参数错误,只是找不到让虚拟目录列出的方法。

我需要以下数据来列出有关虚拟目录的信息:

  • 物理路径
  • 应用池协会
  • 站点名称
  • 证书

下面是我一直在使用和弄乱的代码:

    *See revised code below*
    
Run Code Online (Sandbox Code Playgroud)

我还使用该Appcmd.exe命令尝试列出虚拟目录:

C:\Windows\System32\inetsrv\appcmd.exe LIST VDIRS
Run Code Online (Sandbox Code Playgroud)

但我仍然没有得到我需要的输出。任何或任何帮助将不胜感激!谢谢!

编辑# - - - - - - - - - - - - - - - - - - - - - - - - ---------------

通过注释几行来列出我的虚拟目录,但它只打印出名称和:

  • 物理路径
  • 应用池协会
  • 站点名称
  • 证书

我仍然不知道,以下是修改后的代码:

  Import-Module WebAdministration
    $Websites = Get-ChildItem IIS:\Sites 
    foreach($Site in $Websites)
            {
                $webapps = Get-WebApplication -Site $Site.name 
                $VDir = Get-WebVirtualDirectory -Site $Site.name #-Application $webapps.name
                                foreach($webvdirectory in $VDir)
                                    {
                                        $webvdirectory2 = $webvdirectory.path
                                        Write-Host $webvdirectory2.split("/")[-1]
                                        #Write-Host $webvdirectory
                                        #Write-Host $webvdirectory.name
                           
                                    } 
                            #Write-Host $VDir 
            
            }
Run Code Online (Sandbox Code Playgroud)

Mat*_*sen 12

您写道,您无法弄清楚如何检索:

  • 物理路径
    • 可通过physicalPathnoteproperty直接访问
  • 应用池协会
    • 没有意义,应用程序被分配到应用程序池,目录本身不是
  • 站点名称
    • 你已经知道这个 ( $Site.name)
  • 证书
    • 我假设您只想要用户名(如果存在)

这些都可以通过对现有脚本进行一些轻微改动来检索:

Import-Module WebAdministration

$Websites = Get-ChildItem IIS:\Sites 

$AllVDirs = @()

foreach($Site in $Websites)
{
    $VDirs = Get-WebVirtualDirectory -Site $Site.name
    foreach($webvdirectory in $VDirs)
    {
            $vdir = New-Object psobject -Property @{
                "Name" = ($webvdirectory.path -split "/")[-1]
                "Site" = $Site.name
                "Path" = $webvdirectory.path
                "PhysicalPath" = $webvdirectory.physicalPath
                "PhysicalPathCredentials" = $webvdirectory.userName
            }

            $AllVDirs += $vdir
    } 
}

$AllVDirs
Run Code Online (Sandbox Code Playgroud)

现在您可以导出$AllVDirs为 Xml、Csv 或简单地将其打印到 PowerShell 主机。