Powershell для чайников: что это и как с ним работать

Встроенные переменные

Встроенные переменные обычно не меняют, а используют для просмотра какой-то информации о системе. Сейчас рассмотрим некоторые из встроенных переменных PowerShell.

$null

Эта переменная ничего не возвращает. Может использоваться для создания переменной, без присвоения ей значения:

> $b = $null
> Get-Variable -Name b
Name                           Value
----                           -----
b
> Get-Variable -Name null
Name                           Value
----                           -----
null

$lastexitcode

Когда внешнее приложение, например ping.exe, завершает работу, оно заканчивается с кодом выхода. Этот код выхода приложения заносится в переменную $lastexitcode. Если код выхода равен нулю, значит программа выполнилась успешно, в противном случае код завершения может быть другим. Вот пример с утилитой ping:

> ping ya.ru

Обмен пакетами с ya.ru  с 32 байтами данных:
Ответ от 87.250.250.242: число байт=32 время=15мс TTL=55
Ответ от 87.250.250.242: число байт=32 время=15мс TTL=55
Ответ от 87.250.250.242: число байт=32 время=15мс TTL=55
Ответ от 87.250.250.242: число байт=32 время=15мс TTL=55

Статистика Ping для 87.250.250.242:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 15мсек, Максимальное = 15 мсек, Среднее = 15 мсек

> $LASTEXITCODE
0

> ping qwerasdf.opt
При проверке связи не удалось обнаружить узел qwerasdf.opt.
Проверьте имя узла и повторите попытку.

> $LASTEXITCODE
1

В переменную $lastexitcode записывается код выхода последнего приложения. Поэтому при завершении другого приложения её значение может измениться.

$true и $false

Переменная $true всегда содержит значение true логического типа данных. Тоже самое относится и к переменной $false — содержит false логического типа.

$MaximumHistoryCount

В переменной $MaximumHistoryCount содержится максимальное число строк для хранения истории команд. Значение этой переменной можно менять, а по умолчанию оно равно 4096.

> $MaximumHistoryCount
4096
> $MaximumHistoryCount = 200
> $MaximumHistoryCount
200

$^

В переменной $^ хранится имя последней команды, например:

> ping -n 1 8.8.8.8
Обмен пакетами с 8.8.8.8 по с 32 байтами данных:
Ответ от 8.8.8.8: число байт=32 время=23мс TTL=110
Статистика Ping для 8.8.8.8:
    Пакетов: отправлено = 1, получено = 1, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 23мсек, Максимальное = 23 мсек, Среднее = 23 мсек

> $^
ping

Passing Parameters

Probably the most often-encountered issue with PowerShell is not understanding how to pass parameters to a PowerShell cmdlet or function. I suspect most folks start out confused about why it does not work, advance to being sure it is a bug in PowerShell, then finally achieve enlightenment and acceptance of the way it really works. The fundamental rule of passing multiple parameters is simply this: use spaces not commas. The entries below illustrate all the scenarios you would likely need.

#

Action

Command

Example

1

Pass multiple parameters  inline

cmdlet paramA paramB paramC (spaces-not commas!)

# compare this result with inserting a comma between 5 and 3

function func($a,$b) { “{0}/{1}” -f $a.length, $b.length }; func 5 3

2

Pass multiple parameters from array

(uses splatting operator; see http://stackoverflow.com/a/17198115/115690)

$a = valueA, valueB, valueC; cmdlet @a

# compare this result with using $a instead of @a

function func($a,$b) { “{0}/{1}” -f $a.length, $b.length }; $a = 5, 3; func @a

3

Pass an array of values as a single parameter inline

cmdlet valueA, valueB, valueC

dir prog.exe, prog.exe.config

4

Pass an array of values as a single parameter in an array

$a = valueA, valueB, valueC; cmdlet $a

$a = “prog.exe”, “prog.exe.config”; dir $a

5

Pass an array of values as a single parameter in a pipe

valueA, valueB, valueC | cmdlet

“prog.exe”, “prog.exe.config” | dir

$Env: Variables

Having mastered the drive to treat environment variables as files, this section shows you how to treat them as variables. Another way you can manage in-session environment variables is using the the PowerShell Expression Parser. This feature allows you to use the scope to access environment variables.

Getting an Environment Variable with

Using the scope, you can reference environment variables directly without using a command like as shown below.

This method makes it easy to insert environment variables into strings like below:

Setting or Creating an Environment Variable with

Setting an environment variable using this method is straightforward. This will also create a new environment variable if one does not already exist like below.

Use the syntax to add to an existing value, rather than overwriting it.

Accessing PowerShell Variable Values

Now that we have learned how to create a variable and assign an initial value to it we now need to look at how to access the value currently assigned to a variable. In practice, accessing a variable is as simple as referencing the name it was given when it was created.

For example, if we want to display the value which we assigned to our numberofcolors variable we can simply reference it in a command:

"The number of colors is $numberofcolors."

This will cause the following output to appear in the browser:

The number of colors is 6.

Similarly we can display the value of the mycolor variable:

"$mycolor is the current color.";

Массивы в PowerShell

Конечно же, в PowerShell есть и массивы. Массив — это структура данных, предназначенная для хранения коллекции элементов. Элементы массива могут быть одного или разных типов, т.е. массив может быть как строго типизированный, так и нет.

Как и во многих языках программирования в PowerShell к элементу массив можно обращаться по индексу (начинающегося с нуля). При инициализации массива значения мы перечисляем через запятую.

Пример создания массива, который может содержать элементы разных типов.

 
   #Создаем массив
   $Array = 1, 3, "Пример", 7, 9
   #Выводим 3 элемент массива
   $Array

Пример создания строго типизированного массива.

 
   #Создаем массив
   ]$Array = 1, 3, 5, 7, 9
   #Выводим 3 элемент массива
   $Array

Пример перебора элементов массива.

   
   #Создаем массив
   ]$Array = 1, 3, 5, 7, 9
   #Циклом for перебираем массив. $Array.count - это количество элементов массива
   FOR ($i = 0; $i -lt $Array.count; $i++){
      $Array
   }

References[edit | edit source]

  1. Wikipedia: Variable (computer science)
  2. Wikipedia: Constant (computer programming)
  3. Wikipedia: Variable (computer science)
  4. Wikipedia: Variable (computer science)
  5. Wikipedia: Data type
  6. Wikipedia: Type conversion
  7. Wikipedia: Variable (computer science)
  8. Wikipedia: Scope (computer science)
  9. Wikipedia: ASCII
  10. Wikipedia: Bit
  11. Wikipedia: Boolean
  12. Wikipedia: Byte
  13. Wikipedia: Character (computing)
  14. Wikipedia: Floating point
  15. Wikipedia: Garbage collection (computer science)
  16. Wikipedia: Immutable object
  17. Wikipedia: Integer
  18. Wikipedia: Integer (computer science)
  19. Wikipedia: Memory leak
  20. Wikipedia: String (computer science)
  21. Wikipedia: Unicode

Что такое переменные среды windows

Давайте разберемся в понятии, и так переменная окружения (environment variable)это специального рода ссылки уменьшенного размера, на определенные объекты операционной системы Windows, используемые разными программами для хранения информации и взаимодействия с ней. Можно провести аналогию с относительными ссылками на сайтах, где нет явного указания на протокол. Чаще всего это пути до конкретных директорий в ОС.

ИЛИ

Переменная среды — это динамический «объект» на компьютере, содержащий редактируемое значение, которое может использоваться одной или несколькими программами в Windows. Переменные среды помогают программам узнать, в какой каталог устанавливать файлы, где хранить временные файлы и где найти настройки профиля пользователя. Они помогают формировать среду, которую программы на вашем компьютере используют для запуска.

Где используют переменные среды Windows

Приведу несколько примеров:

В скриптах > когда нужно например каждому пользователю сделать какую-то настройку, для примера положить на рабочий стол новую папку с документами. Так как для каждого пользователя путь до рабочего стола свой, вида C:\Users\lacky\Desktop, а можно обратиться и по относительному пути за счет переменной %HOMEPATH%, если вы в проводнике введете %HOMEPATH%\Desktop, то попадете на рабочий стол текущего пользователя.

  • в групповой политике, для настройки пользовательских окружений, например перемещаемые профили.
  • Оптимизация кода > если в коде очень часто используются одни и те же пути к файлам или папкам, а так же ключам реестра, вы можете легко назначить короткую переменную для дальнейшего использования. Ниже я вам приведу сводный список по переменным средам windows 10 и предыдущих версий, а так же покажу как их создавать и менять.

Все переменные среды Windows 10 и других версий в своем составе имеют специальный оператор %. Он необходим, чтобы операционная система могла обработать поисковый запрос. Простой пример вы ищите папку TEMP и не знаете, где она располагается, вводите %TEMP% и поиск будет на всех локальных дисках и разделах.

Переменные среды передают информацию о вашем сеансе входа в систему на ваш компьютер. Например, когда приложению необходимо определить, где по умолчанию сохранять файл данных, оно обычно вызывает переменную среды HOMEPATH. Вероятно, вы никогда не устанавливали переменную HOMEPATH самостоятельно, и тем не менее она существует, потому что большинство переменных сред управляются вашей операционной системой. Мастер установки, такой как платформа Nullsoft Scriptable Install System (NSIS) с открытым исходным кодом, обновляет переменные среды при установке нового приложения. Иногда, когда вы устанавливаете что-то за пределами предполагаемого набора инструментов вашей операционной системы, вам, возможно, придется самостоятельно управлять переменной среды. Или вы можете добавить переменную среды в соответствии со своими предпочтениями.

Список переменных среды Windows в таблице

Для удобства посетителей сайта я собрал в общую таблицу переменные, их описание и значения в операционной системе Windows. В подавляющем большинстве случаев, системная папка расположена на диске «C:», поэтому пути в значениях даны для этого диска.

Переменная Назначение Значение переменной
%ALLUSERSPROFILE% Папка ProgramData C:\ProgramData
%APPDATA% Папка размещения данных программ C:\Users\User\AppData\Roaming
%CommonProgramFiles% Папка Common Files в Program Files C:\Program FilesCommon Files
%CommonProgramW6432% Папка Common Files в Program Files C:\Program Files\Common Files
%COMPUTERNAME% Имя компьютера DESKTOP-XXXXXXX
%ComSpec% Запуск командной строки C:\WINDOWS\system32\cmd.exe
%DriverData% Папка DriverData C:\Windows\System32\Drivers\DriverData
%HOMEDRIVE% Системный диск C:
%HOMEPATH% Папка профиля пользователя C:\Users\User
%LOCALAPPDATA% Папка локальных данных приложений C:\Users\User\AppData\Local
%LOGONSERVER% Имя контроллера домена \DESKTOP-XXXXXXX
%NUMBER_OF_PROCESSORS% Количество потоков процессора
%OneDrive% Папка OneDrive C:\Users\User\OneDrive
%Path% Путь поиска исполняемых файлов C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;…
%PATHEXT% Исполняемые расширения файлов .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC
%PROCESSOR_ARCHITECTURE% Архитектура процессора AMD64; x86; IA64
%PROCESSOR_IDENTIFIER% Описание процессора
%PROCESSOR_LEVEL% Номер модели процессора
%PROCESSOR_REVISION% Ревизия процессора
%ProgramData% Папка ProgramData C:\ProgramData
%ProgramFiles% Папка ProgramFiles C:\Program Files
%ProgramFiles(x86)% Папка ProgramFiles(x86) C:\Program Files (x86)
%ProgramW6432% Папка ProgramFiles C:\Program Files
%PROMPT% Возвращение параметров командной строки
%PSModulePath% Пути к расположению модулей PowerShell C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
%PUBLIC% Папка «Общие» в профиле пользователей C:\Users\Public
%SystemDrive% Системный диск с Windows C:
%SystemRoot% Папка Windows C:\Windows
%TEMP% Временный каталог C:\Users\User\AppData\Local\Temp
%TMP% Временный каталог C:\Users\User\AppData\Local\Temp
%USERDOMAIN% Имя домена DESKTOP-XXXXXXX
%USERNAME% Имя пользователя User
%USERPROFILE% Профиль пользователя C:\Users\User
%Windir% Папка Windows C:\Windows

Системные $_ и $PSItem и конвейер

Когда мы работаем с существующими командами Powershell бывает необходимо передать определенное значение в параметр. На примере ниже у нас есть список сервисов статус которых мы хотим получить:

На самом деле команда сама подставляет нужные переменные под нужные параметры, которые в целом выглядят так:

Если вы читали статью про функции Powershell, то знаете, что существуют параметры принимающие значения из конвейера и которые этого делать не могут. Что бы увидеть какие параметры принимают данные из конвейера используйте Get-Help:

При создании командлетов указывается какие параметры будут принимать значения из конвейера, какие только по имени (свойству) и каким достаточно только значения. Если нам нужно подставить наши значения в определенный параметр в конвейере используется специальная переменная «$PSItem» или «$_» . Они так же используются в выражениях (ScriptBlock). Например выполнив следующую команду мы получим ошибку:

  • Get-Service : Не удается найти службу с именем службы.
  • Get-Service : Cannot find any service with service name.

Этот тип массивов относится к именованным, а это значит что-либо должно совпадать имя/свойство (оно Service вместо Name) либо мы должны передаваться только значение. Первый вариант это корректно переименовать хэш-таблицу:

Пример выше сработает если только именованный массив относится к PSCustomObject. Если бы это был hashtable, то была бы ошибка.

Второй вариант это напрямую передавать значение:

Чаще и удобнее всего значения подставлять так:

Еще один пример использования $PSItem и $_ в выражениях (ScriptBlock). Вам наверняка часто требуется изменить вывод команд. На примере ниже я получаю сервис, который запущен и содержит в имени «WinR»:

Where-Object — самый частый пример использования таких переменных, так как по умолчанию он не позволяет использовать несколько условий.

Properties

Properties really take center-stage in PowerShell, perhaps even more so than variables. With PowerShell, you are passing around objects but what you are actually using are their properties. If you invoke, for example, Get-Process, you get a table where each row contains the properties of a returned process. Get-Process by default outputs 8 properties (Handles, Name, etc.). There are actually dozens more, though, and you could show whichever ones you like simply by piping Get-Process into Select-Object. In terse form you might write ps | select -prop Name, StartTime. The entries in this section provide a good grounding in the nature of properties: how to show some or all of them, how to see if one exists, how to add or remove them, and so forth. Possibly the most exciting: if you have worked extensively in .NET you have likely wanted some way to dump complex objects for examination-a non-trivial task requiring either writing your own dumper or using a library. With PowerShell-just one command (entry 22).

#

Action

Command

Example

Output

1

Test if property exists

Get-Member -InputObject object -Name propertyName

“{0},{1}” -f (gm -input (1..5) -name count), (1..5).count

(gm -input (1..10) -name stuff)

True,5

False

2

Filter output displaying default properties

any | Where-Object

ps | ? { $_.VM -gt 100MB }

 

3

Filter output displaying selected properties

any | Where-Object  | Select-Object

ps | ? { $_.VM -gt 100MB } | select name, vm

 

4

Display default properties in default format

any

Get-Process uses Format-Table

Get-WmiObject win32_diskdrive uses Format-List

 

5

Display default properties (table)

any | Format-Table

ps | ? { $_.Name -match “^m” } | ft

 

6

Display default properties (list)

any | Format-List

ps | ? { $_.Name -match “^m” } | fl

 

7

Display default properties (grid)

any |Out-GridView

Get-PsDrive | Out-GridView

 

8

Display all properties (table)

any | Format-Table -force *

ps | ft -force *

 

9

Display all properties (list)

any | Format-List -force *

gwmi win32_diskdrive | fl -force *

 

10

Display all properties (grid)

any | Select-Object *| Out-GridView

Get-PsDrive | Select * | Out-GridView

 

11

Display selected properties (table)

any | Format-Table -Property wildcardExpr

ps | ? { $_. Name -match “^m” } | ft st*

 

12

Display selected properties (list)

any | Format-List -Property wildcardExpr

ps | ? { $_. Name -match “^m” } | fl st*

 

13

Display selected properties (list or table)

any | Select-Object -Property wildcardExpr

ps | ? { $_. Name -match “^m” } | select s* (list)

ps | ? { $_. Name -match “^m” } | select start* (table)

 

14

Display calculated property
(see Using Calculated Properties)

any | Select-Object @{Name = name;Expression = scriptBlock}

ls . | select Name,
@{n=”Kbytes”;e={ “{0:N0}” -f ($_.Length / 1Kb) }}

Name         Kbytes

—-         ——

file1.txt    1,088

file2.txt    269

. . .

15

Add one property to an object

$obj | Add-Member -MemberType NoteProperty
-Name name -Value value

$obj | Add-Member -NotePropertyName name
-NotePropertyValue value

$a = New-Object PSObject; $a | Add-Member “foo” “bar”; $a

foo

bar

16

Add multiple properties to a new object

$obj = New-Object PSObject -Property hashTable

$properties = @{name=”abc”; size=12; entries=29.5 }; $a = New-Object PSObject -Property $properties; $a | ft -auto

entries name size

——- —- —-

   29.5 abc    12

17

Add multiple properties to an existing object

$obj | Add-Member -NotePropertyMembers hashTable

$a | Add-Member -NotePropertyMembers  @{ “x”=5;”y”=1}; $a

entries name size x y

——- —- —- – –

   29.5 abc    12 5 1

18

Remove a property from one object

(Remove a Member from a PowerShell Object?)

$obj.PSObject.Properties.Remove(propertyName)

$a.PSObject.Properties.Remove(“name”)

entries size

——- —-

   29.5   12

19

Remove property from a collection of objects (Remove a Member from a PowerShell Object?)

any | Select-Object -Property *
-ExcludeProperty propertyName

ls | select -property * -exclude Mode

 

20

List property names of an object type

any | Get-Member -MemberType Property

($PWD | gm -Member Property).Name

Drive

Path

Provider

ProviderPath

21

List property names with their associated values (really shallow)

any | Format-List

any | Select-Object -Property *

$PWD | fl

$PWD | select *

Drive : C

Provider : Core\FileSystem

ProviderPath : C:\usr

Path : C:\usr

22

List property names with their associated values (adjustable shallow to deep)

any | ConvertTo-Json -Depth depth

$PWD | ConvertTo-Json -Depth 1 

 

(This last snippet, no. 22, is just one-level deeper than the “really shallow” approach in the previous entry (21). But wherever you see type names, there is still room for further expansion-just increase the depth value. Note that the list will get very big very fast-even a depth of 3 is quite voluminous!)

Очистка переменных в PowerShell

Чтобы очистить значение переменной в PowerShell, вы можете использовать командлет Clear-Variable, за которым следует имя переменной. Вы можете очистить переменную с помощью Remove-Variable или просто установить для нее значение $null. Например:

Это приведет к удалению значения, хранящегося в переменной «myVariable». Аналогичным образом вы можете очистить несколько переменных, используя подстановочные знаки, например:

Чтобы очистить все переменные в PowerShell, вы можете просто закрыть и снова открыть консоль PowerShell или PowerShell ISE. Вы также можете присвоить значению переменной $null, чтобы очистить ее значение.

Работа в PowerShell ISE

Терминал PowerShell удобен для выполнения небольших коротких однострочных задач. Чтобы создавать и сохранять сложные скрипты, есть интегрированная среда сценариев.

Скриншот: Skillbox Media

Важно!

PowerShell ISE предназначен для версий языка 5.1 и младше. Для более старших версий Microsoft рекомендует использовать Visual Studio Code с расширением PowerShell.

PowerShell ISE состоит из трёх основных окон:

  • область сценариев в верхней части экрана — в ней пишут скрипты;
  • область консоли в нижней части экрана — работает так же, как обычный терминал, здесь можно писать команды в интерактивном режиме;
  • панель команд в правой части экрана — полный справочник команд PowerShell с конструктором, в котором можно указать значения нужных параметров.

Комментарии в коде

PowerShell позволяет вставлять в код комментарии. Они никак не влияют на выполнение скрипта и нужны людям, которые будут читать вашу программу. Однострочный комментарий начинается с символа #, а многострочный обрамляется с двух сторон символами <# и #>.

Скриншот: Skillbox Media

Правила хорошего кода

Любой код чаще читают, чем пишут, и важно делать его понятным для человека. Разработчики PowerShell договорились между собой о едином своде правил и выпустили стайлгайд

Вот несколько правил оттуда.

Используйте нотацию PascalCase в названиях командлетов, функций, параметров, свойств, методов, переменных и классов. Неправильно писать: get-service, Get-service, GET-SERVICE. Правильно: Get-Service.

Пишите полные названия командлетов. Алиасы удобны для работы в интерактивном режиме, но в скриптах могут затруднять чтение команд. Неправильно: dir, gci, ls. Правильно: Get-ChildItem.

One True Brace Style при оформлении вложенности. Если вы где-то используете фигурные скобки, то код внутри них отбивается табуляцией (четыре пробела), а сами скобки ставятся так:

Исключение из прошлого правила — когда код в фигурных скобках совсем небольшой, его можно записать в одну строку. Например:

Комментируйте код. Так будет гораздо проще разобраться, что он делает и как работает. Причём как другому человеку, так и вам самим через полгода.

Запуск скриптов

В PowerShell ISE можно выполнить код целиком или частично, есть инструменты отладки. Скрипты сохраняются в файлах с расширением .ps1. Но запустить их двойным кликом не получится — нужно нажать правую кнопку мыши и в появившемся окне выбрать Выполнить с помощью PowerShell.

Также запустить скрипт можно из оболочки. Например, в каталоге C:\Scripts есть файл test_script.ps1. Выполнить его можно:

  • командой PowerShell -File C:\Scripts\test_script.ps1, запущенной из любого места;
  • командой .\test_script.ps1, запущенной, когда вы находитесь в каталоге C:\Scripts.

Политика выполнения

По умолчанию запускать любые файлы с PowerShell-скриптами запрещено. Сделано это в целях безопасности. Узнать нынешнюю политику выполнения можно с помощью командлета Get-ExecutionPolicy. Вот какая она может быть:

  • Restricted (установлена по умолчанию) — запрещено запускать любые скрипты.
  • AllSigned — разрешено запускать только скрипты, которые были подписаны доверенным разработчиком.
  • RemoteSigned — разрешено запускать подписанные доверенным разработчиком и собственные скрипты.
  • Unrestricted — разрешено запускать любые скрипты.

Чтобы ваши ps1-файлы запускались, нужно заменить политику выполнения на RemoteSigned. Для этого откройте PowerShell от имени администратора и выполните команду:

Чтобы подтвердить действие, введите y.

Управление пакетами (автоустановка программ)

Модуль: PackageManagement

В Windows 10 встроено управление поставщиками пакетов (оно же OneGet), с помощью которого можно тихо установить сразу несколько приложений одной командой! Это похоже на Apt-Get в Linux, но можно провести и параллели с Ninite или InstallPack

Примечание. Можно использовать этот модуль, не устанавливая WMF 5.0. Предварительная версия модуля для PS 4.0 и 3.0 доступна отдельно — март 2016 тут, а более свежие ищите поиском в центре загрузки по запросу PackageManagement PowerShell Modules Preview.

Установка программ

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

#Разрешить установку подписанных пакетов из Интернета
Set-ExecutionPolicy RemoteSigned
#Установить поставщик Chocolatey
Get-PackageProvider –Name Chocolatey -ForceBootstrap
#Сделать Chocolatey доверенным
Set-PackageSource -Name Chocolatey -Trusted
#Установить программы
Install-Package NotepadPlusPlus, vlc, firefox, filezilla, sysinternals -Verbose -Force -ProviderName chocolatey
#Добавить путь к исполняемым файлам (sysinternals) в PATH
setx PATH "$env:path;C:\Chocolatey\bin" -m

Поставщик скачивает в C:\Chocolatey\lib пакет, в основе которого лежит скрипт chocolateyInstall.ps1. Он загружает установщик программы с официального сайта в папку %temp%\Chocolatey и запускает его в режиме тихой установки. Простейший пример – Notepad++.

Install-ChocolateyPackage 'notepadplusplus' 'exe' '/S' 'https://notepad-plus-plus.org/repository/6.x/6.9/npp.6.9.Installer.exe'

Поиск программ

В репозиториях много программ, все самые популярные точно есть.

Find-Package '*zip*','*commander*' -ProviderName Chocolatey

Удаление программ

Uninstall-Package -name filezilla

В идеале установка и удаление пакета должно повлечь тихое удаление программы, но реализация зависит от автора пакета и возможностей установщика. Бывают случаи когда запускается интерактивная оболочка

Ссылки по теме OneGet и тихой установки:

  • Пошаговое руководство по установке программ из PowerShell (Дмитрий Буланов)
  • Командлеты управления пакетами (TechNet)
  • Типы инсталляторов и ключи тихой установки
  • Сайт автоустановки Windows и форум автоустановки программ

Работа с файлами

PowerShell предоставляет удобные средства для работы с файлами. Вот некоторые ключевые методы:

Для создания файла используйте командлет с указанием пути к файлу:

New-Item -Path "C:\путь\к\файлу\новыйфайл.txt" -ItemType File

Чтобы записать данные в файл, используйте или :

"Содержимое файла" | Out-File -FilePath "C:\путь\к\файлу\новыйфайл.txt"
Set-Content -Path "C:\путь\к\файлу\новыйфайл.txt" -Value "Новое содержимое файла"

Для чтения содержимого файла в массив используйте :

$содержимое = Get-Content -Path "C:\путь\к\файлу\новыйфайл.txt"

Для получения информации о файле (размер, дата создания и др.) используйте :

$информацияОФайле = Get-Item -Path "C:\путь\к\файлу\новыйфайл.txt"

Для копирования файла в другое место используйте :

Copy-Item -Path "C:\путь\к\файлу\новыйфайл.txt" -Destination "C:\путь\к\копия\новыйфайл.txt"

Для удаления файла воспользуйтесь командлетом :

Remove-Item -Path "C:\путь\к\файлу\новыйфайл.txt" -Force

Помните, что операции удаления файлов необратимы, поэтому будьте осторожны при их использовании.

Создаем переменные среды windows 10 (Графический метод)

ПО мимо уже имеющихся переменных Windows 10, вы можете создать и новые, это очень легко и не запрещается. Что от вас требуется, вам необходимо зайти в свойства системы. Тут несколько методов, если мы говорим про Windows 10, то можно сделать через правый клик по кнопке «Пуск», выбрав пункт система.

Универсальный метод, это зайти в свойства моего компьютера или нажать сочетание клавиш WIN+Pause Breake.

С окне свойства системы, вы должны перейти в пункт «Дополнительные параметры системы»

Далее пункт переменные среды.

И перед вами два вида переменных сред Windows:

  • Временные переменные temp
  • Системные переменные

И те и другие можно легко изменить или создать.

Для примера я создам новую системную переменную, назову ее SYSPREP и укажу путь до папки C:\Windows\System32\Sysprep

Проверяю, что все добавилось. И теперь вбив переменную %SYSPREP% у меня откроется C:\Windows\System32\Sysprep.

Как видите тут ничего сложного нет, благодаря вот таким вещам вы можете сильно упростить себе жизнь и экономить много времени.

Useful PowerShell Environment Variables

Like many other Windows applications, PowerShell has some environment variables of it’s own. Two useful environment variables to know about are and .

The environment variable stores the current PowerShell execution policy. It is created if a session-specific PowerShell execution policy is set by:

  • Running the cmdlet with a parameter of
  • Running the executable to start a new session, using the command line parameter to set a policy for the session.

The environment variable contains the path that PowerShell searches for modules if you do not specify a full path. It is formed much like the standard environment variable, with individual directory paths separated by a semicolon.

The 3 different scopes for environment variables

On Windows, there are three different scopes for environment variables. These scopes follow a Machine > User > Process hierarchy, and each of them is capable of overwriting the parent one if needed.

Machine (system) scope

The machine or system scope contains all environment variables that are related to the system and are associated with Windows instances. System variables can be seen and accessed by any user accessing the system. However, you need to have sufficient privileges to be able to change these variables.

User scope

The user scope contains the environment variables linked to the user currently running processes on Windows. They can take priority over the machine or system variables, and with sufficient privileges, they can overwrite the system scope variables that have the same name.

Process scope

The process scope contains all the environment variables associated with the process or PowerShell session that’s currently running. Environment variables under the process scope are a combination of both Machine and User scopes, and they’re usually inherited from the parent process along with a few Windows-created dynamic variables.

Понравилась статья? Поделиться с друзьями:
Jsk-oren
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: