"Cannot create a file" error when running Start-Website command in Powershell

41

Currently I'm trying to run this powershell script:

Param (
    $websiteName,
    $physicalPath
)

import-module WebAdministration
$website = get-website | where-object { $_.name -eq "$websiteName" }
if($website -eq $null){
    New-webapppool -Name "$websiteName"
    Set-WebConfiguration -filter "/system.applicationHost/applicationPools/add[@name='$websiteName']" -PSPath IIS:\ -value (@{managedRuntimeVersion="v4.0"})
    New-website -Name "$websiteName" -PhysicalPath "$physicalPath" -ApplicationPool "$websiteName"
    start-website "$websiteName"
}

I use the following command to run the script:

& .\InstallWebsite.ps1 -websiteName "MyWebsite" -physicalPath "C:\TEST\MyWebsite"

Everything works fine, except for the last command inside of the if statement:

start-website "$websiteName"

When that command runs, I receive the following error, which I haven't been able to successfully troubleshoot:

Start-Website : Cannot create a file when that file already exists. (Exception from HRESULT: 0x800700B7)
At line:1 char:14
+ start-website <<<<  "MyWebsite"
    + CategoryInfo          : InvalidOperation: (:) [Start-Website], COMException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.IIs.PowerShell.Provider.StartWebsiteCommand

I also have the following script to remove the website if it matters:

Param (
    $websiteName,
    $appPoolName
)

import-module WebAdministration
$website = get-website | where-object { $_.name -eq "$websiteName" }
if($website -ne $null){
    remove-website -Name "$websiteName"
    remove-webapppool -Name "$websiteName"
}

I run it with the following command:

& .\UninstallWebsite.ps1 -websiteName "MyWebsite" -appPoolname "MyWebsite"
powershell
iis-7
asked on Stack Overflow Jun 22, 2012 by Jarrett Coggin

4 Answers

71

The error message:

Start-Website : Cannot create a file when that file already exists.

...usually means that you have a bindings conflict where there is already a site running on the same IP address, port and if you're using them, host header.

I'd check your new site bindings in IIS MMC then find out if something else is using exactly the same bindings.

answered on Stack Overflow Jun 23, 2012 by Kev
0

Without any websites in the IIS configuration, the same error occurred. Reason were additional, old records at the end of applicationHost.config. None of these were visible in IIS Manager. After removing these XML records, the problem was solved.

answered on Stack Overflow May 12, 2018 by cskwg
0

Enable detailed error trace to find the reason. In my case, it was a mimeType element that duplicated a default one.

answered on Stack Overflow Feb 1, 2019 by Der_Meister
0

I've got a problem with the same error. This happens when i'm trying to Add-WebBinding to my IIS site remotely, using Invoke-Command from different agent machines at time.

It's worked for me, maybe it helps someone too:

$Mutex = New-Object -TypeName System.Threading.Mutex($false, "Global\Mutex")    
if ($Mutex.WaitOne(300000)) {
   #For example
   #$Command = {
        #New-WebBinding -name $iis_site_name -Protocol https -HostHeader             
           #$iis_host_name -Port 443 -SslFlags 1
   #}
   #Invoke-Command -Command $Command
} else {
   Write-Warning "Timed out acquiring mutex!"
}
    
$Mutex.Dispose()
answered on Stack Overflow Aug 5, 2020 by aggrosparrow

User contributions licensed under CC BY-SA 3.0