Reputation: 523
It should be ok to add all the variables as global inside the function? All the other functions will receive them? I did a short test and it should work. Should I need to add Get-Variable -ValueOnly...?
$ReleaseVersion = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).ReleaseVersion
$Sourceversion = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).Sourceversion
$LinkForVersion = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).LinkForVersion
$VersionNumber = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).VersionNumber
$buildver = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).buildver
$PipelineID = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).PipelineID
$xmlFilePath = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).xmlFilePath
$ReleaseBuildVer = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).ReleaseBuildVer
Set-Variable -Name "ReleaseVersion" -Value $ReleaseVersion -Scope global
Set-Variable -Name "Sourceversion" -Value $Sourceversion -Scope global
Set-Variable -Name "LinkForVersion" -Value $LinkForVersion -Scope global
Set-Variable -Name "VersionNumber" -Value $VersionNumber -Scope global
Set-Variable -Name "buildver" -Value $buildver -Scope global
Set-Variable -Name "PipelineID" -Value $PipelineID -Scope global
Set-Variable -Name "xmlFilePath" -Value $xmlFilePath -Scope global
Set-Variable -Name "ReleaseBuildVer" -Value $ReleaseBuildVer -Scope global
}
I have a script that read from excel collect files according to a column, Before the running I need to define 4 variables, the issue is that I need to run it for several versions. That means that for each run I need to leave active 4 variables and the rest should be in comment (#) and I do it manually (need to add 12 times # There is a smart way to choose all the 4 variables per version?
I will give an example:
Each time only one set is enabled (According to version I want to work on)
The using of those parameters are:
Add-VSTeamWorkItem -ProjectName "Client-Server" -Title "[Side VIP] [$VersionNumber]"
$Versionlocationforpatches = "$Sourceversion\Installer\Patches"
$Versionlocationforcabs = "$Sourceversion\Installer"
Add-VSTeamBuild -ProjectName "Client-Server" -BuildDefinitionId $PipelineID
function RenameVerFile ([string] $buildver)
{
$DefaultFile = Get-ChildItem $Sourceversion | Where-Object {$_.Name -like "BuildVer.txt"}
Clear-Content $DefaultFile.FullName -Force
$Newcontent = Add-Content $DefaultFile.FullName -Value ($buildver + "." + (Get-Random))
}
Some of them are using in other places
Now I have something like this and I am very happy but I want to display the user a menu like: For version 8.5.34 choose 1, Without insert manually the number
I hope this will do the job
do {$VersionToUse = $Versions.buildver | Out-Gridview -Title "Choose version" -PassThru } while ($Versions.buildver -notcontains $VersionToUse)
Upvotes: 0
Views: 149
Reputation: 465
Edit: Totally Changed this answer to include latest information
User of the script will now see versions to select and then enter version number to be used. your four variables are then filled with the relevant data.
$SharedDriveFolderPath= "\\Test\xxx" # This is just for me to test - you have your own data somewhere
$Versions = @()
$Versions += "VersionNumber;Sourceversion;PipelineID;buildvers;"
$Versions += "8.5.34;$SharedDriveFolderPath\Versions\8.5.34.31;18710;8.5.34.31"
$Versions += "8.5.35;$SharedDriveFolderPath\Versions\8.5.34.35;18713;8.5.34.35"
$Versions = $Versions | ConvertFrom-CSV -Del ";"
do {$VersionToUse = ($Versions | Out-GridView -OutputMode Single -Title "Select version to use").VersionNumber} while (-not $VersionToUse)
$VersionNumber = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).VersionNumber
$Sourceversion = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).Sourceversion
$PipelineID = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).PipelineID
$buildvers = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).buildvers
Take this Code to replace your version lines (the ones you posted here as screenshot example)
Alternative as json if you prefer that:
$SharedDriveFolderPath= "\\Test\xxx" # This is just for me to test - you have your own data somewhere
$Versions = @"
[
{
"VersionNumber": "8.5.34",
"Sourceversion": "$($SharedDriveFolderPath -replace "\\","\\")\\Versions\\8.5.34.31",
"PipelineID": "18710",
"buildvers": "8.5.34.31"
},
{
"VersionNumber": "8.5.35",
"Sourceversion": "$($SharedDriveFolderPath -replace "\\","\\")\\Versions\\8.5.34.35",
"PipelineID": "18713",
"buildvers": "8.5.34.35"
}
]
"@ | ConvertFrom-Json
do {$VersionToUse = ($Versions | Out-GridView -OutputMode Single -Title "Select version to use").VersionNumber} while (-not $VersionToUse)
$VersionNumber = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).VersionNumber
$Sourceversion = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).Sourceversion
$PipelineID = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).PipelineID
$buildvers = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).buildvers
Replace the line starting with "do" with the following code to get another way of selection if you don't like the gridview
$i = 0; foreach ($Version in $Versions.VersionNumber) {$i++; "[$i] $Version"; }; $VersionToUse = ($Versions[$(do {"Enter ID of Version to use"; $id = Read-Host} while (-not ($id -le $Versions.count -and $id -gt 0));$id - 1)]).VersionNumber
Upvotes: 1
Reputation: 465
You could store and choose it that way with a hashtable:
$myVars = @{}
$myVars.Version2000 = @{"Path"="c:\";"Title"="MySensitiveData"}
$myVars.Version2000.Path
$myVars.Version2000.Title
it could then look like
PS C:\> $myVars = @{}
PS C:\> $myVars.Version2000 = @{
>> "Path"="c:\Prog2000"
>> "Title"="MySensitiveData"
>> "Var3"="Value3"
>> "Var4"="value4"
>> }
PS C:\> $myVars.Version2013 = @{
>> "Path"="c:\Prog2013"
>> "Title"="MySensitiveData"
>> "Var3"="Value3"
>> "Var4"="value4"
>> }
PS C:\> $myVars.Version2000
Name Value
---- -----
Var4 value4
Path c:\
Var3 Value3
Title MySensitiveData
PS C:\> $myVars.Version2000.Path
c:\
EDIT: Added a new answer as more information came in OP
Upvotes: 0