Аз се опитвам да поставя IP в променлива, когато направя отметката проверена и използвам тази променлива като IP адрес в Invoke-SQLCMD. Изглежда, че съдържанието на $ DB00 остава празно, каквото и да правя.
$window.DB00.add_Checked({
$DB00 = "192.168.1.1"
[System.Object]$sender = $args[0]
[System.Windows.RoutedEventArgs]$e = $args[1]
})
$window.DB00.add_Unchecked({
$DB00 = $null
#Get-ChildItem variable:DB00
#Remove-Item variable:DB00
[System.Object]$sender = $args[0]
[System.Windows.RoutedEventArgs]$e = $args[1]
})
$window.DB00.add_Indeterminate({
$DB00 = $null
[System.Object]$sender = $args[0]
[System.Windows.RoutedEventArgs]$e = $args[1]
})
#Collect Input fields#
$window.Button.add_Click({
$UserName = $window.UserName.Text.ToString()
$PassWord = $window.PassWord.Text.ToString()
$ServerAddress = $DB00
$DataBase = $window.DataBase.Text.ToString()
$SQLQuery = $window.Query.Text.ToString()
Invoke-Sqlcmd -AbortOnError `
-Username $UserName `
-Password $PassWord `
-Database $DataBase `
-Query $SQLQuery `
-QueryTimeout 30 `
-ServerInstance $ServerAddress |
Out-GridView -Title $DataBase
[System.Object]$sender = $args[0]
[System.Windows.RoutedEventArgs]$e = $args[1]
})
Отговори:
1 за отговор № 1Това е определяне на обхвата проблем. Кога add_Checked()
се извиква, той се изпълнява в обхвата на детето, което означава, че промените, направени в $DB00
вътре в scriptblock не влияе на стойността на $DB00
извън нея.
За да илюстрирате това, опитайте и изпълнете следния фрагмент:
$DB00 = 123
&{
$DB00 = 456
&{
$DB00 = 789
}
}
# What do you think will be printed?
Write-Host $DB00
Ако това е част от скрипт или функция, можете да квалифицирате променливата с името на обхвата "script":
$script:DB00 = "192.168.1.1"
Можете да използвате и *-Variable
cmdlets с бутоните -Scope
параметър. Това ви позволява да укажете основен обхват спрямо текущия обхват:
$DB00 = 123
&{
Set-Variable DB00 -Value 456 -Scope 1
&{
$DB00 = 789
}
}
# What do you think will be printed now? :)
Write-Host $DB00