2015-11-17 5 views
1

Я пытаюсь разместить ip в переменной, когда я устанавливаю флажок и использую эту переменную в качестве IP-адреса в Invoke-SQLCMD. Кажется, что содержимое $ DB00 остается пустым, что я делаю.Как разместить содержимое в переменной с помощью wpf Checkbox и powershell

$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

Это вопрос scoping. Когда вызывается код add_Checked(), он запускается в дочерней области, что означает, что изменения, сделанные в $DB00 внутри скриптового блока, не влияют на значение $DB00 вне его.

Чтобы проиллюстрировать это, попытайтесь выполнить следующий фрагмент кода:

$DB00 = 123 
&{ 
    $DB00 = 456 
    &{ 
    $DB00 = 789 
    } 
} 
# What do you think will be printed? 
Write-Host $DB00 

Если это часть сценария или функции, вы можете претендовать на переменную с «сценария» имя области видимости:

$script:DB00 = '192.168.1.1' 

Вы также можете использовать командлеты *-Variable с параметром -Scope. Это позволяет определить родительской области по отношению к текущей области:

$DB00 = 123 
&{ 
    Set-Variable DB00 -Value 456 -Scope 1 
    &{ 
    $DB00 = 789 
    } 
} 
# What do you think will be printed now? :) 
Write-Host $DB00 
+0

Очень, очень приятно ставить :) – sodawillow

+0

Hi Матиас, это было решение для меня, большое спасибо !! – AbNadi

+0

[PS C: \ Users \ master> Write-Host $ DB00 456] Приятно, что вы можете рассчитать между одними и теми же переменными из разных областей :) – AbNadi

 Смежные вопросы

  • Нет связанных вопросов^_^