powershell-字符串变量中的变量即使在声明后也应更新

时间:2018-09-27 09:04:50

标签: powershell

如您所见,变量$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 :(得分:1)

请清楚一点-这不是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
相关问题