
Set-Location Env: переводит в него, а Get-ChildItem Env: (то же, что dir) выводит все переменные и их значения.$env:Path. Имена удобно подбирать клавишей Tab. Чтобы разобрать путь по папкам, используем $env:Path -split ';'.$env:, живет только в текущей сессии PowerShell. После закрытия окна она исчезает.[Environment]::SetEnvironmentVariable принимает имя, значение и область: 'User' для текущего пользователя или 'Machine' для всех пользователей компьютера. Для 'Machine' PowerShell нужно запустить от администратора.Полный текст первых минут лекции «Переменные среды в PowerShell - Windows 10» из видеокурса PracticU – субтитры с временной меткой для каждого абзаца. Так можно прочитать и найти нужные темы ещё до начала обучения.
Добро пожаловать на лекцию про переменные среды и мы будем работать с этими переменными среды внутри PowerShell. Мы откроем PowerShell и будем изучать как работать, создавать, сохранять с помощью команд PowerShell переменные среды Environment Variables.
Начнем с того, что PowerShell относится к переменным средам как к дискам, как к дисководу C и D. У него есть PS Provider, PowerShell Provider для дисков.
Его же аналог, такой же драйвер сделали и для переменных среды, и это очень удобно. Мы можем как бы удалять файлы, создавать файлы, только вместо файлов это будут имена переменных.
Это очень удобная штука. Они, кстати, такое же сделали и для регистри, для реестра. То есть я могу работать с реестром компьютера, с регистри компьютера, как будто бы это обычные файлы.
сделать dir. Например, dir - это, кстати, alias, сокращение на команду getChildItem. То есть, они оставили старый dir и сделали, что он указывает на команду ParoShell. Я вам сейчас покажу, предположим, что мы сделаем dir на registry, так же, как мы делаем на C:, на дисковод C, мы можем так же, как с дисководом,
работать и с реестром, и создавать в нем папки и файлы, только это не файлы, а это значение registry. Но это просто, чтобы вы поняли, что такое провайдер. Нам сейчас реестр не нужен, мы не будем сейчас заходить в registry с помощью командной строки. Мы сейчас вернемся к нашей теме. Это environment variables,
переменные среды. И будем с ними работать так же, как мы работаем с обычными файлами. Видите, как будто бы это диск cd, только этот диск называется Environment Variables и DIR на него показывает мне все переменные и их значения.
Например, Application Data, Application Data, где можно сохранить информацию для приложения. OS, на какой системе я, на Windows или на Linux. Logan Server, через какой сервер прошел авторизацию, где находится моя домашняя папка, то есть мой профиль пользователя, куда можно сохранять
информацию, даже если я простой пользователь, есть права доступа. И самое главное переменная Path, которая говорит компьютеру, где искать экзешники, где искать программы, если их нету в текущей папке.
То есть если в моей текущей папке нет какого-то экзешника, предположим calc, то я могу его все равно запустить. Я, кстати, могу сделать setLocation и перейти прямо внутрь диска environment.
Заметьте, вместо диска c у меня появилась env. То есть я работаю с ним как с обычным диском, и переменным я обращаюсь как к файлам, условно говоря.
Это интересная идея PowerShell, которую я сделал. Но мы вернемся на диск C и SetLocation я вам показал. Теперь я хочу вам показать второй способ.
Это переменная $env. Вообще $ это любая переменная, начинается с доллара. То есть вместо того, чтобы работать с ним как с диском, я могу к этим же переменным обращаться через $env.
Это намного удобнее. Например, я могу написать $env и обратиться к переменной path. Я пишу $nv и двоеточие и нажимаю Tab.
Просто нажимаем Tab и он сам переходит между всеми переменными. Видите, я нажимаю несколько раз Tab и он сам листает между ними. И мы можем работать с ними как с $nv, как с переменной nv, которая указывает на переменные среды, или как с диском.
Это два способа. Кстати, этот способ я считаю намного удобнее. Видите, нажимаешь Tab и он тебе показывает все варианты.
Очень-очень удобно. И, кстати, path, видите, там точки запятой делят папки. Я могу сделать команду split, которая встроена в PowerShell.
И он мне это красиво поделит на разные строки. Сделает split по точке запятой. То есть разделитель, точка запятая. И я вижу вот все папки, в которых Windows ищет автомат экзешник.
То есть если я напишу calc, он мне запустит калькулятор. И неважно, в какой папке я нахожусь. Кстати, я сейчас нахожусь в папке, где он как раз и находится, этот калькулятор.
Видите, он находится в этой же папке, я нажал Tab и он его нашел. Но если я выйду в другую папку, все равно калькулятор работает. Почему он работает, почему он знает где его искать, благодаря переменной $path.
Вот переменная $path это где искать экзешники. И кстати, я смогу свое приложение сюда же добавить в этот список и можно будет мое приложение, мою программу запускать с любой папки в этом компьютере.
Кстати, я могу создавать новые переменные. Видите, я создал переменную aaa и дал ей значение 1,1,1. И мое приложение, моя программа понимает смысл этой переменной.
То, что системе она не нужна, ничего ужасного. Я могу к ней обращаться и получить ее значение. Она также попала в тот же самый список дисков типа path и nv двоеточие.
То есть она попала в список всех переменных на нашем компьютере. Но проблема, что вот этот вот способ, эти два способа, они работают только в моей сессии.
Если я закрою сессию, открою новую сессию, то есть новый PowerShell, все мои переменные, которые я создал, исчезнут. Видите, их нет. Почему их нет? Потому что они существуют только внутри конкретной сессии, внутри конкретного процесса.
А если я хочу их сохранить на постоянно, чтобы они при каждом новом включении PowerShell сохранялись, Сохранялись. Надо пойти вот сюда, вот в компьютере, в моем компьютере и прописать их вот здесь вот.
Но я не хочу сейчас ручками их прописывать, я хочу это сделать командно. Я вам только покажу, что это действительно работает.
Например, я добавлю переменную AAA. Видите, она в этот список на уровне всей системы, на уровне всего компьютера для всех пользователей добавлена.
И теперь, если я открою CMD, то она будет там. То есть, эта переменная добавилась для всех новых процессов. Кстати, это работает не только в командной строке, это в любой приложении, в любой программе эти переменные доступны.
Только я не хочу это делать через графический интерфейс. Мы все-таки на лекции про PowerShell. Поэтому мы сделаем те же самые действия, только с помощью командной строки.
И как мы это делаем? Видите, я удалил ААА. И с помощью командной строки мы это сделаем. Так, я все закрываю и мы возвращаемся в мир PowerShell.
Так, в PowerShell мы все закрываем, открываем еще раз наш PowerShell и пытаемся теперь через командную строку обратиться в то окно Windows, которое сохраняет глобальные перемены.
Мы видим, что в чистом новом PowerShell у нас нет переменной AAA. И теперь мы используем .NET, потому что нет такой команды готовой и нам надо обратиться к объектам .NET.
И у нас есть возможность к ним обращаться, к их классам. То есть если у нас не хватает команд, мы напрямую идем к объекту.