2017-06-15 83 views
0

我想要一个可以创建IIS网站的PowerShell脚本。 但我得到错误无法提交配置更改,因为磁盘上的文件已更改

New-IISSite : Filename: \?\C:\Windows\system32\inetsrv\config\applicationHost.config Error: Cannot commit configuration changes because the file has changed on disk At 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" 

这可能是一个问题,如何解决?

它可以创建一个网站的第一次,但第二次,如果我手动删除它会得到这个错误。

回答

0

有许多不同的事情可以锁定applicationHost.config文件并导致像New-IISSite这样的PowerShell命令失败。

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

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