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


8

我遇到了一个完整的障碍,无法弄清楚如何为中的每个网站打印虚拟目录IIS 8。我一直在检索应用程序,并清空null参数错误,只是找不到一种方法来列出虚拟目录。

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

  • 物理路径
  • 应用程序池协会
  • 网站名称
  • 证书

以下是我一直在使用并弄乱的代码:

    *See revised code below*

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

C:\Windows\System32\inetsrv\appcmd.exe LIST VDIRS

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

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

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

  • 物理路径
  • 应用程序池协会
  • 网站名称
  • 证书

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

  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 

            }

除非您将虚拟目录转换为应用程序,否则它将继承站点的应用程序池。您是否还在寻找可转换为应用程序的虚拟目录以及“常规”虚拟目录?
jscott 2014年

$ jscott我希望打印出IIS中存在的所有虚拟目录,并在顶部列出指定的信息。
user38725 2014年

Answers:


12

您写道,您不知道如何检索:

  • 物理路径
    • 可通过physicalPath笔记属性直接访问
  • 应用程序池协会
    • 没有意义,应用程序分配给了应用程序池,目录本身没有
  • 网站名称
    • 您已经知道这个($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

现在,您可以导出$AllVDirs到Xml,Csv或仅将其打印到PowerShell主机。


2

谢谢@Mathias R. Jessen,我忘记了这篇文章,我应该回来了,因为我已经弄清楚了大部分内容。您的脚本运行完美,这只是S&G的工具,我没有意识到我要做的就是调用对象和属性。

$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] "::: is the Virtual Directory" -ForegroundColor Green
                                        Write-Host $webvdirectory.physicalPath   
                                        Write-Host $webvdirectory.userName                                         
                                        Write-Host $webvdirectory.password
                                        Write-Host $webvdirectory.logonMethod
                                    } 
                            #Write-Host $VDir 

            }

但是也有另一个问题,并且不知道您是否有答案,我该如何调用Web应用程序的“物理路径”凭据属性?我无法打印出用户名或密码,但是可以打印使用相同属性的logonMethod?下面是我的Web应用程序代码,它与我的虚拟目录代码非常相似:

$Websites = Get-ChildItem IIS:\Sites 
    foreach($Site in $Websites)
            { 
             $webapps = Get-WebApplication -Site $Site.name 
                    foreach($webapp in $webAPPS)
                        {
                        Write-Host $webapp.applicationPool
                        Write-Host $WebApp.virtualDirectoryDefaults.userName
                        Write-Host $webapp.virtualDirectoryDefaults.password
                        Write-Host $webapp.virtualDirectoryDefaults.logonMethod
                        $webapp2 = $webapp.path
                        Write-Host $WebApp2.split("/")[-1] "::: is the Web Application" -ForegroundColor Green

                        } 
            }

我还在想,如果我获得了$ Site.userName和$ Site.password,它们对于Web App是否会相同?
user38725 2014年

0

这将创建一个包含站点名称,虚拟目录名称和虚拟目录物理路径的数组。

$SiteVirtualDirectories = @()
$Sites = gci IIS:\Sites
foreach($Site in $Sites)
    {
    $VirtualDirectories = gci "IIS:\Sites\$($Site.Name)" | ?{$_.NodeType -match "virtualDirectory"}
    foreach($VirtualDirectory in $VirtualDirectories)
        {
        $SiteVirtualDirectories += @([pscustomobject]@{Site=$Site.Name;VirtualDirectory=$VirtualDirectory.Name;PhysicalPath=$VirtualDirectory.PhysicalPath})
        }
    }
Write-Host $SiteVirtualDirectories
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.