Как в Powershell установить значения переменных внутри функции и сделать это значение доступным в родительской области?
Я пытаюсь установить значения некоторых переменных с помощью функции. Мой код ниже:
$BackupFile = $null
$TaskSequenceID = $нуль
$OSDComputerName = $null
$capturedWimPath = $null
Функция Set-OsToBuild
{
переключатель ($OsToBuild)
{
"Вин7х64"
{
$BackupFile = "Win7x64-SP1.wim"
$TaskSequenceID = "WIN7X64BC"
$OSDComputerName = "Ref-Win7x64"
$capturedWimPath = "$($PathToMdtShare)\Captures\$BackupFile"
}
}
}
Проблема в том, что эти значения для $BackupFile, $TaskSequenceID, $OSDComputerName и $capturedWimPath являются пустыми/нулевыми вне этой функции.
Как правильно это сделать? Я хочу установить эти значения в этой функции и сделать эти значения доступными позже в сценарии в родительской области.
- функция
- переменные
- powershell
- область действия
1
Переменные создаются в области действия вашей функции.
Эти переменные удаляются, когда ваша функция выполнена.
Глобальный:
Область, которая действует, когда Windows PowerShell
начинается. Переменные и функции, присутствующие при
Запуски Windows PowerShell были созданы в
глобальный охват. Сюда входят автоматические переменные и
переменные предпочтений. Это также включает в себя переменные, псевдонимы,
и функции, которые находятся в вашей Windows PowerShell
профили.
Местный:
Текущая область. Локальная область может быть глобальной.
сфера или любая другая сфера.
Скрипт:
Область, которая создается во время выполнения файла скрипта. Только
команды в скрипте выполняются в области скрипта. К
команды в сценарии, областью действия сценария является локальная
объем.
Источник: about_Scopes
Если вам нужно, чтобы переменные были доступны для скрипта, то пропишите их в область скрипта .
$BackupFile = $null
$TaskSequenceID = $нуль
$OSDComputerName = $null
$capturedWimPath = $null
Функция Set-OsToBuild
{
переключатель ($OsToBuild)
{
"Вин7х64"
{
$script:BackupFile = "Win7x64-SP1.
wim"
$script:TaskSequenceID = "WIN7X64BC"
$script:OSDComputerName = "Ref-Win7x64"
$script:capturedWimPath = "$($PathToMdtShare)\Captures\$BackupFile"
}
}
}
Если вы хотите сохранить значения для целых сеансов (пока вы не закроете процесс powershell), вам следует использовать глобальную область .
$global:BackupFile = $null
$global:TaskSequenceID = $null
$global:OSDComputerName = $null
$global:capturedWimPath = $null
Функция Set-OsToBuild
{
переключатель ($OsToBuild)
{
"Вин7х64"
{
$global:BackupFile = "Win7x64-SP1.wim"
$global:TaskSequenceID = "WIN7X64BC"
$global:OSDComputerName = "Ref-Win7x64"
$global:capturedWimPath = "$($PathToMdtShare)\Captures\$BackupFile"
}
}
}
Справочный документ powershell about_scope — это то, что вы хотите прочитать для этого.
Конкретно в этом разделе:
Области Windows PowerShell
Области в Windows PowerShell имеют как имена, так и номера.Названный области определяют абсолютную область. Цифры относительны и отражают отношения между областями. Глобальный: Область, которая действует, когда Windows PowerShell начинается. Переменные и функции, присутствующие при Запуски Windows PowerShell были созданы в глобальный охват. Сюда входят автоматические переменные и переменные предпочтений. Это также включает в себя переменные, псевдонимы, и функции, которые находятся в вашей Windows PowerShell профили. Местный: Текущая область. Локальная область может быть глобальной. сфера или любая другая сфера. Скрипт: Область, которая создается во время выполнения файла скрипта. Только команды в скрипте выполняются в области скрипта. К команды в сценарии, областью действия сценария является локальная объем. Частный: Элементы в частной области не могут быть видны за пределами текущего объем. Вы можете использовать частную область для создания частной версии элемента с тем же именем в другой области.
Пронумерованные области: Вы можете обращаться к областям по имени или номеру, который описывает относительное положение одного прицела по отношению к другому. Область 0 представляет текущую или локальную область. Область 1 указывает непосредственную родительскую область. Область 2 указывает на родитель родительской области и так далее. Пронумерованные области полезны, если вы создали много рекурсивных масштабы.
Таким образом, в зависимости от ваших конкретных потребностей вы можете использовать любой из следующих вариантов.
-
$global:BackupFile = "Win7x64-SP1.wim" -
$script:BackupFile = "Win7x64-SP1.wim" -
$1:BackupFile = "Win7x64-SP1.wim"
Чтобы установить $BackupFile снаружи, ваша функция должна записать в $script:$BackupFile .
Но есть одна загвоздка! Если ваш скрипт вызывается (используя и , этого не происходит при точечном поиске) из другого скрипта, тогда $BackupFile будет унаследовано от вызывающего, но $script:$BackupFile будет пустым.
$BackupFile , но записывать в $script:$BackupFile . Также остерегайтесь синтаксиса вроде $script:BackupFile += ".bin" , потому что он считывается из неправильной переменной. Возможный обходной путь, позволяющий избежать ошибок, состоит в том, чтобы начать функцию с $script:BackupFile = $BackupFile .
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
изменение глобальных переменных внутри функции в python
Задавать вопрос
спросил
Изменено 1 год, 3 месяца назад
Просмотрено 27 тысяч раз
Я новичок в Python.
Я не совсем понимаю, как мне нужно устанавливать переменные и изменять их внутри функции, которая будет использоваться позже. Мой сценарий должен получить значения x и y от функции, которые определяются размером диаграммы, создаваемой функцией. Эти переменные необходимо передать команде печати позже в скрипте для вывода html. Допустим, у меня есть глобальные переменные:
исходный_процент = 0,125
исходный_процент = 0,11
Но их нужно будет изменить при запуске функции…
def makeplot(temp, entropy,preq):
originx_pct = origin.get_points()[0][0]
originy_pct = origin.get_points()[0][1]
Затем печатается в javascript html-страницы, написанной позже…
print('var originx_pct = {};'.format(originx_pct))
print('var originy_pct = {};'.format(originy_pct))
2 переменные не меняются, и я просто не понимаю, что мне нужно сделать, чтобы обновить их и иметь возможность печатать (вне функции). Я предполагаю, что функция не знает о переменных, поэтому не может их изменить.
- python
- переменные
- область видимости
3
В вашей функции необходимо использовать глобальное ключевое слово .
исходный_процент = 0,125
исходный_процент = 0,11
def makeplot (temp, entropy, preq):
глобальный originx_pct, originy_pct
originx_pct = origin.get_points()[0][0]
originy_pct = origin.get_points()[0][1]
Подробнее о global можно прочитать здесь.
0
В вашей функции вам нужно вернуть значения. Измените свой makeplot на следующее:
def makeplot(temp, entropy, preq):
local_originx_pct = origin.get_points()[0][0]
local_originy_pct = origin.get_points()[0][1] # local_ в именах ничего не значит, это просто для ясности.
вернуть local_originx_pct, local_originy_pct
Затем, когда вы вызываете функцию, установите ваши переменные в ее возвращаемое значение.
originx_pct, originy_pct = makeplot(args_and_stuff)
Это считается лучшей практикой, чем прямое изменение глобальных переменных, как в ответе ltd9938. Это помогает предотвратить случайное использование других функций. Дополнительные причины не использовать global
Вы можете либо объявить глобальные переменные в функции с помощью строк global originx_pct и global originy_pct , либо вернуть их при запуске функции. Для этого вы можете сделать
по умолчанию makeplot(temp, entropy,preq):
возврат (origin.get_points()[0][0],origin.get_points()[0][1])
или
по умолчанию makeplot (temp, entropy, preq):
вернуть origin.get_points()[0][0:2]
Если origin.get_points()[0] имеет только два элемента, вы делаете следующее:
def makeplot(temp, entropy,preq): вернуть origin.

wim"
$script:TaskSequenceID = "WIN7X64BC"
$script:OSDComputerName = "Ref-Win7x64"
$script:capturedWimPath = "$($PathToMdtShare)\Captures\$BackupFile"
}
}
}
Названный
области определяют абсолютную область. Цифры относительны и отражают
отношения между областями.
Глобальный:
Область, которая действует, когда Windows PowerShell
начинается. Переменные и функции, присутствующие при
Запуски Windows PowerShell были созданы в
глобальный охват. Сюда входят автоматические переменные и
переменные предпочтений. Это также включает в себя переменные, псевдонимы,
и функции, которые находятся в вашей Windows PowerShell
профили.
Местный:
Текущая область. Локальная область может быть глобальной.
сфера или любая другая сфера.
Скрипт:
Область, которая создается во время выполнения файла скрипта. Только
команды в скрипте выполняются в области скрипта. К
команды в сценарии, областью действия сценария является локальная
объем.
Частный:
Элементы в частной области не могут быть видны за пределами текущего
объем. Вы можете использовать частную область для создания частной версии
элемента с тем же именем в другой области.
Пронумерованные области:
Вы можете обращаться к областям по имени или номеру, который
описывает относительное положение одного прицела по отношению к другому.
Область 0 представляет текущую или локальную область. Область 1
указывает непосредственную родительскую область. Область 2 указывает на
родитель родительской области и так далее. Пронумерованные области
полезны, если вы создали много рекурсивных
масштабы.
вернуть local_originx_pct, local_originy_pct
