Используйте переменную, возвращаемую Get-Variable - PullRequest
2 голосов
/ 03 апреля 2020

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

Так что для этого примера сценарий может создать $ PRD1, $ PRD2, $ TST1 и $ TST4.

$ PRD1, $ PRD2, $ TST1 и $ TST4 будут иметь некоторые свойства, такие как DebugMode, DisableAppsStartTime, DisableAppsStopTime. У них будут некоторые методы, такие как DisableApps (), EnableApps ().

Как узнать, какие переменные в итоге создал скрипт? Я могу использовать Get-Variable, чтобы узнать, какие из них созданы (плюс у меня все еще есть первоначальный список имен для создания). Моя проблема в том, что у меня возникают проблемы с выяснением, чтобы вызывать те, что я создал, таким образом, который позволяет мне использовать методы и свойства, без нелепого добавления вложенных команд foreach / if / switch.

Я, конечно, надеюсь, что это имело смысл.

Заранее спасибо, SS

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

У меня все еще есть первоначальный список имен для создания

Если предположить, что $list содержит этот список, то ниже будет создана (упорядоченная) таблица ha sh этих переменных которые были фактически созданы из этого списка:

$variableMap = [ordered] @{}
(Get-Variable -ErrorAction Ignore -Scope Local $list).
  ForEach({ $variableMap[$_.Name] = $_.Value })

Примечание: -Scope Local ограничивает поиск current scope [1] ; опустите его, чтобы указать все переменные, видимые в текущей области, включая переменные из родительских (родительских) областей.

Затем вы можете l oop over $variableMap.Keys, чтобы обработать их все, или выбрать одну по имени выборочно Например, $variableMap.PRD1 (или $variableMap['PRD1']).

Затем вы используете обычные точечные обозначения для доступа к свойствам и методам этих записей; например, $variableMap.PRD1.DisableApps().


[1] Сюда входят переменные, созданные с опцией AllScope, например, $HOME, потому что они копируются в каждые сфера, как следует из названия. Вы можете найти все такие переменные с помощью
Get-Variable | Where-Object Options -match 'AllScope'

0 голосов
/ 04 апреля 2020

Я только что сделал это с помощью командлета where-object и оператора -like с foreach l oop.

foreach($var in (get-variable | Where-object {$_.name -like '*PRD*' -or $_.name -like '*TST*'})){
    $var
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...