Powershell: функция создания новой переменной не работает

Я пытаюсь создать простую функцию для создания переменных в powershell с сгенерированным именем.

Я использую этот код:

    function createAnewVariable {
 [CmdletBinding()]
    Param(
          [String]$Name
    )
    New-Variable -Name GenLink$Name -Value "AMIGA" -Option AllScope
}

createAnewVariable -Name "AutoVAR"

Вне функции она работает отлично, когда я делаю переменную get, я вижу свои автоматически созданные переменные, такие как $GenLinkName но внутри функции у меня нет доступа к переменной в списке, и я не могу ее вызвать! оо

Это может быть просто, но я не понимаю, почему :)

Кто-нибудь может сказать мне, где я ошибаюсь, пожалуйста?

Что такое компоненты React? Введение в компоненты | Типы компонентов
Что такое компоненты React? Введение в компоненты | Типы компонентов
Компонент - это независимый, многократно используемый фрагмент кода, который делит пользовательский интерфейс на более мелкие части. Например, если мы...
3
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Чтобы сделать переменную доступной в родительской области, используйте -Scope 1 при вызове New-Variable:

function createAnewVariable {
    [CmdletBinding()]
    Param(
        [String]$Name
    )
    
    New-Variable -Name "GenLink$Name" -Value "AMIGA" -Scope 1
}

createAnewVariable -Name "AutoVAR"

# This is now available in the calling scope
$GenLinkAutoVAR

Имейте в виду, что если функция относится к области модуля (например, функция является частью модуля), родительской областью будет область действия модуля, что означает, что все другие функции в том же модуле также смогут ее видеть.

Из области модуля можно использовать $PSCmdlet.SessionState.PSVariable.Set() для установить переменную в области вызывающего абонента.

zett42 16.03.2022 13:34

Другие вопросы по теме