PowerShell의 모든 웹 사이트에서 IIS의 가상 디렉터리를 나열하는 방법


8

전체로드 블록에 도달했으며의 각 웹 사이트에 대한 가상 디렉토리를 인쇄하는 방법을 알 수 없습니다 IIS 8. 응용 프로그램을 계속 검색하고 null 인수 오류를 비우고 가상 디렉토리를 나열하는 방법을 찾을 수 없습니다.

가상 디렉토리에 대해 나열하려면 다음 데이터가 필요합니다.

  • 물리적 경로
  • 앱 풀 협회
  • 사이트 이름
  • 신임장

아래는 내가 사용하고 엉망인 코드입니다.

    *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 

            }

가상 디렉터리를 응용 프로그램으로 변환하지 않으면 사이트의 응용 프로그램 풀이 상속됩니다. 또한 "일반"가상 디렉터리뿐만 아니라 응용 프로그램으로 변환 된 가상 디렉터리를 찾고 있습니까?
jscott

$ jscott IIS에 존재 하는 모든 가상 디렉터리와 맨 위에 나열된 지정된 정보 를 인쇄 하려고합니다.
user38725

답변:


12

검색 방법을 알 수 없다고 씁니다.

  • 물리적 경로
    • physicalPathnoteproperty를 통해 직접 액세스 할 수 있습니다
  • 앱 풀 협회
    • 이해가되지 않습니다. 응용 프로그램응용 프로그램 풀에 할당되고 디렉토리 자체가
  • 사이트 이름
    • 당신은 이미 이것을 알고 있습니다 ( $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

이제 $AllVDirsXml, 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 

            }

또한 다른 문제가 있지만 답이 있는지 몰랐다면 웹 응용 프로그램의 실제 경로 자격 증명 속성을 어떻게 호출합니까? 사용자 이름이나 비밀번호를 인쇄 할 수 없지만 같은 속성을 사용하는 logonMethod를 인쇄 할 수 있습니까? 아래는 웹 응용 프로그램 용 코드이며 가상 디렉터리 코드와 매우 유사합니다.

$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

                        } 
            }

또한 $ Site.userName과 $ Site.password를 얻는다면 웹 응용 프로그램과 동일하지 않을 것이라고 생각합니다.
user38725

0

사이트 이름, 가상 디렉터리 이름 및 가상 디렉터리 실제 경로가 포함 된 배열이 만들어집니다.

$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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.