powershell - переменная внутри строковой переменной должна обновляться даже после того, как она была объявлена - PullRequest
0 голосов
/ 27 сентября 2018

Как видите, переменная $SQLRCNumberNew находится внутри другой переменной $SQLUpdateRC, которая была объявлена ​​до того, как $SQLRCNumberNew сделал.

Когда я запускаю скрипт, $SQLRCNumberNew пуст, что делаетсмысл, потому что он объявлен в начале $SQLUpdateRC.

Что я хочу спросить, если у кого-то есть идея, как я могу обновить $SQLRCNumberNew, даже если он объявлен в начале.

Я знаю, что могу просто поместить строку Variable прямо внизу, но это не то, что я ищу.

Спасибо за любую помощь!

$RCFirstDigit = 0
$RCSecondDigit = 0

$PhoenixDBServer = "Servername"
$PhoenixDBName = "Databasename"
$ProductionDBServer = "Servername"
$ProductionDBName = "Databasename"

$SQLSelectRC = $("SELECT [Char_Value_01] FROM [dbo].[TABLENAME] WHERE [Keyword] = 'Version Number'")
$SQLUpdateRC = $("UPDATE TABLENAME set Char_Value_01 = '$SQLRCNumberNew' where Keyword = 'Version Number'")

Switch ($env:COMPUTERNAME) {
    $PhoenixDBServer {
        $Server = $PhoenixDBServer + "." + $env:USERDNSDOMAIN
        $Database = $PhoenixDBName
    }
    $ProductionDBServer {
        $Server = $ProductionDBServer + "." + $env:USERDNSDOMAIN
        $Database = $ProductionDBName
    }
    default {
        Write-Verbose "This script does not run on this computer"
        exit
    }
}

$SQLRCNumber = Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $SQLSelectRC

[int]$RCFirstDigit = $SQLRCNumber.Char_Value_01.split(".")[1]
[int]$RCSecondDigit = $SQLRCNumber.Char_Value_01.split(".")[2]

$RCSecondDigit++

# put string back together with updated RC number
[string]$SQLRCNumberNew = $SQLRCNumber.Char_Value_01.Split(".")[0] + "." + $RCFirstDigit + "." + $RCSecondDigit

# Update RC Version on Database
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $SQLUpdateRC

1 Ответ

0 голосов
/ 27 сентября 2018

Просто чтобы прояснить - это не то, как работает сценарий PowerShell.Когда вы присваиваете данные своим переменным, по крайней мере, при работе со строками.

В вашем файле сценария может быть функция, которую вы можете вызывать, и она будет возвращать объединенную строку.

Function StringBuilder {
Param ($Value)
"UPDATE TABLENAME set Char_Value_01 = '$Value' where Keyword = 'Version Number'"
}  


...
$SQLRCNumber = Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $SQLSelectRC

$SQLUpdateRC = StringBuild $SQLRCNumber
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $SQLUpdateRC
...

Нечто подобное должно работать.Но я бы сказал, что вы должны иметь формат строки, определенный в верхней части, и просто форматировать, когда вам это нужно.

$SQLUpdateRCBase = "UPDATE TABLENAME set Char_Value_01 = '{0}' where Keyword = 'Version Number'"

...
$SQLRCNumber = Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $SQLSelectRC

$SQLUpdateRC = $SQLUpdateRCBase -f $SQLRCNumber
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $SQLUpdateRC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...