2016-02-05 73 views
0

我编辑我的PowerShell脚本,它突然开始给我奇怪的错误:术语“-replace”不被识别为cmdlet,函数,脚本文件或可操作的程序的名称

-replace : The term '-replace' is not recognized as the name of a cmdlet, function, script file, or operable program

-Get-TfsItemHistory : The term 'Get-TfsItemHistory' is not recognized as the name of a cmdlet, function, script file, or operable program

我就明白了第二个错误,但-replace?真奇怪。

GET-TfsItemHistory中引用的文件中使用VersionsCache.ps1

Script.ps1:

#For all projects, that has been changed since last build updates [AssemblyVersion], [AssemblyFileVersion], and [AssemblyInformationalVersion], attributes in all assemblyinfo.cs files. 
    $rootDir = "C:\Projects\UI\Evis\Dev" 
    $version = "2.0.0" 
    $buildType = "beta" 
    $currentChangeset = 1789 
    $versionsCacheFile ="C:\Projects\UI\Evis\versionsCache.txt" 

. "$rootDir\VersionsCache.ps1" 

$projects = Get-ChildItem "$rootDir\*.csproj" -Recurse; 



function UpdateAssemblyInfo{ 
    Param ([string]$dir, [string]$assemblyVersion, [string]$assemblyInformationalVersion) 

    $assemblyVersionPattern = 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' 
    $assemblyFileVersionPattern = 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' 
    $assemblyInformationalVersionPattern = 'AssemblyInformationalVersion\(.*\)' 

    $newVersion = 'AssemblyVersion("' + $assemblyVersion + '")'; 
    $newFileVersion = 'AssemblyFileVersion("' + $assemblyVersion + '")'; 
    $newInformationalVersion = 'AssemblyInformationalVersion("' + $assemblyInformationalVersion + '")'; 

    $assemblyInfoFile = Get-ChildItem $dir -Filter assemblyinfo.cs -Recurse -Depth 1 
    $assemblyInfoContent = (Get-Content $assemblyInfoFile.FullName) 
     -replace $assemblyVersionPattern, $newVersion 
     -replace $assemblyFileVersionPattern, $newVersion 


    if ($assemblyInfoContent -match $assemblyInformationalVersionPattern) 
    { 
     $assemblyInfoContent = $assemblyInfoContent -replace $assemblyInformationalVersionPattern, $newInformationalVersion 
    } 
    else{ 
     $assemblyInfoContent = $assemblyInfoContent + "`r`n[assembly: $newInformationalVersion]" 
    } 


    $assemblyInfoContent| Out-File $assemblyInfoFile.FullName 
} 


$publishedChangesetsCache = Load-Versions $versionsCacheFile 

foreach ($project in $projects) 
{ 
    $projectDir = $project.Directory.FullName; 

    $assemblyInfo = Get-ChildItem $projectDir -Filter assemblyinfo.cs -Recurse -Depth 1 | select -First 1 

    Write-Host $projectDir -NoNewLine 

    $publishedChangesets = GetpublishedChangesets -dir $projectDir -publishedChangesetsCache $publishedChangesetsCache 
    $latestChangesetId = GetLatestChangeset $dir 
    Write-Host "changeset: $latestChangesetId" 

    if (IsChangedSinceLastBuild $latestChangesetId $publishedChangesets){ 
     $publishedChangesets.Insert(0,$currentChangeset) 
    } 
    $changesetToPublish = $publishedChangesets[0] 

    $informationalVersion = "$version.$changesetToPublish" 
    if ($buildType -ne ""){ 
     $informationalVersion = "$version-$buildType$changesetToPublish" 
    } 
    UpdateAssemblyInfo $projectDir -assemblyVersion "$version.$changesetToPublish" -assemblyInformationalVersion $informationalVersion 
} 



Save-Versions $publishedChangesetsCache -file versionsCacheFile 

我想我有一些语法错误,因为它昨天,但我想不通在哪里。

回答

1

您需要添加反引号,如果你想提出一个新的行-replace声明:

$assemblyInfoContent = (Get-Content $assemblyInfoFile.FullName) ` 
      -replace $assemblyVersionPattern, $newVersion ` 
      -replace $assemblyFileVersionPattern, $newVersion 

或者只是把它写在一行...

相关问题