Próbuję umieścić IP w zmiennej, gdy zaznaczam pole wyboru i używam tej zmiennej jako adresu IP w Invoke-SQLCMD. Wygląda na to, że zawartość $ DB00 pozostaje pusta niezależnie od tego, co robię.
$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]
})
Odpowiedzi:
1 dla odpowiedzi № 1To jest zasięg kwestia. Gdy add_Checked()
kod jest wywoływany, działa w zakresie podrzędnym, co oznacza zmiany wprowadzone $DB00
wewnątrz bloku skryptów nie wpływa na wartość $DB00
poza nim.
Aby to zilustrować, spróbuj uruchomić następujący fragment kodu:
$DB00 = 123
&{
$DB00 = 456
&{
$DB00 = 789
}
}
# What do you think will be printed?
Write-Host $DB00
Jeśli jest to część skryptu lub funkcji, można zakwalifikować zmienną za pomocą nazwy zakresu „skrypt”:
$script:DB00 = "192.168.1.1"
Możesz także użyć *-Variable
cmdlety z -Scope
parametr. Pozwala to określić zakres rodzica względem bieżącego zakresu:
$DB00 = 123
&{
Set-Variable DB00 -Value 456 -Scope 1
&{
$DB00 = 789
}
}
# What do you think will be printed now? :)
Write-Host $DB00