Переменная в блоке скрипта не передается остальной части моего кода с помощью PowerShell - PullRequest
0 голосов
/ 27 октября 2018

В моем коде $ CoName не всегда будет идеальным, и его нужно будет немного изменить. $ CoFixes исправляет эту проблему. Но когда я запускаю его, как показано ниже, $ CoName никогда не переходит в $ cell. Мне нужно несколько раз повторно использовать код в $ CoFixes, поэтому я пытаюсь научиться тому, как это сделать.

$CoFixes = {
if ($CoName -eq "L.F. 10' Panel w/o lath"){$CoName = "L.F. of 10' Panel w/o lath"}
if ($CoName -eq "L.F. 9' Panel w/o lath"){$CoName = "L.F. of 9' Panel w/o lath"}
if ($CoName -eq "L.F. 8'2`" Panel w/o lath"){$CoName = "L.F. of 8'2`" Panel w/o lath"}
if ($CoName -eq "L.F. 4' Panel w/o lath"){$CoName = "L.F. of 4' Panel w/o lath"}
if ($CoName -eq "L.F. 4' Panel w/ 8`" top w/o lath"){$CoName = "L.F. of 4' Panel w/ 8`" top w/o lath"}
if ($CoName -eq 'Special Window Openings over 27"'){$CoName = 'Special Window Openings over 37"'}
if ($CoName -eq 'Door Opening up to 41.5" wide'){$CoName = 'Door Opening up to 41 1/2" wide'}
}

$CoName = $ChangeOrder1Worksheet.range('B20').text
&$CoFixes
$cell = $QuoteSheet.range('B1:B60').Find($CoName).offset(0, 3).address(0,0)
$value = $ChangeOrder1Worksheet.range('A20').text
&$vba
$objExcel.run("ChangeOrder", $cell, $value)
write-host $CoName " " $cell " " $value " " $QuoteSheet.range($cell).text

Ответы [ 2 ]

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

У вас проблема с областью действия. Переменные в родительской области доступны из дочерней области, но когда вы пишете в них, они копируются в локальную область, и это то, что вы изменяете.

Рассматривайте эту анонимную функцию, которую вы создаете, как функцию и вместо этого возвращайте значение:

$CoFixes = {
if ($CoName -eq "L.F. 10' Panel w/o lath"){"L.F. of 10' Panel w/o lath"}
elseif ($CoName -eq "L.F. 9' Panel w/o lath"){"L.F. of 9' Panel w/o lath"}
elseif ($CoName -eq "L.F. 8'2`" Panel w/o lath"){"L.F. of 8'2`" Panel w/o lath"}
elseif ($CoName -eq "L.F. 4' Panel w/o lath"){"L.F. of 4' Panel w/o lath"}
elseif ($CoName -eq "L.F. 4' Panel w/ 8`" top w/o lath"){"L.F. of 4' Panel w/ 8`" top w/o lath"}
elseif ($CoName -eq 'Special Window Openings over 27"'){'Special Window Openings over 37"'}
elseif ($CoName -eq 'Door Opening up to 41.5" wide'){'Door Opening up to 41 1/2" wide'}
else { $CoName }
}

$CoName = $ChangeOrder1Worksheet.range('B20').text
$CoName = &$CoFixes

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

$CoFixes = {
    switch($CoName)
    {
        "L.F. 10' Panel w/o lath" {"L.F. of 10' Panel w/o lath"}
        "L.F. 9' Panel w/o lath" {"L.F. of 9' Panel w/o lath"}
        "L.F. 8'2`" Panel w/o lath" {"L.F. of 8'2`" Panel w/o lath"}
        "L.F. 4' Panel w/o lath" {"L.F. of 4' Panel w/o lath"}
        "L.F. 4' Panel w/ 8`" top w/o lath" {"L.F. of 4' Panel w/ 8`" top w/o lath"}
        'Special Window Openings over 27"' {'Special Window Openings over 37"'}
        'Door Opening up to 41.5" wide' {'Door Opening up to 41 1/2" wide'}
        default { $Name }
    }
}

$CoName = $ChangeOrder1Worksheet.range('B20').text
$CoName = &$CoFixes

Тогда, возможно, поместите это в реальную функцию:

function Repair-CoName {
    param(
        [String]
        $Name
    )

    switch($Name)
    {
        "L.F. 10' Panel w/o lath" {"L.F. of 10' Panel w/o lath"}
        "L.F. 9' Panel w/o lath" {"L.F. of 9' Panel w/o lath"}
        "L.F. 8'2`" Panel w/o lath" {"L.F. of 8'2`" Panel w/o lath"}
        "L.F. 4' Panel w/o lath" {"L.F. of 4' Panel w/o lath"}
        "L.F. 4' Panel w/ 8`" top w/o lath" {"L.F. of 4' Panel w/ 8`" top w/o lath"}
        'Special Window Openings over 27"' {'Special Window Openings over 37"'}
        'Door Opening up to 41.5" wide' {'Door Opening up to 41 1/2" wide'}
        default { $CoName }
    }
}

$CoName = $ChangeOrder1Worksheet.range('B20').text
$CoName = Repair-CoName -Name $CoName

и т.д.

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

Это из-за области видимости.

$Variable1 = 1
& {
    $Variable1 = 2 #This will create a new local variable and visible only inside the scriptblock
    "Local variable is $Variable1"
    "Global Variable is $Global:Variable1"  
}

Выполните сценарий выше, вы можете легко понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...