无法提交配置更改,因为磁盘上的文件已更改

时间:2017-06-15 11:25:23

标签: asp.net powershell iis

我想有一个可以创建IIS网站的powershell脚本。 但是我收到了错误

  

New-IISSite:文件名:   \?\ C:\ Windows \ system32 \ inetsrv \ config \ applicationHost.config错误:   无法提交配置更改,因为文件已更改   磁盘在C:\ projects \ salonsecretSrc \ RegisterWebSite.ps1:38 char:9   + New-IISSite -BindingInformation $ strIssBindigFormat -Name $ st ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~       + CategoryInfo:NotSpecified:(:) [New-IISSite],FileLoadException       + FullyQualifiedErrorId:System.IO.FileLoadException,Microsoft.IIS.Powershell.Commands.NewIISSiteComman

这是我的剧本:

$strCurrentPath = $MyInvocation.MyCommand.Path
$strWebSiteFolder = Get-ChildItem (dir $strCurrentPath)
$strWebSiteBindingPath = $strWebSiteFolder.Directory.FullName+"\build\WebSite"
$strCurrentFolderName = $strWebSiteFolder.Directory.Name
$strIssSiteName = "$strCurrentFolderName.local"
$strIssBindigFormat = ":80:$strIssSiteName"

Write-Host "Current Script path: $strCurrentPath"
Write-Host "IIS Web Site phycical path: $strWebSiteBindingPath"
Write-Host "IIS SiteName: $strIssSiteName"
Write-Host "IIS Bindindg Format: $strIssBindigFormat"
Write-Host "Creating App Pool - $strIssSiteName"
        New-WebAppPool -Name $strIssSiteName -Force
        Write-Host "Creating Web Site Pool - $strIssSiteName"
        New-IISSite -BindingInformation $strIssBindigFormat -Name $strIssSiteName -PhysicalPath "$strWebSiteBindingPath" -Force
        Write-Host "Mapping Pull and Web Site - $strIssSiteName"
        Set-ItemProperty "IIS:\Sites\$strIssSiteName" -name applicationPool -value $strIssSiteName
        Write-Host "$strIssSiteName WebSite Created"

如何解决可能存在的问题?

它可以第一次创建一个网站但第二次如果我手动删除它会出现此错误。

2 个答案:

答案 0 :(得分:1)

有许多不同的东西可以锁定applicationHost.config文件并导致诸如New-IISSite之类的powershell命令失败。

在这种情况下,您提到您手动删除了站点,因此您可能仍然打开IIS管理器并锁定该文件。我建议关闭IIS管理器。

正如本blog post on Powershell and IIS所述,Octopus Deploy的制造商发现,解决文件锁定问题的唯一可靠解决方案是在try-catch块中包装任何文件更改命令,如New-WebAppPool并多次重试这些操作。可以在博客中找到执行此操作的函数的源代码。

答案 1 :(得分:1)

New-IISSite 命令似乎发生了一些非常棘手的事情。我最终回到新网站(通过 WebAdmistration 模块),所有问题都消失了。