2015-06-18 3 views
0

У меня есть сценарий PowerShell, который предназначен для изменения преобразования веб-конфигурации в качестве события предварительной сборки в определении построения. Я получил его работу по большей части, однако, когда он идет, чтобы сохранить обновленный файл, я получаю отказ в доступе.Сохранить файл в разрешении скрипта PowerShell denied

Есть ли способ дать правильный доступ, не открывая окно, так как это делается с помощью агента сборки TFS?

Вот сценарий:

param(
[string]$buildTarget="Dev", 
[string]$projectName="SalesTools" 
) 

$VerbosePreference = "continue" 

Write-Verbose "Params: buildTarget = '$($buildTarget)', projectName = '$($projectName)'" 

# Make sure path to source code directory is available 
if (-not $Env:TF_BUILD_SOURCESDIRECTORY) 
{ 
    Write-Error ("TF_BUILD_SOURCESDIRECTORY environment variable is missing.") 
    exit 1 
} 
elseif (-not (Test-Path $Env:TF_BUILD_SOURCESDIRECTORY)) 
{ 
    Write-Error "TF_BUILD_SOURCESDIRECTORY does not exist: $Env:TF_BUILD_SOURCESDIRECTORY" 
    exit 1 
} 
Write-Verbose "TF_BUILD_SOURCESDIRECTORY: $Env:TF_BUILD_SOURCESDIRECTORY" 

$webConfig = "$($Env:TF_BUILD_SOURCESDIRECTORY)\$($buildTarget)\SalesTools.Web\$($projectName)\web.$($buildTarget).config" 
#$webConfig = "$($Env:TF_BUILD_SOURCESDIRECTORY)\$($buildTarget)\SalesTools.Web\ARCTools\web.$($buildTarget).config" 

Write-Verbose "File Path: $($webConfig)" 

$doc = (gc $webConfig) -as [xml] 

$versionNumber = $doc.SelectSingleNode('//appSettings/add[@key="versionNumber"]/@value').'#text' 

Write-Verbose "Current Version Number: $($versionNumber)" 

if (($versionNumber)) 
{ 
    $versionInfo = $versionNumber.Split(".") 

    $versionIteration = $versionInfo[1] 
    $minorVersion = $versionInfo[2] -as [int] 

    $minorVersion = $minorVersion + 1 

    $currentIteration = Get-Iteration 

    $newVersionInfo = ("v: 1.$($currentIteration).$($minorVersion)") 
} 
else 
{ 
    Write-Error "Could not get version info from config." 
    exit 1 
} 

$doc.SelectSingleNode('//appSettings/add[@key="versionNumber"]/@value').'#text' = $newVersionInfo 

$doc.Save($webConfig) 

ответ

0

Перед прочтением & Обновлять web.config, попробуйте изменить «только для чтения» атрибут файла web.config. Поскольку по умолчанию все исходные файлы являются «Только для чтения».

Добавьте эту строку перед "$ док = ....":

Attrib -R $ WebConfig/S

Смежные вопросы