所以我正在尝试编写一个Powershell脚本,该脚本将使用另一个xml文件(Web.config)中的模式更新xml文件中的版本以用于几个Web项目。让我说明一下我的意思。
版本是4个以句点分隔的数字(1.0.0.5,1.0.1.0等)。我想根据看起来像/[0-2].[0-2].[0-2].[0-2]/的模式自动化部署的增量。基本上是相同的,除了每个地方的值只能是0,1或2.值具有以下含义......
0 - 不要在此位置更改版本号
1 - 在此位置增加版本号
2 - 用
替换此位置的版本号例如,如果我的版本号为1.0.0.8
且架构为0.0.1.2
,我想将版本号转换为1.0.1.0
这是我必须做的Powershell功能...
FUNCTION Increment-Version($path, $incrementSchema)
{
# PATH IS PATH TO WEB PROJECT ROOT, INCREMENTSCHEMA IS THE SCHEMA
#GET CURRENT APP VERSION
$projXml = New-Object XML
$projXml.Load($path)
$projXml.AppVersions.AppVersion.Version -match '(\d+)\.(\d+)\.(\d+)\.(\d+)'
#VERSION MATCH IS NOW THE MATCHES VARIABLE FOR THE CURRENT PROJECT VERSION
$versionMatch = $matches
#EXTRACT SCHEMA
$incrementSchema -match '(\d+)\.(\d+)\.(\d+)\.(\d+)'
#SCHEMAMATCH IS NOW THE INCREMENT SCHEMA MATCH OBJECT
$schemaMatch = $matches
#ITERATE THROUGH ALL POSITIONS IN VERSION AND SCHEMA, THEY HAVE THE SAME
for ($i = 1; $i -lt 5; $i++)
{
switch ($schemaMatch[$i])
{
0 {
#HERE I WANT TO LEAVE THE $ITH POSITION OF THE VERSION ALONE
}
1 {
#HERE I WANT OT INCREMENT THE $ITH POSITION OF THE VERISON BY 1
}
2 {
#HERE I WANT TO SET $ITH POSITION OF VERSION TO 0
}
default {}
}
}
# CODE TO SAVE VERSION XML FILE, ETC
}
我对如何实现案例逻辑有点迷失,我需要做的是根据在同一索引处找到的架构号替换版本的相关位置。
答案 0 :(得分:1)
'1.0.0.8' -match '(\d+)\.(\d+)\.(\d+)\.(\d+)'
$versionMatch = $matches
'0.0.1.2' -match '(\d+)\.(\d+)\.(\d+)\.(\d+)'
$schemaMatch = $matches
$NewVersion = ""
for ($i = 1; $i -lt 5; $i++)
{
switch ($schemaMatch[$i])
{
0 {
$NewVersion = $NewVersion,$versionMatch[$i] -join '.'
}
1 {
$NewVersion = $NewVersion,(1 + $versionMatch[$i]) -join '.'
#Try "1"+1 in PS, what do you get? A: "11" - String concatenation
#Try 1+"1" in PS, what do you get? A: 2 - Integer addition
#$versionMatch[$i] is a string; so to add 1 you need PS to see that you want to add numbers and not string concatenation.
#There's a term for this; I don't know what it's called.
}
2 {
$NewVersion = $NewVersion,"0" -join '.'
}
default {}
}
}
$NewVersion = $NewVersion.SubString(1) #Remove the leading "."
Write-Output $NewVersion
它并不完美,但这是一个有趣的思想问题。