【问题标题】:Cannot commit configuration changes because the file has changed on disk无法提交配置更改,因为磁盘上的文件已更改
【发布时间】:2017-06-15 11:25:23
【问题描述】:

我想要一个可以创建 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"

有什么问题怎么解决?

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

【问题讨论】:

    标签: asp.net powershell iis


    【解决方案1】:

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

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

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

    【讨论】:

    • 这实际上对我来说似乎是错误的。第一次运行 New-IISSite 命令时,它会抱怨 applicationHost 配置文件。然后所有后续运行它会认为该站点已经创建(但它不是)。只有通过刷新 powershell 会话,这似乎才能重置。
    【解决方案2】:

    New-IISSite 命令似乎真的很奇怪。我最终退回到新网站(通过 WebAdmistration 模块),所有问题都消失了。

    【讨论】:

      猜你喜欢
      • 2019-11-24
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      相关资源
      最近更新 更多