我完全陷入了困境,无法弄清楚如何打印出每个网站的虚拟目录IIS 8
。我不断检索应用程序和空参数错误,但就是找不到办法列出虚拟目录。
我需要以下数据来列出虚拟目录:
- 物理路径
- 应用程序池关联
- 网站名称
- 证书
下面是我一直在使用和摆弄的代码:
*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
}
答案1
您写道,您不知道如何检索:
- 物理路径
- 可通过
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 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
}
}
答案3
这将创建一个包含站点名称、虚拟目录名称和虚拟目录物理路径的数组。
$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