So listen Sie virtuelle Verzeichnisse in IIS auf allen Websites in PowerShell auf

8

Ich habe eine vollständige Straßensperre erreicht und kann nicht herausfinden, wie die virtuellen Verzeichnisse für jede Website in gedruckt werden sollen IIS 8. Ich rufe immer wieder Anwendungen und leere Nullargumentfehler ab und finde einfach keinen Weg, die virtuellen Verzeichnisse zum Auflisten zu bringen.

Ich benötige die folgenden Daten, um die virtuellen Verzeichnisse aufzulisten:

  • Physischer Pfad
  • App Pool Association
  • Site-Name
  • Referenzen

Unten ist der Code, den ich verwendet habe und mit dem ich herumgespielt habe:

    *See revised code below*

Ich habe den Appcmd.exeBefehl auch verwendet, um zu versuchen, die virtuellen Verzeichnisse aufzulisten:

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

Aber ich bekomme immer noch nicht die Ausgabe, die ich brauche. Alles oder jede Hilfe wäre sehr dankbar! Vielen Dank!

BEARBEITEN#------------------------------------------------ ----------------------

Ich habe meine virtuellen Verzeichnisse aufgelistet, indem ich ein paar Zeilen auskommentiert habe, aber es werden nur der Name und das:

  • Physischer Pfad
  • App Pool Association
  • Site-Name
  • Referenzen

sind mir noch unbekannt, unten ist der überarbeitete Code:

  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
quelle
Sofern Sie ein virtuelles Verzeichnis nicht in eine Anwendung konvertieren, erbt es den Anwendungspool der Site. Suchen Sie auch nach virtuellen Verzeichnissen, die in Anwendungen konvertiert werden, sowie nach "normalen" virtuellen Verzeichnissen?
Jscott
$ jscott Ich möchte alle in IIS vorhandenen virtuellen Verzeichnisse und die oben aufgeführten Informationen ausdrucken .
user38725

Antworten:

12

Sie schreiben, dass Sie nicht herausfinden können, wie Sie abrufen können:

  • Physischer Pfad
    • ist direkt über das physicalPathnoteproperty zugänglich
  • App Pool Association
    • macht keinen Sinn, Anwendungen werden App-Pools zugewiesen, Verzeichnisse selbst nicht
  • Site-Name
    • Das weißt du schon ( $Site.name)
  • Referenzen
    • Ich nehme an, Sie möchten nur den Benutzernamen, falls vorhanden

Diese können alle mit geringfügigen Änderungen an Ihrem vorhandenen Skript abgerufen werden:

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

Jetzt können Sie $AllVDirsnach XML, Csv exportieren oder einfach auf dem PowerShell-Host drucken.

Mathias R. Jessen
quelle
2

Vielen Dank an Mathias R. Jessen, ich habe diesen Beitrag vergessen und hätte zurückkommen sollen, weil ich das meiste herausgefunden habe. Ihr Skript funktioniert perfekt und hier ist meins nur für S & Gs. Ich wusste nicht, dass ich nur die Objekte und Eigenschaften aufrufen musste.

$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 

            }

Sie haben jedoch auch ein anderes Problem und wussten nicht, ob Sie die Antwort hatten. Wie würde ich die Eigenschaft "Anmeldeinformationen für den physischen Pfad" für Webanwendungen aufrufen? Ich kann den Benutzernamen oder das Passwort nicht ausdrucken, aber ich kann die Anmeldemethode drucken, die dieselbe Eigenschaft verwendet. Unten ist mein Code für Webanwendungen, er ist meinem Code für virtuelle Verzeichnisse sehr ähnlich:

$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
quelle
Ich denke auch, wenn ich den $ Site.userName und das $ Site.password erhalte, sind sie für die Web-App nicht gleich?
user38725
0

Dadurch wird ein Array erstellt, das den Site-Namen, den Namen des virtuellen Verzeichnisses und den physischen Pfad des virtuellen Verzeichnisses enthält.

$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
Gefahr Maus
quelle