Cómo enumerar los directorios virtuales en IIS de todos los sitios web en PowerShell


8

Llegué a un obstáculo completo y no puedo entender cómo imprimir los directorios virtuales para cada sitio web IIS 8. Sigo recuperando aplicaciones y errores de argumentos nulos vacíos y simplemente no puedo encontrar una forma de evitar que los directorios virtuales aparezcan en la lista.

Necesito los siguientes datos para enumerar sobre los directorios virtuales:

  • Camino físico
  • Asociación de grupos de aplicaciones
  • Nombre del sitio
  • Cartas credenciales

A continuación se muestra el código que he estado usando y jugando:

    *See revised code below*

También he usado el Appcmd.execomando para intentar y enumerar los directorios virtuales:

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

Pero todavía no obtengo el resultado que necesito. ¡Cualquier cosa o ayuda sería muy apreciada! ¡Gracias!

EDITAR#------------------------------------------------ ----------------------

Tengo que enumerar mis directorios virtuales comentando un par de líneas, pero solo imprime el nombre y el:

  • Camino físico
  • Asociación de grupos de aplicaciones
  • Nombre del sitio
  • Cartas credenciales

todavía son desconocidos para mí, a continuación se muestra el código revisado:

  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 

            }

A menos que convierta un directorio virtual en una aplicación, hereda el grupo de aplicaciones del sitio. ¿También está buscando directorios virtuales que se convierten en aplicaciones, así como directorios virtuales "normales"?
jscott

$ jscott Estoy buscando imprimir todos los directorios virtuales que existen en IIS y la información especificada que enumeré en la parte superior.
user38725

Respuestas:


12

Escribe que no puede encontrar la forma de recuperar:

  • Camino físico
    • es directamente accesible a través de la physicalPathpropiedad note
  • Asociación de grupos de aplicaciones
    • no tiene sentido, las aplicaciones se asignan a grupos de aplicaciones, los directorios en sí mismos no
  • Nombre del sitio
    • Ya lo sabes ( $Site.name)
  • Cartas credenciales
    • Supongo que solo quieres el nombre de usuario si está presente

Todo esto podría recuperarse con algunas pequeñas modificaciones en su script existente:

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

Ahora puede exportar $AllVDirsa Xml, Csv o simplemente imprimirlo en el host de PowerShell.


2

Gracias @Mathias R. Jessen, olvidé esta publicación y debería haber regresado porque descubrí la mayor parte. Su guión funciona perfecto y aquí está el mío solo para S&G, no me di cuenta de que todo lo que tenía que hacer era recurrir a los objetos y propiedades.

$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 

            }

Sin embargo, también tengo otro problema y no sabía si tenía la respuesta, ¿cómo llamaría a la propiedad de credenciales Ruta física para aplicaciones web? No puedo imprimir el nombre de usuario o la contraseña, pero puedo imprimir el método de inicio de sesión que utiliza la misma propiedad. a continuación está mi código para aplicaciones web, es muy similar al código de mi directorio virtual:

$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

                        } 
            }

También estoy pensando si obtengo $ Site.userName y $ Site.password, ¿no serían lo mismo para la aplicación web?
user38725

0

Esto creará una matriz que contiene el Nombre del sitio, el Nombre del directorio virtual y la Ruta física del directorio virtual.

$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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.