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

我碰到了一个完整的障碍,不知道如何打印IIS 8每个网站的虚拟目录。 我不断检索应用程序,并清空空参数错误,只是找不到一个方法来获取虚拟目录列出。

我需要以下数据列出虚拟目录:

  • 物理path
  • 应用程序池关联
  • 网站名称
  • 证书

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

  *See revised code below* 

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

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

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

编辑# – – – – – – – – – – – – – – – – – – – – – – – – ———————-

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

  • 物理path
  • 应用程序池关联
  • 网站名称
  • 证书

对我来说还是未知的,下面是修改后的代码:

  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 } 

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

  • 物理path
    • 可以通过physicalPath noteproperty直接访问
  • 应用程序池关联
    • 没有意义, 应用程序分配给应用程序池,目录本身不是
  • 网站名称
    • 你已经知道这个( $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 -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主机

谢谢@Mathias R. Jessen,我忘了这个post,我应该回来,因为我想到了大部分内容。 你的脚本工作完美,这里是我的S&Gs,没有意识到我所要做的只是调用对象和属性。

 $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应用程序的物理path凭据属性? 我不能打印出用户名或密码,但我可以打印使用相同属性的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 } } 

这将创build一个包含站点名称,虚拟目录名称和虚拟目录物理path的arrays。

 $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