Cannot find path 'IIS:\Sites\ because it does not exist

This topic contains 1 reply, has 2 voices, and was last updated by  Don Jones 4 weeks, 1 day ago.

  • Author
    Posts
  • #79991

    Efff dd
    Participant

    hello
    I was hoping to add another server to my IIS environment running windows 2012r2 with Powershell 5.0.10586.117.
    my other servers are running Powershell 4.0.
    when I try to push out to the new server I get:
    VERBOSE: [WEB3]: [[cWebApplication]intranetdev_abc_com_subsitetest_Application] Setting Application Pool for Application subsitetest in site intranetdev.abc.com
    to intranetdev.abc.com
    Cannot find path 'IIS:\Sites\intranetdev.abc.com\subsitetest' because it does not exist.
    + CategoryInfo : ObjectNotFound: (IIS:\Sites\intr...com\subsitetest:) [], CimException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetItemPropertyCommand
    + PSComputerName : web3

    here is my webapplication.
    thanks

    
    function Get-TargetResource
    {
    	[CmdletBinding()]
    	[OutputType([System.Collections.Hashtable])]
    	param
    	(
    		[parameter(Mandatory = $true)] [System.String] $Site,
    		[parameter(Mandatory = $true)] [System.String] $Name,
    		[parameter(Mandatory = $true)] [System.String] $PhysicalPath,
            [parameter(Mandatory = $true)] [System.String] $ApplicationPool,
    		[ValidateSet("Present","Absent")] [System.String] $Ensure = 'Present',
    		[ValidateSet('PassThrough','NamedUser')] [System.String] $AuthenticationType = 'PassThrough',
            [System.String] $UserName = ''
    	)
        
        Write-Verbose "Application: $Site/$Name"
    
        #If there's no virtual directory to get, don't panic.
        $ExistingVirtual = Get-ItemProperty -Path "IIS:\Sites\$Site\$Name" -ErrorAction SilentlyContinue | Where-Object {$_.elementTagName -eq 'application'} #
        if ($ExistingVirtual)
        {
            if ($ExistingVirtual.userName -eq '') {$ExistingAuthType = 'PassThrough'} else {$ExistingAuthType='NamedUser'}
            
    
            Write-Verbose "Status: Present"
            Write-Verbose "PhysicalPath: $($ExistingVirtual.physicalPath)"
            Write-Verbose "ApplicationPool: $($ExistingVirtual.applicationPool)"
            Write-Verbose "UserName: $($ExistingVirtual.userName)"
            @{
                Site=$Site 
                Name=$Name 
                Ensure='Present'
                PhysicalPath=$ExistingVirtual.physicalPath
                ApplicationPool=$ExistingVirtual.applicationPool
                AuthenticationType=$ExistingAuthType 
                UserName = $ExistingVirtual.userName
            }
        }
        else 
        {
            Write-Verbose "Status: Absent"
            @{Site=$Site; Name=$Name; Ensure='Absent'}
        } 	
    }
    
    function Test-TargetResource
    {
    	[CmdletBinding()]
    	[OutputType([System.Boolean])]
    	param
    	(
    		[parameter(Mandatory = $true)] [System.String] $Site,
    		[parameter(Mandatory = $true)] [System.String] $Name,
    		[parameter(Mandatory = $true)] [System.String] $PhysicalPath,
            [parameter(Mandatory = $true)] [System.String] $ApplicationPool,
    		[ValidateSet("Present","Absent")] [System.String] $Ensure = 'Present',
    		[ValidateSet('PassThrough','NamedUser')] [System.String] $AuthenticationType = 'PassThrough',
            [System.String] $UserName = ''
    	)
        
        Write-Verbose "Getting Target Resource"
        $Resource = Get-TargetResource -Site $Site -Name $Name -PhysicalPath $PhysicalPath -ApplicationPool $ApplicationPool
        Write-Verbose "Got Target Resource: $($Resource.Name)"
        if ($Resource.Ensure -ne $Ensure) 
        {
            Write-Verbose "Site: $Site"
            Write-Verbose "Name: $Name"
            Write-Verbose "Existing Application state $($Resource.Ensure) does not match $Ensure"
            return $false
        }
        if ($Resource.Ensure -eq 'Present') #Only Check additional properties if the Virtual Directory exists.
        {
            if ($Resource.PhysicalPath -ne $PhysicalPath) 
            {
                Write-Verbose "Site: $Site"
                Write-Verbose "Name: $Name"
                Write-Verbose "Existing Physical Path '$($Resource.PhysicalPath)' does not match '$PhysicalPath'"
                return $false
            }
            if ($Resource.ApplicationPool -ne $ApplicationPool) 
            {
                Write-Verbose "Site: $Site"
                Write-Verbose "Name: $Name"
                Write-Verbose "Existing Application Pool '$($Resource.ApplicationPool)' does not match '$ApplicationPool'"
                return $false
            }
            if ($Resource.AuthenticationType -ne $AuthenticationType) 
            {
                Write-Verbose "Site: $Site"
                Write-Verbose "Name: $Name"
                Write-Verbose "Physical Path: $PhysicalPath"
                Write-Verbose "Authentication Type of $($Resource.AuthenticationType) does not match $AuthenticationType"
                return $false
            }
            if ($Resource.UserName-ne $UserName) 
            {
                Write-Verbose "Site: $Site"
                Write-Verbose "Name: $Name"
                Write-Verbose "Physical Path: $PhysicalPath"
                Write-Verbose "Authentication Type: $AuthenticationType"
                Write-Verbose "User Name of $($Resource.UserName) does not match $UserName"
                return $false
            }
        }
        #If there are no issues, return $true.
        $true
    }
    
    function Set-TargetResource
    {
    	[CmdletBinding()]
    	param
    	(
    		[parameter(Mandatory = $true)] [System.String] $Site,
    		[parameter(Mandatory = $true)] [System.String] $Name,
    		[parameter(Mandatory = $true)] [System.String] $PhysicalPath,
            [parameter(Mandatory = $true)] [System.String] $ApplicationPool,
    		[ValidateSet("Present","Absent")] [System.String] $Ensure = 'Present',
    		[ValidateSet('PassThrough','NamedUser')] [System.String] $AuthenticationType = 'PassThrough',
            [System.String] $UserName = ''
    	)
    
        $Resource = Get-TargetResource -Site $Site -Name $Name -PhysicalPath $PhysicalPath -ApplicationPool $ApplicationPool
        
        
        if ($Ensure -eq 'Present')
        {
            if ($Resource.Ensure -ne 'Present' ) #If the Virtual Directory doesn't exist.
            {
                Write-Verbose "Creating new Application $Name in site $Site to path $PhysicalPath"
                New-WebApplication -Site $Site -Name $Name -PhysicalPath $PhysicalPath  -ApplicationPool $ApplicationPool
            }
            elseif ($Resource.PhysicalPath -ne $PhysicalPath) #If it exists but the path is wrong, delete and recreate
            {
                Write-Verbose "Removing Application $Name in site $Site"
                Remove-WebApplication -Site $site -Name $name
                Write-Verbose "Creating new Application $Name in site $Site to path $PhysicalPath"
                New-WebApplication -Site $Site -Name $Name -PhysicalPath $PhysicalPath -ApplicationPool $ApplicationPool
            }
    
            if ($Resource.ApplicationPool -ne $ApplicationPool) 
            {
                Write-Verbose "Setting Application Pool for Application $Name in site $Site to $ApplicationPool"
                set-ItemProperty -Path "IIS:\Sites\$Site\$Name" -Name applicationPool -Value $ApplicationPool
            } 
    
    
            if (($AuthenticationType -eq 'PassThrough') -and ($Resource.AuthenticationType -ne $AuthenticationType)) 
            {
                Write-Verbose "Removing UserName from Application $Name in site $Site to set Pass-Through Authentication."
                set-ItemProperty -Path "IIS:\Sites\$Site\$Name" -Name userName -Value '' #Null Username is how you set passthrough
            } 
            if (($AuthenticationType -eq 'NamedUser')   -and ($Resource.UserName-ne $UserName)) 
            {
                Write-Verbose "Setting UserName $UserName on Application $Name in site $Site and disabling Pass-Through Authentication."
                set-ItemProperty -Path "IIS:\Sites\$Site\$Name" -Name userName -Value $UserName #Setting password is not supported yet
            } 
        }
    
        else #if ($Ensure -eq 'Absent')
        {
            Write-Verbose "Removing virtual directory $Name in site $Site"
            Remove-WebApplication -Site $site -Name $name
        }
    
    
    }
    
    Export-ModuleMember -Function *-TargetResource
    
    
  • #80107

    Don Jones
    Keymaster

    Have you confirmed that WebAskinistation is present and loadable?

You must be logged in to reply to this topic.