Comment répertorier les répertoires virtuels dans IIS à partir de tous les sites Web dans PowerShell

8

J'ai atteint un barrage routier complet et je ne sais pas comment imprimer les répertoires virtuels pour chaque site Web en IIS 8. Je continue à récupérer des applications et des erreurs d'argument nul vide et je ne trouve tout simplement pas un moyen d'obtenir la liste des répertoires virtuels.

J'ai besoin des données suivantes pour répertorier les répertoires virtuels:

  • Chemin physique
  • Association du pool d'applications
  • Nom du site
  • Identifiants

Vous trouverez ci-dessous le code que j'ai utilisé et joué avec:

    *See revised code below*

J'ai également utilisé la Appcmd.execommande pour essayer de répertorier les répertoires virtuels:

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

Mais je n'obtiens toujours pas la sortie dont j'ai besoin. Tout ou toute aide serait très appréciée! Merci!

ÉDITER#------------------------------------------------ ----------------------

J'ai mes répertoires virtuels à énumérer en commentant quelques lignes, mais cela n'imprime que le nom et le:

  • Chemin physique
  • Association du pool d'applications
  • Nom du site
  • Identifiants

me sont encore inconnus, voici le code révisé:

  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 

            }
user38725
la source
À moins que vous convertissiez un répertoire virtuel en application, il hérite du pool d'applications du site. Recherchez-vous également des répertoires virtuels convertis en applications ainsi que des répertoires virtuels "normaux"?
jscott
$ jscott Je cherche à imprimer tous les répertoires virtuels qui existent dans IIS et les informations spécifiées que j'ai répertoriées en haut.
user38725

Réponses:

12

Vous écrivez que vous ne savez pas comment récupérer:

  • Chemin physique
    • est directement accessible via la physicalPathpropriété de la note
  • Association du pool d'applications
    • n'a pas de sens, les applications sont affectées à des pools d'applications, les répertoires eux-mêmes ne sont pas
  • Nom du site
    • Vous le savez déjà ( $Site.name)
  • Identifiants
    • Je suppose que vous voulez juste le nom d'utilisateur s'il est présent

Ceux-ci pourraient tous être récupérés avec quelques légères modifications à votre script existant:

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

Vous pouvez maintenant exporter $AllVDirsvers Xml, Csv ou simplement l'imprimer sur l'hôte PowerShell.

Mathias R. Jessen
la source
2

Merci @Mathias R. Jessen, j'ai oublié ce message et j'aurais dû revenir parce que j'ai compris la plupart du temps. Votre script fonctionne parfaitement et voici le mien juste pour les S&G, je ne savais pas que tout ce que j'avais à faire était d'appeler les objets et les propriétés.

$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 

            }

J'ai également un autre problème et je ne savais pas si vous aviez la réponse, comment puis-je appeler la propriété des informations d'identification du chemin physique pour les applications Web? Je ne peux pas imprimer le nom d'utilisateur ou le mot de passe, mais je peux imprimer le logonMethod qui utilise la même propriété? ci-dessous est mon code pour les applications web, il est très similaire à mon code de répertoires virtuels:

$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

                        } 
            }
user38725
la source
Je pense également que si j'obtiens $ Site.userName et $ Site.password, ne seraient-ils pas les mêmes pour l'application Web?
user38725
0

Cela créera un tableau contenant le nom du site, le nom du répertoire virtuel et le chemin physique du répertoire virtuel.

$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
Danger Mouse
la source