Windows powershell in action на русском

Amazon.com сообщает:PowerShell replaces cobbled-together assemblies of third-party management tools with an elegant programming language and a powerful scripting shell for the Windows environment. In the tradition of Manning`s ground breaking 'In ...

Windows PowerShell in action

Amazon.com сообщает:PowerShell replaces cobbled-together assemblies of third-party management tools with an elegant programming language and a powerful scripting shell for the Windows environment. In the tradition of Manning`s ground breaking ‘In Action’ series, this book comes from right from the source.

Скачать книгу «Windows PowerShell in action»

О книге

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

Одной из заметных произведений, написанных в жанре компьютерная литература, является работа Payette Bruce «Windows PowerShell in action». С этой книгой ощущаешь не только интерес к судьбам героев, но и интерес к тому, что может произойти с любым человеком. Все герои объемные, характерные, вызывающие отклик у читателя.

Только листая страницу за страницей, понимаешь, сколь глубоки идеи писателя, отразившего в книге то, что на самом деле волнует всех нас. Это такое произведение, которое приносит не только удовольствие при чтении, но и развивает духовно. После прочтения книги понадобится ещё какое-то время, чтобы осмыслить рассказанное и сделать выводы для себя. На сайте есть возможность читать книгу онлайн или скачать в формате pdf.

Популярные книги жанра «компьютерная литература»

С этой книгой читают

Хитрости Windows 7. Для профессионалов скачать

Хитрости Windows 7. Для профессионаловКарп Дэвид

Windows 7 — это, без сомнения, операционная система нового поколения. Но, несмотря на это, она по-прежнему содержит немало тонкостей, способных сбить с толку любого, даже…

рейтинг книги

Windows XP скачать

Windows XPЛеонтьев Виталий Петрович

Windows XP — это одна из самых популярных операционных систем. Дома, на работе, в Интернет-кафе вы не сможете работать на компьютере, не умея работать с этой…

рейтинг книги

Лучшие программы для Windows скачать

Лучшие программы для WindowsЛеонтьев Виталий Петрович

Современный сборник программ для Windows, составленный автором популярнейшей «Энциклопедии персонального компьютера» Виталием Леонтьевым. Учтены все новые тенденции,…

рейтинг книги

Системное программирование в среде Windows скачать

Системное программирование в среде WindowsХарт Джонсон

Эта книга посвящена вопросам разработки приложений с использованием интерфейса прикладного программирования операционных систем компании Microsoft (Windows 9х, Windows…

рейтинг книги

Осваиваем ноутбук с операционной системой Windows 7 скачать

Чужая. Road Action скачать

Чужая. Road ActionВладимир Адольфыч Нестеренко

Формально «Чужая» – это сценарий, но читается как захватывающий роман.1990-е. Бандитский Киев. Бригада из четырех бойцов получает задание доставить из Праги девушку по…

рейтинг книги

Программирование в сетях Microsoft Windows скачать

Программирование в сетях Microsoft WindowsДжонс Энтони, Оланд Джим

Книга знакомит читателя с многообразием сетевых функций ОС семей- ства Windows. Обсуждается разработка сетевых приложений на платформе Win32 с использованием интерфейсов…

рейтинг книги

Программирование на Python. Том 1 скачать

Программирование на Python. Том 1Лутц Марк

Если Вы овладели основами языка Python, и не знаете в каком направлении теперь двигаться, какие книги читать и что делать — книга «Программирование на Python. Том 1″…

рейтинг книги

Содержание

  1. Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности
  2. Основные возможности
  3. Оболочка и среда разработки
  4. Командлеты
  5. Сценарии, функции, модули и язык PowerShell
  6. Конвейеры
  7. Запуск задач в фоновом режиме
  8. Удаленное выполнение команд
  9. Версии PowerShell
  10. Итоги
  11. Start-Process
  12. Syntax
  13. Description
  14. Examples
  15. Example 1: Start a process that uses default values
  16. Example 2: Print a text file
  17. Example 3: Start a process to sort items to a new file
  18. Example 4: Start a process in a maximized window
  19. Example 5: Start PowerShell as an administrator
  20. Example 6: Using different verbs to start a process
  21. Example 7: Specifying arguments to the process
  22. Example 8: Create a detached process on Linux
  23. Parameters
  24. Inputs
  25. Outputs
  26. Notes
  27. Approved Verbs for PowerShell Commands
  28. Verb Naming Recommendations
  29. Similar Verbs for Different Actions
  30. New vs. Set
  31. Find vs. Search
  32. Get vs. Read
  33. Invoke vs. Start
  34. Установка PowerShell в Windows
  35. Установка пакета MSI
  36. Установка администратором из командной строки
  37. Установка ZIP-пакета
  38. Установка PowerShell с помощью Winget
  39. Установка из Microsoft Store
  40. Известные ограничения
  41. Установка предварительной версии
  42. Поддержка Центра обновления Майкрософт в PowerShell 7.2.
  43. Обновление существующей установки
  44. Развертывание в Windows 10 IoT Корпоративная
  45. Развертывание в Windows 10 IoT Базовая
  46. Развертывание на Nano Server
  47. Автономное развертывание PowerShell
  48. Автономное PowerShell в сети
  49. Удаленное взаимодействие PowerShell
  50. Поддерживаемые версии Windows
  51. Поддержка установки

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности

Исторически утилиты командной строки в Unix-системах развиты лучше чем в Windows, однако с появлением нового решения ситуация изменилась.

Windows PowerShell позволяет системным администраторам автоматизировать большинство рутинных задач. С ее помощью можно менять настройки, останавливать и запускать сервисы, а также производить обслуживание большинства установленных приложений. Воспринимать синее окошко как еще один интерпретатор команд было бы неправильно. Такой подход не отражает сути предложенных корпорацией Microsoft инноваций. На самом деле возможности Windows PowerShell гораздо шире: в небольшом цикле статей мы попробуем разобраться, чем решение Microsoft отличается от более привычных нам средств.

image loader

Основные возможности

Windows PowerShell позволяет:

Оболочка и среда разработки

Существует Windows PowerShell в двух ипостасях: помимо эмулятора консоли с командной оболочкой есть интегрированная среда сценариев (Integrated Scripting Environment — ISE). Чтобы получить доступ к интерфейсу командной строки достаточно выбрать соответствующий ярлык в меню Windows или запустить powershell.exe из меню «Выполнить». На экране появится синее окошко, заметно отличающееся по возможностям от допотопного cmd.exe. Там есть автодополнение и другие фишки, привычные пользователям командных оболочек для Unix-систем.

image loader

Для работы с оболочкой нужно запомнить некоторые сочетания клавиш:

image loader

Windows PowerShell ISE является полноценной средой разработки с поддерживающим вкладки и подсветку синтаксиса редактором кода, конструктором команд, встроенным отладчиком и другими программистскими радостями. Если в редакторе среды разработки после имени команды написать знак дефис, вы получите в выпадающем списке все доступные параметры с указанием типа. Запустить PowerShell ISE можно либо через ярлык из системного меню, либо с помощью исполняемого файла powershell_ise.exe.

image loader

Командлеты

Помимо Get в командлетах для обозначения действий используются и другие глаголы (и не только глаголы, строго говоря). В списке ниже мы приведем несколько примеров:

Add — добавить;
Clear — очистить;
Enable — включить;
Disable — выключить;
New — создать;
Remove — удалить;
Set — задать;
Start — запустить;
Stop — остановить;
Export — экспортировать;
Import — импортировать.

Есть системные, пользовательские и опциональные командлеты: в результате выполнения все они возвращают объект или массив объектов. К регистру они не чувствительны, т.е. с точки зрения интерпретатора команд нет разницы между Get-Help и get-help. Для разделения используется символ ‘;’, но ставить его обязательно только если в одной строке выполняется несколько командлетов.

Командлеты Windows PowerShell группируются в модули (NetTCPIP, Hyper-V и т.д.), а для поиска по объекту и действию существует командлет Get-Command. Показать справку по нему можно так:

image loader

Справка в Windows PowerShell обновляется командлетом Update-Help. Если строка команд получается слишком длинной, аргументы командлета можно перенести на следующую, написав служебный символ ‘`’ и нажав Enter — просто закончить писать команду на одной строке и продолжить на другой не получится.

Ниже приведем несколько примеров распространенных командлетов:

Get-Process — показать запущенные в системе процессы;
Get-Service — показать службы и их статус;
Get-Content — вывести содержимое файла.

Для часто используемых командлетов и внешних утилит в Windows PowerShell есть короткие синонимы — алиасы (от англ. Alias). Например, dir — алиас Get-ChildItem. Есть в списке синонимов и аналоги команд из Unix-систем (ls, ps и т.д.), а командлет Get-Help вызывается командой help. Полный список синонимов можно посмотреть с помощью командлета Get-Alias:

image loader

Сценарии, функции, модули и язык PowerShell

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

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

image loader

PowerShell для этого придется запустить от имени администратора, хотя с помощью специального параметра можно изменить политику и для текущего пользователя.

Пишутся скрипты на объектно-ориентированном языке программирования, команды которого именуются по тому же принципу, что и рассмотренные ранее командлеты: «Действие-Объект» («Глагол-Существительное»). Основное его предназначение — автоматизация задач администрирования, но это полноценный интерпретируемый язык, в котором есть все необходимые конструкции: условный переход, циклы, переменные, массивы, объекты, обработка ошибок и т.д. Для написания сценариев годится любой текстовый редактор, но удобнее всего запустить Windows PowerShell ISE.

Конвейеры

В последнем примере мы применили знакомую пользователям оболочек для Unix-систем конструкцию. В Windows PowerShell вертикальная черта также позволяет передать выход одной команды на вход другой, но в реализации конвейера есть и существенная разница: речь здесь идет уже не о наборе символов или каком-то тексте. Встроенные командлеты или пользовательские функции возвращают объекты или массивы объектов, а также могут получать их на входе. Как в Bourne shell и его многочисленных последователях, в PowerShell с помощью конвейера упрощается выполнение сложных задач.

Простейший пример конвейера выглядит так:

image loader

Сначала выполняется командлет Get-Service, а потом все полученные им службы передаются на сортировку по свойству Status командлету Sort-Object. В какой именно аргумент передается результат работы предыдущего участка конвейера, зависит от его типа — обычно это InputObject. Подробнее этот вопрос будет рассматриваться в посвященной языку программирования PowerShell статье.

При желании цепочку можно продолжить и передать результат работы Sort-Object еще одному командлету (выполняться они будут слева направо). Кстати, пользователям Windows доступна и привычная всем юниксоидам конструкция для постраничного вывода:

Запуск задач в фоновом режиме

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

Start-Job — запуск фоновой задачи;
Stop-Job — остановка фоновой задачи;
Get-Job — просмотр списка фоновых задач;
Receive-Job — просмотр результата выполнения фоновой задачи;
Remove-Job — удаление фоновой задачи;
Wait-Job — перевод фоновой задачи обратно в консоль.

Для запуска фоновой задачи мы используем командлет Start-Job и в фигурных скобках указываем команду или набор команд:

image loader

Фоновыми задачами в Windows PowerShell можно манипулировать, зная их имена. Для начала научимся их отображать:

image loader

Теперь покажем результат работы задания Job1:

image loader

Всё довольно просто.

Удаленное выполнение команд

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

Версии PowerShell

image loader

Также можно воспользоваться командлетом:

image loader

То же самое делается и с помощью командлета Get-Host. На самом деле вариантов множество, но для их применения нужно изучить язык программирования PowerShell, чем мы и займемся в следующей статье.

Итоги

Источник

Start-Process

Starts one or more processes on the local computer.

Syntax

Description

The Start-Process cmdlet starts one or more processes on the local computer. By default, Start-Process creates a new process that inherits all the environment variables that are defined in the current process.

To specify the program that runs in the process, enter an executable file or script file, or a file that can be opened by using a program on the computer. If you specify a non-executable file, Start-Process starts the program that is associated with the file, similar to the Invoke-Item cmdlet.

You can use the parameters of Start-Process to specify options, such as loading a user profile, starting the process in a new window, or using alternate credentials.

Examples

Example 1: Start a process that uses default values

This example starts a process that uses the Sort.exe file in the current folder. The command uses all of the default values, including the default window style, working folder, and credentials.

Example 2: Print a text file

This example starts a process that prints the C:PS-TestMyFile.txt file.

Example 3: Start a process to sort items to a new file

This example starts a process that sorts items in the Testsort.txt file and returns the sorted items in the Sorted.txt files. Any errors are written to the SortError.txt file. The UseNewEnvironment parameter specifies that the process runs with its own environment variables.

This example uses splatting to pass parameters to the cmdlet. For more information, see about_Splatting.

Example 4: Start a process in a maximized window

This example starts the Notepad.exe process. It maximizes the window and retains the window until the process completes.

Example 5: Start PowerShell as an administrator

This example starts PowerShell by using the Run as administrator option.

Example 6: Using different verbs to start a process

This example shows how to find the verbs that can be used when starting a process. The available verbs are determined by the filename extension of the file that runs in the process.

Example 7: Specifying arguments to the process

Both commands start the Windows command interpreter, issuing a dir command on the Program Files folder. Because this foldername contains a space, the value needs surrounded with escaped quotes. Note that the first command specifies a string as ArgumentList. The second command is a string array.

Example 8: Create a detached process on Linux

On Windows, Start-Process creates an independent process that remains running independently of the launching shell. On non-Windows platforms, the newly started process is attached to the shell that launched. If the launching shell is closed, the child process is terminated.

In this example, Start-Process is running the Linux nohup command, which launches pwsh as a detached process. For more information, see the man page for nohup.

Parameters

Specifies parameters or parameter values to use when this cmdlet starts the process. Arguments can be accepted as a single string with the arguments separated by spaces, or as an array of strings separated by commas. The cmdlet joins the array into a single string with each element of the array separated by a single space.

The outer quotes of the PowerShell strings are not included when the ArgumentList values are passed to the new process. If parameters or parameter values contain a space or quotes, they need to be surrounded with escaped double quotes. For more information, see about_Quoting_Rules.

For the best results, use a single ArgumentList value containing all of the arguments and any needed quote characters.

Type: String [ ]
Aliases: Args
Position: 1
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Prompts you for confirmation before running the cmdlet.

Type: SwitchParameter
Aliases: cf
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Specifies a user account that has permission to perform this action. By default, the cmdlet uses the credentials of the current user.

Type a user name, such as User01 or Domain01User01, or enter a PSCredential object generated by the Get-Credential cmdlet. If you type a user name, you’re prompted to enter the password.

Credentials are stored in a PSCredential object and the password is stored as a SecureString.

For more information about SecureString data protection, see How secure is SecureString?.

Type: PSCredential
Aliases: RunAs
Position: Named
Default value: Current user
Accept pipeline input: False
Accept wildcard characters: False

If you specify only a filename, use the WorkingDirectory parameter to specify the path.

Type: String
Aliases: PSPath, Path
Position:
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Indicates that this cmdlet loads the Windows user profile stored in the HKEY_USERS registry key for the current user. The parameter does not apply for non-Windows systems.

This parameter does not affect the PowerShell profiles. For more information, see about_Profiles.

Type: SwitchParameter
Aliases: Lup
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Start the new process in the current console window. By default on Windows, PowerShell opens a new window. On non-Windows systems, you never get a new window.

You cannot use the NoNewWindow and WindowStyle parameters in the same command.

The parameter does not apply for non-Windows systems.

Type: SwitchParameter
Aliases: nnw
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Returns a process object for each process that the cmdlet started. By default, this cmdlet does not generate any output.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Specifies a file. This cmdlet sends any errors generated by the process to a file that you specify. Enter the path and filename. By default, the errors are displayed in the console.

Type: String
Aliases: RSE
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Specifies a file. This cmdlet reads input from the specified file. Enter the path and filename of the input file. By default, the process gets its input from the keyboard.

Type: String
Aliases: RSI
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Specifies a file. This cmdlet sends the output generated by the process to a file that you specify. Enter the path and filename. By default, the output is displayed in the console.

Type: String
Aliases: RSO
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Indicates that this cmdlet uses new environment variables specified for the process. By default, the started process runs with the environment variables inherited from the parent process.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Specifies a verb to use when this cmdlet starts the process. The verbs that are available are determined by the filename extension of the file that runs in the process.

The following table shows the verbs for some common process file types.

File type Verbs
.cmd Edit, Open, Print, RunAs, RunAsUser
.exe Open, RunAs, RunAsUser
.txt Open, Print, PrintTo
.wav Open, Play

To find the verbs that can be used with the file that runs in a process, use the New-Object cmdlet to create a System.Diagnostics.ProcessStartInfo object for the file. The available verbs are in the Verbs property of the ProcessStartInfo object. For details, see the examples.

The parameter does not apply for non-Windows systems.

Type: String
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Indicates that this cmdlet waits for the specified process and its descendants to complete before accepting more input. This parameter suppresses the command prompt or retains the window until the processes finish.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Shows what would happen if the cmdlet runs. The cmdlet is not run.

This parameter was introduced in PowerShell 6.0.

Type: SwitchParameter
Aliases: wi
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Specifies the state of the window that is used for the new process. The acceptable values for this parameter are: Normal, Hidden, Minimized, and Maximized. The default value is Normal.

You cannot use the WindowStyle and NoNewWindow parameters in the same command.

The parameter does not apply for non-Windows systems. When using on non-Windows systems, you never get a new window.

Type: ProcessWindowStyle
Accepted values: Normal, Hidden, Minimized, Maximized
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Specifies the location that the new process should start in. The default is the location of the executable file or document being started. Wildcards are not supported. The path name must not contain characters that would be interpreted as wildcards.

Type: String
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Inputs

None

You cannot pipe input to this cmdlet.

Outputs

None, System.Diagnostics.Process

This cmdlet generates a System.Diagnostics.Process object, if you specify the PassThru parameter. Otherwise, this cmdlet does not return any output.

Notes

By default, Start-Process launches a process asynchronously. Control is instantly returned to PowerShell even if the new process is still running.

If you do need to use Start-Process in a remote session, invoke it with the Wait parameter. Or you could use other methods to create a new process on the remote system.

When using the Wait parameter, Start-Process waits for the process tree (the process and all its descendants) to exit before returning control. This is different than the behavior of the Wait-Process cmdlet, which only waits for the specified processes to exit.

Источник

Approved Verbs for PowerShell Commands

PowerShell uses the term verb to describe a word that implies an action even if that word is not a standard verb in the English language. For example, the term New is a valid PowerShell verb name because it implies an action even though it is not a verb in the English language.

Verb Naming Recommendations

The following recommendations help you choose an appropriate verb for your cmdlet, to ensure consistency between the cmdlets that you create, the cmdlets that are provided by PowerShell, and the cmdlets that are designed by others.

You may get a complete list of verbs using the Get-Verb cmdlet.

Similar Verbs for Different Actions

The following similar verbs represent different actions.

New vs. Set

Use the New verb to create a new resource. Use the Set verb to modify an existing resource, optionally creating it if it does not exist, such as the Set-Variable cmdlet.

Find vs. Search

Use the Find verb to look for an object. Use the Search verb to create a reference to a resource in a container.

Get vs. Read

Use the Get verb to obtain information about a resource (such as a file) or to obtain an object with which you can access the resource in future. Use the Read verb to open a resource and extract information contained within.

Invoke vs. Start

Use the Invoke verb to perform synchronous operations, such as running a command and waiting for it to end. Use the Start verb to begin asynchronous operations, such as starting an autonomous process.

Источник

Установка PowerShell в Windows

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

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

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

Установка пакета MSI

Чтобы установить PowerShell в Windows, воспользуйтесь приведенными ниже ссылками для скачивания пакета установки с сайта GitHub.

После скачивания дважды щелкните файл установщика и следуйте инструкциям на экране.

Программа установки создает ярлык в меню Windows «Пуск».

PowerShell 7.1 устанавливается в новом каталоге и работает параллельно с Windows PowerShell 5.1. PowerShell 7.1 — это обновление на месте, при установке которого заменяется PowerShell 7.0.x и более ранних версий.

Если вам нужно запустить PowerShell 7.1 параллельно с другими версиями, используйте метод установки ZIP-архива, чтобы установить новую версию в другую папку.

Установка администратором из командной строки

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

В следующих примерах показано, как выполнить автоматическую установку PowerShell со всеми включенными параметрами.

Полный список параметров командной строки для Msiexec.exe см. здесь.

Установка ZIP-пакета

Для поддержки расширенных сценариев развертывания доступны ZIP-архивы двоичных файлов PowerShell. Скачайте один из следующих ZIP-архивов на странице с текущим выпуском.

Установка PowerShell с помощью Winget

Программа командной строки Winget (Диспетчер пакетов Windows) позволяет разработчикам обнаруживать, устанавливать, обновлять, удалять и настраивать приложения на компьютерах с Windows 10. Она является клиентским интерфейсом для службы Диспетчера пакетов Windows.

Список системных требований и инструкции по установке см. в документации по winget.

Для установки PowerShell с помощью опубликованных пакетов winget можно использовать следующие команды:

Найдите последнюю версию PowerShell.

Установка из Microsoft Store

Версия PowerShell 7.1 опубликована в Microsoft Store. Этот выпуск PowerShell можно найти на сайте Microsoft Store или в приложении Store в ОС Windows.

Пакет Microsoft Store обеспечивает следующие преимущества:

Известные ограничения

Пакеты Магазина Windows выполняются в песочнице приложения, которая виртуализует доступ к некоторым расположениям в файловой системе и реестре.

Установка предварительной версии

Предварительную версию PowerShell 7.2 можно скачать по следующей ссылке:

Поддержка Центра обновления Майкрософт в PowerShell 7.2.

В PowerShell 7.2 (релиз-кандидат 1) включена поддержка Центра обновления Майкрософт. При включении этой возможности вы будете получать последние обновления PowerShell 7 в традиционном потоке управления клиентского компонента Центра обновления Майкрософт, будь то Центр обновления Windows для бизнеса, WSUS, SCCM или интерактивное диалоговое окно Центра обновления Майкрософт в параметрах системы.

Пакет MSI для PowerShell 7.2 содержит следующие параметры командной строки:

Включение обновлений можно задать в предыдущей установке или в конфигурации вручную. При использовании ENABLE_MU=0 не удаляются существующие параметры. Кроме того, этот параметр может быть переопределен параметрами групповой политики, управляемыми администратором.

Обновление существующей установки

Для получения оптимального результата при обновлении используйте тот же метод установки, который вы использовали при первой установке PowerShell. При использовании разных методов установки PowerShell устанавливается в разные расположения. Если вы не знаете, как была выполнена установка PowerShell, вы можете сравнить расположение установки со сведениями о пакетах из этой статьи. Если установка выполнена с помощью пакета MSI, эти сведения будут отображаться в разделе Программы и компоненты Панели управления.

Развертывание в Windows 10 IoT Корпоративная

Windows 10 IoT Корпоративная поставляется со средой Windows PowerShell, которую можно использовать для развертывания PowerShell 7.

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

Развертывание в Windows 10 IoT Базовая

Windows PowerShell добавляется в Windows 10 IoT Базовая, если вы включаете функцию IOT_POWERSHELL, которую можно использовать для развертывания PowerShell 7. Действия, описанные выше для Windows 10 IoT Корпоративная, могут быть выполнены и для центра Интернета вещей.

Чтобы добавить последнюю версию PowerShell в образ для доставки, используйте команду Import-PSCoreRelease для включения пакета в рабочую область и добавления OPENSRC_POWERSHELL в образ.

Развертывание на Nano Server

В этих указаниях предполагается, что Nano Server — это операционная система для удаленного управления, в которой уже работает какая-либо версия PowerShell. Дополнительные сведения см. в разделе о средстве создания образов Nano Server.

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

В обоих случаях требуется ZIP-пакет выпуска Windows 10 семейства x64. Выполните команды в экземпляре PowerShell с ролью администратора.

Автономное развертывание PowerShell

Автономное PowerShell в сети

Разверните PowerShell в Nano Server, выполнив действия ниже.

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

Удаленное взаимодействие PowerShell

PowerShell поддерживает протокол удаленного взаимодействия PowerShell (PSRP) через SSH и WSMan. Дополнительные сведения см. в разделе:

Чтобы включить удаленное взаимодействие PowerShell через WSMan в более старых версиях Windows, необходимо соблюдать следующие предварительные требования.

Поддерживаемые версии Windows

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

Поддержка конкретной версии Windows определяется политиками жизненного цикла службы поддержки Майкрософт. Дополнительные сведения см. в разделе:

PowerShell поддерживается в Windows для перечисленных ниже архитектур процессора.

Windows 7.0 (LTS) 7.1 (текущая версия) 7.2 (LTS-предварительная версия)
Nano Server версии 1803+ x64, ARM32 X64 X64
Windows Server 2012 R2+ x64, x86 x64, x86 x64, x86
Windows Server Core 2012 R2+ x64, x86 x64, x86 x64, x86
Клиент Windows 10 или 11 x64, x86 x64, x86, ARM64 x64, x86, ARM64
Клиент Windows 8.1 x64, x86 x64, x86 x64, x86

Поддержка установки

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

Источник

Актуализированый список русскоязычных ресурсов по PowerShell доуступен на TechNet Wiki где его могут обновлять и дополнять все желающие.

На этой страничке я попробую собирать всевозможные доки и ссылки по PowerShell: книги, блоги, и т.п. В первую очередь внимание естественно уделяется русскоязычным ресурсам, но пока их к сожалению немного и преобладать будут английские…

Для начала.

Начать стоит со скачивания и установки PowerShell:

http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

В первую очередь следует ознакомиться с прилагающейся документацией, Getting Started и User Guide. Причем если вы установили Localized Package PowerShell, то эти доки будут на русском. Находятся они в C:WindowsSystem32WindowsPowerShellv1.0Documentsru-RU

Кроме того существует встроенная справка доступная в консоли с помощью команды Get-Help. Также её можно скачать в виде графического файла справки chm.

Вебкасты и скринкасты (на русском!)

Posh Basics Screencast — Скринкаст демонстрирующий основы работы в консоли PowerShell, и некоторые вещи которые проще показать чем описать в блоге. Многие хвалят 🙂

PowerTab Screencast — Демонстрация установки и использования скрипта PowerTab. IntelliSense в консоли — впечатляет 😉

PowerShell: Часто задаваемые вопросы — Вебкаст с онлайн ответами, в основном в виде демонстраций. Докладчики: Я и Андрей Бешков (Microsoft)

Управление Windows Vista с помощью Windows PowerShell — примеры практического использования PowerShell для автоматизации Vista.

Разработка командлетов для PowerShell — вебкаст Дмитрия Сотникова, с демонстрацией процесса создания простого командлета. Очень рекомендуется разработчикам!

Скринкасты о PowerShell на TechDays.ru. В том числе парочка моих 🙂

Статьи (на русском!)

Статья Windows PowerShell от Сергея Вальковского на WindowsFaq.ru. Очень рекомендую.

Знакомимся с PowerShell — Большая статья Андрея Бирюкова на русском языке.

PowerShell: Часто задаваемые вопросы — Моя статья, по мотивам этого вебкаста.

PowerShell: Часто задаваемые вопросы, продолжение. — пока доступна только в бумажном виде, в журнале «Системный Администратор» за апрель 2008 года.

Книги

Я не буду перечислять тут все книги по PowerShell, их уже очень много. Лишь те что читал я сам, собираюсь прочитать, и те что кажутся мне интересными. Короче говоря то что я рекомендую 🙂

  • Эффективное программирование в Windows PowerShell. Книга по сути является сборкой постов из блога Keith Hill. На русский язык её перевёл Сергей Вальковский. Очень рекомендую, но не для новичков. Оригинальная версия доступна тут.
  • Введение в Windows PowerShell — Первая, пока единственная бумажная, и весьма неплохая книга о PowerShell на русском. Подробнее тут.
  • PowerShell course book — книга которую можно прямо сейчас, абсолютно бесплатно, скачать из интернета. Книга доступна на английском, немецком языках, а теперь и на русском!
  • PowerShell in Action — Это книга от одного из разработчиков PowerShell, Bruce Payette. Превосходная книга не только для начинающих, но и для профи. В ней постепенно раскрываются основы языка, но при этом разъясняется не только «Как оно работает?» но и «Почему оно работает так?»
  • PowerShell Cookbook от O’Reilly. Следующая книга в моем Wish List. Судя по рецензиям она прекрасно дополняет PowerShell in Action играя роль справочника.
  • Administrative tasks using Windows PowerShell — продолжение PowerShell course book, тоже бесплатна и доступна для скачивания.

Блоги

Так сложилось что блоги играют очень важную роль в развитии PowerShell. Вероятно это потому что они являются наилучшим способом делиться готовыми скриптами, случаями применения, и разными хитростями с сообществом 🙂 А началось всё с блога разработчиков… (если мне не изменяет память 🙂 )

  • Windows PowerShell — Официальный блог PowerShell. Разработчики пишут сюда всякие интересные штуки о PowerShell, и сообщают об интересных событиях 🙂
  • The PowerShell Guy — Блог //o//, одного из Гуру PowerShell и автора PowerTab и PowerShell WmiExplorer. Тут можно почитать много интересного о работе с ADSI, WMI и не только 🙂
  • Dmitry’s PowerBlog: PowerShell and beyond — Блог Дмитрия Сотникова, одного из разработчиков AD Cmdlets и PowerGUI. На английском языке.
  • Precision Computing — Дневник Lee Holmes. Автор PowerShell Cookbook и системы автоматического кормления кошки с помощью PowerShell.

К сожалению русскоязычных блогов посвященных PowerShell мне известно очень мало. Себя я упоминать не буду из-за врожденной скромности 🙂 Так что вот:

  • Митя Сотников: по-русски о PowerShell и не только — Блог Мити на русском языке.
  • Блог Андрея Бешкова — Андрей занимается PowerShell в России, и проводит много интересных вебкастов по Windows Server 2008, NAP и PowerShell.
  • Vadims Podans’s blog — Очень интересный и познавательный блог, но не для новичков 😉
  • Zorion’s Weblog — Различные заметки о технологиях Windows, в том числе немало и по PowerShell.
  • Блог Ильи Сазонова (sie), MVP: Management Instrumentation. Много красивых практических примеров применения PowerShell.

Еще множество не менее интересных блогов вы можете найти у меня в «Blogroll» (панелька со ссылками справа 🙂 ), а также в аналогичных blogroll’ах на других блогах 🙂

Сайты

Домашняя страница Windows PowerShell. Официальный сайт технологии и всего к ней относящегося. Доступен по короткому адресу microsoft.com/powershell. Содержит ссылки на статьи, блоги, вебкасты и т.д.

Группа новостей — это веб интерфейс к группе новостей PowerShell. Прекрасное место для обсуждения любых вопросов по этому языку.

Script Center — Отдел PowerShell. Примеры и библиотека скриптов, статьи от Scripting Guys и руководство по конвертации скриптов из VBScript.

Windows PowerShell 2.0 CTP Home Page — Домашняя страница CTP 2.0 следующей версии PowerShell находящейся сейчас в разработке. Кстати будет практически полная совместимость скриптов, командлетов и приложений.

PowerShellCommunity.org — Англоязычное сообщество пользователей PowerShell. Библиотека скриптов и ссылок.

Узел PowerShell на Del.icio.us — куча ссылок по PowerShell.

PowerShell Toolbox — страница аналогичная этой на Microsoft Script Center

TechNet Magazine. Множество статей о PowerShell от MVP Don Jones. Практически все переведены на русский язык! 🙂 (на список на английском не обращайте внимания 😉 )

Snapin’ы и программы

Mow’s PowerTab — Скрипт заменяющий встроенное автодополнение по [tab] новой системой, давая возможность не только дополнения классов .Net, Wmi, и практически всего остального что можно дополнить. Кроме того для завершения используется механизм аналогичный IntelliSense, когда после нажатия показывается список подходящих вариантов и можно выбрать нужный либо стрелками на клавиатуре, либо просто донабрав текст. Я пока еще могу работать без него, но с ним сиииильно легче… 🙂

PowerShell Community Extensions — Открытый проект дополнений которых иногда не хватает в стандартной поставке PowerShell. Например сюда входят комадлеты Join-String, Out-Clipboard, скрипт Elevate для использования с UAC, и провайдеры Feed Store и Active Directory позволяющие обращаться к этим структурам как к обычной файловой системе.

Active Directory Cmdlets — Must have для работы с Active Directory. Скриптинг под AD еще никогда не был таким простым 🙂

PowerGUI и PowerGUI Script Editor — Графический шелл позволяющий использовать PowerShell не набирая ни одной строки кода, и прекрасный редактор с подсветкой синтаксиса и автодополнением.

PowerShell for Far — плагин для Far.Net с помощью которого можно использовать PowerShell напрямую из FAR, а также схема для colorer позволяющая подсвечивать даже самый сложный синтаксис.

PowerShell Plus и PowerShell Analizer — Два очень разных хоста для PowerShell. PS Plus продолжает традиции классического хоста, но с добавлением множества классных возможностей, а PSA демонстрирует совершенно новый подход к командной строке который стал возможен только с PowerShell, и больше похож скорее на SQL Query Analizer.

PowerGadgets — Дополнение к PowerShell дающее возможность выводить результаты скриптов PowerShell (или запросов SQL) в виде красивых графиков, циферблатов, и т.п. в том числе в реальном времени. А еще можно выводить всё это на гаджеты боковой панели в Vista.

PowerShell SharePoint Provider — компонент который представляет структуру SharePoint как дерево каталогов для PowerShell. Проект пока в разработке, и WSS 3.0 пока не поддерживается 😦

Virtual Labs

В виртуальных лабораториях можно пощупать всё своими руками на виртуальных машинах, онлайн.

TechNet Virtual Lab: Introduction to Windows PowerShell

TechNet Virtual Labs: Writing Scripts with Windows Powershell

TechNet Virtual Lab: Using PowerShell in Windows Server 2008 Beta 3

MSDN Virtual Lab: Creating Windows PowerShell Script Cmdlets

TechNet Virtual Lab: Working with the IIS Manager

TechNet Virtual Lab: Using Microsoft Windows PowerShell for Administration and Customization of Microsoft Windows SharePoint Services 3.0

PS:

Я перечислил далеко не всё. Ресурсов по PowerShell уже необъятное множество. Но я постараюсь периодически обновлять эту страничку. Дополнения в комментариях приветствуются 🙂

О книге «Windows PowerShell in action»

Amazon.com сообщает:PowerShell replaces cobbled-together assemblies of third-party management tools with an elegant programming language and a powerful scripting shell for the Windows environment. In the tradition of Manning`s ground breaking ‘In Action’ series, this book comes from right from the source. Written by Bruce Payette, one of principal creators of PowerShell, Windows PowerShell in Action shows you how to build scripts and utilities to automate system tasks or create powerful system management tools to handle the day-to-day tasks that drive a Windows administrator`s life. Because it`s based on the .NET platform, PowerShell is also a powerful tool for developers and power users.Windows PowerShell in Action was written by Bruce Payette, one of the founding members of the Windows PowerShell team, co-designer of the PowerShell language and the principal author of the PowerShell language implementation. The book enables you to get the most out of the PowerShell environment. Using many examples, both small and large, this book illustrates the features of the language and environment and shows how to compose those features into solutions, quickly and effectively.This book is designed for anyone who wants to learn PowerShell and use it well. Rather than simply being a book of recipes to read and apply, this book gives you the deep knowledge about how PowerShell works and how to apply it.

На нашем сайте вы можете скачать книгу «Windows PowerShell in action» Payette Bruce бесплатно и без регистрации в формате pdf, читать книгу онлайн или купить книгу в интернет-магазине.

image Привет, Хаброжители! PowerShell — это одновременно язык сценариев и командная оболочка, которая позволяет управлять системой и автоматизировать практически любую задачу. В книге «PowerShell для сисадминов» обладатель Microsoft MVP Адам Бертрам aka «the Automator» покажет, как использовать PowerShell так, чтобы у читателя наконец-то появилось время на игрушки, йогу и котиков. Вы научитесь: -Комбинировать команды, управлять потоком выполнения, обрабатывать ошибки, писать сценарии, запускать их удаленно и тестировать их с помощью фреймворка тестирования Pester. -Анализировать структурированные данные, такие как XML и JSON, работать с популярными сервисами (например Active Directory, Azure и Amazon Web Services), создавать системы мониторинга серверов. -Создавать и проектировать модули PowerShell. -Использовать PowerShell для удобной, полностью автоматизированной установки Windows. -Создавать лес Active Directory, имея лишь узел Hyper-V и несколько ISO-файлов. -Создавать бесчисленные веб- и SQL-серверы с помощью всего нескольких строк кода! Реальные примеры помогают преодолеть разрыв между теорией и работой в настоящей системе, а легкий авторский юмор упрощает чтение. Перестаньте полагаться на дорогое ПО и невнятные советы из сети!

Для кого эта книга

Эта книга предназначена для ИТ-специалистов и системных администраторов, которым надоело постоянно использовать один и тот же интерфейс и выполнять одну и ту же задачу в пятисотый раз за этот год. Также она будет полезна для инженеров DevOps, которые испытывают затруднения с автоматизацией новых серверных сред, выполнением автоматических тестов или автоматизацией конвейера непрерывной интеграции / непрерывной доставки (CI/CD).

Не получится назвать отрасль, для которой PowerShell был бы полезен больше всего. Традиционная должность пользователя PowerShell в «магазине Windows» — системный администратор Microsoft, однако PowerShell хорошо вписывается в набор инструментов любого сотрудника в сфере ИТ. Если вы работаете в ИТ, но не считаете себя разработчиком, эта книга для вас.

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

Немного повторим. В главе 3 мы узнали, как можно комбинировать команды с помощью конвейера и внешних сценариев. В главе 2 рассмотрели переменные и как их использовать для хранения значений. Одним из основных преимуществ работы с переменными является возможность писать с их помощью код, который работает не со значением, а со «смыслом». Вместо того чтобы работать, например, с числом 3, вы будете работать с общим понятием $serverCount. За счет этого вы можете писать код, который работает одинаково, будь у вас один, два или тысяча серверов. Совместите эту способность с возможностью сохранять код в сценариях, которые можно запускать на разных компьютерах, и вы сможете начать решать задачи гораздо большего масштаба.

Однако в жизни порой имеет значение, работаете ли вы с одним сервером, с двумя или с тысячей. Пока что у вас нет подходящего способа учитывать это, и ваши сценарии работают просто «сверху вниз», не имея возможности адаптироваться в зависимости от определенных значений. В этой главе мы будем использовать поток управления и условную логику для написания сценариев, которые будут выполнять различные команды в зависимости от значений, с которыми они работают. К концу главы вы узнаете, как использовать операторы if/then и switch, а также различные циклы, чтобы придать вашему коду столь необходимую гибкость.

Немного о потоке управления

Мы напишем сценарий, который считывает содержимое файла, хранящегося на нескольких удаленных компьютерах. Чтобы продолжить работу, загрузите файл под названием App_configuration.txt из прилагаемых к книге материалов по ссылке github.com/adbertram/PowerShellForSysadmins/ и поместите его в корень диска C: на нескольких удаленных компьютерах. Если у вас нет удаленных компьютеров, пока просто продолжайте читать. В этом примере я буду использовать серверы с именами SRV1, SRV2, SRV3, SRV4 и SRV5.

Чтобы получить доступ к содержимому файла, воспользуемся командой Get-Content и укажем путь к файлу в значении аргумента параметра Path, как показано ниже:

Get-Content -Path «\servernamec$App_configuration.txt»

Для начала сохраним все имена наших серверов в массиве и запустим эту команду для каждого сервера. Откройте новый файл .ps1 и введите в него код из листинга 4.1.

Листинг 4.1. Извлечение содержимого файла с нескольких серверов

$servers = @('SRV1','SRV2','SRV3','SRV4','SRV5')
Get-Content -Path "\$($servers[0])c$App_configuration.txt"
Get-Content -Path "\$($servers[1])c$App_configuration.txt"
Get-Content -Path "\$($servers[2])c$App_configuration.txt"
Get-Content -Path "\$($servers[3])c$App_configuration.txt"
Get-Content -Path "\$($servers[4])c$App_configuration.txt"

Теоретически, этот код должен работать без проблем. Но в этом примере предполагается, что у вас что-то идет не так. Что делать, если сервер SRV2 не работает? А если кто-то забыл положить App_configuration.txt на SRV4? А может, кто-то изменил путь к файлу? Вы можете написать отдельный сценарий для каждого сервера, но это решение не будет масштабироваться, особенно когда вы начнете добавлять все больше и больше серверов. Вам нужен код, который будет работать в зависимости от ситуации.

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

Мы начнем с рассмотрения самого простого типа потока управления — условного оператора.

Использование условных операторов

В главе 2 мы узнали, что существуют логические значения: истина и ложь. Логические значения позволяют создавать условные операторы, которые ставят задачу PowerShell выполнить определенный блок кода в зависимости от того, имеет ли выражение (называемое условием) значение True или False. Условие — это вопрос с вариантами ответов да/нет. У вас больше пяти серверов? Работает ли сервер 3? Существует ли путь к файлу? Чтобы начать использовать условные операторы, давайте посмотрим, как преобразовать такие вопросы в выражения.

Построение выражений с помощью операторов

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

PS> 1 –eq 1
True

В этом случае оператор –eq позволяет определить равнозначность двух значений.
Ниже приведен список наиболее распространенных операторов сравнения, которые мы будем использовать:

-eq сравнивает два значения и возвращает True, если они равны.

-ne сравнивает два значения и возвращает True, если они не равны.

-gt сравнивает два значения и возвращает True, если первое больше второго.

-ge сравнивает два значения и возвращает True, если первое больше или равно второму.

-lt сравнивает два значения и возвращает True, если первое меньше второго.

-le сравнивает два значения и возвращает True, если первое меньше или равно второму.

-contains возвращает True, если второе значение является частью первого. Например, этот оператор позволяет определить, находится ли значение внутри массива.

В PowerShell есть и более продвинутые операторы сравнения. Здесь мы не будем на них останавливаться, но я рекомендую вам почитать о них в документации Microsoft по ссылке docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators или в разделе справки PowerShell (см. главу 1).

Вы можете использовать приведенные выше операторы для сравнения переменных и значений. Но выражение не обязательно должно быть сравнением. Иногда команды PowerShell можно использовать как условия. В предыдущем примере мы хотели узнать доступность сервера. С помощью командлета Test-Connection можно проверить наличие связи с сервером. Обычно в выходных данных командлета Test-Connection содержится много разной информации, но с помощью параметра Quiet вы можете заставить команду вернуть True или False, а с помощью параметра Count можно ограничить тест одной попыткой.

PS> Test-Connection -ComputerName offlineserver -Quiet -Count 1
False

PS> Test-Connection -ComputerName onlineserver -Quiet -Count 1
True

Чтобы узнать, отключен ли сервер, вы можете использовать оператор –not для преобразования выражения в противоположное:

PS> -not (Test-Connection -ComputerName offlineserver -Quiet -Count 1)
True

Теперь, когда вы познакомились с основными выражениями, давайте рассмотрим простейший условный оператор.

Оператор if

Оператор if работает просто: если выражение X истинно, то сделайте Y. Вот и все!

Чтобы использовать оператор в выражении, пишется ключевое слово if, за которым следуют круглые скобки, содержащие условие. После выражения следует блок кода, выделенный фигурными скобками. PowerShell выполнит этот блок кода только в том случае, если это выражение будет иметь значение True. Если выражение if имеет значение False либо вообще ничего не возвращает, блок кода не будет выполнен. Синтаксис оператора if/then показан в листинге 4.2.

Листинг 4.2. Синтаксис оператора if

if (условие) {
   # выполняемый код, если условие истинно
}

В этом примере есть немного нового синтаксиса: символ решетки (#) обозначает комментарий — это текст, который PowerShell игнорирует. Вы можете использовать комментарии, чтобы оставить полезные примечания и описания для себя или кого-нибудь, кто позже будет читать ваш код.

Теперь давайте еще раз посмотрим на код, показанный в листинге 4.1. Я расскажу вам о том, как использовать оператор if, чтобы не пытаться достучаться до неработающего сервера. В предыдущем разделе мы уже видели, что команду Test-Connection можно использовать в качестве выражения, которое возвращает True или False, поэтому сейчас давайте упакуем Test-Connection в оператор if, а затем воспользуемся командой Get-Content, чтобы не пытаться обращаться к неработающему серверу. Сейчас мы поменяем код только для первого сервера, как показано в листинге 4.3.

Листинг 4.3. Использование оператора if для выборочного обращения

$servers = @('SRV1','SRV2','SRV3','SRV4','SRV5')
if (Test-Connection -ComputerName $servers[0] -Quiet -Count 1) {
   Get-Content -Path "\$($servers[0])c$App_configuration.txt"
}
Get-Content -Path "\$($servers[1])c$App_configuration.txt"
--пропуск--

Поскольку у вас есть Get-Content в операторе if, вы не столкнетесь с какими-либо ошибками, если попытаетесь получить доступ к неработающему серверу; если тест завершится неудачно, ваш сценарий будет знать, что не следует пытаться считать файл. Код попытается получить доступ к серверу, только если он уже знает, что тот включен. Но обратите внимание, что этот код срабатывает только в том случае, если условие истинно. Достаточно часто вам нужно будет задать одно поведение сценария для истинного условия и другое для ложного. В следующем разделе вы увидите, как определить поведение для ложного условия с помощью оператора else.

Оператор else

Чтобы предоставить вашему оператору if альтернативу, можно использовать ключевое слово else после закрывающей скобки блока if, за которым будет следовать еще одна пара фигурных скобок, содержащая блок кода. Как показано в листинге 4.4, мы будем использовать оператор else, чтобы вернуть в консоль ошибку, если первый сервер не отвечает.

Листинг 4.4. Использование оператора else для запуска кода, если условие
не истинно

if (Test-Connection -ComputerName $servers[0] -Quiet -Count 1) {
   Get-Content -Path "\$($servers[0])c$App_configuration.txt"
} else {
   Write-Error -Message "The server $($servers[0]) is not responding!"
}

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

Оператор elseif

Оператор else охватывает противоположную ситуацию: если if не срабатывает, значит, выполните это в любом случае. Такой подход работает для двоичных условий, то есть когда сервер либо работает, либо нет. Но иногда приходится иметь дело с большим числом вариантов. Например, предположим, что у вас есть сервер, на котором нет нужного вам файла, и вы сохранили имя этого сервера в переменной $problemServer (добавьте в свой сценарий эту строку кода!). Это означает, что вам нужна дополнительная проверка, позволяющая узнать, является ли сервер, который вы опрашиваете в данный момент, проблемным. Это можно реализовать с помощью вложенных операторов if, как показано в коде ниже:

if (Test-Connection -ComputerName $servers[0] -Quiet -Count 1) {
   if ($servers[0] –eq $problemServer) {
      Write-Error -Message "The server $servers[0] does not have the right
         file!"
   } else {
      Get-Content -Path "\$servers[0]c$App_configuration.txt"
   }
} else {
   Write-Error -Message "The server $servers[0] is not responding!"
}
--пропуск--

Но есть и более аккуратный способ реализовать ту же логику — с помощью оператора elseif, который позволяет вам проверить дополнительное условие, перед тем как вернуться к коду в блоке else. Синтаксис блока elseif идентичен синтаксису блока if. Итак, чтобы проверить проблемный сервер с помощью оператора elseif, запустите код из листинга 4.5.

Листинг 4.5. Использование блока elseif

if (-not (Test-Connection -ComputerName $servers[0] -Quiet -Count 1)) { 
   Write-Error -Message "The server $servers[0] is not responding!"
} elseif ($servers[0] –eq $problemServer) 
   Write-Error -Message "The server $servers[0] does not have the right file!"
} else {
   Get-Content -Path "\$servers[0]c$App_configuration.txt" 
}
--пропуск--

Обратите внимание, что мы не просто добавили оператор elseif, а заодно изменили логику кода. Теперь мы можем проверить, не находится ли сервер в автономном режиме, с помощью оператора –not. Затем, как только мы определили сетевой статус сервера, мы проверяем, является ли он проблемным. Если это не так, мы используем оператор else для запуска поведения по умолчанию — извлечения файла. Как видите, существует несколько способов структурировать код описанным образом. Важно то, что код работает и что он читабелен для человека со стороны, будь то ваш коллега, видящий его впервые, или вы сами спустя некоторое время после написания.

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

Операторы if, else и elseif отлично подходят для реализации ответа кода на простые вопросы типа «да/нет». В следующем разделе вы узнаете, как работать с более сложной логикой.

Оператор switch

Давайте немного подкорректируем наш пример. Допустим, у нас есть пять серверов, и на каждом сервере путь к нужному файлу различается. Исходя из того что вы знаете сейчас, вам придется создать отдельный оператор elseif для каждого сервера. Это сработает, но существует и более удобный метод.

Обратите внимание, что теперь мы будем работать с другим типом условия. Если раньше нам нужны были ответы на вопросы типа «да/нет», то теперь мы хотим получить конкретное значение одной вещи. Это сервер SRV1? SRV2? И так далее. Если бы вы работали только с одним или двумя конкретными значениями, оператор if подошел бы, но в данном случае оператор switch сработает гораздо лучше.

Оператор switch позволяет выполнять различные фрагменты кода в зависимости от некоторого значения. Он состоит из ключевого слова switch, за которым следует выражение в скобках. Внутри блока switch находится серия операторов, построенных по следующему принципу: сначала указывается значение, за ним следует набор фигурных скобок, содержащих блок кода, и наконец ставится блок default, как указано в листинге 4.6.

Листинг 4.6. Шаблон для оператора switch

switch (выражение) {
   значениевыражения {
      # Код
   }
   значениевыражения {
   }
   default {
     # Код, который выполняется при отсутствии совпадений
   }
}

Оператор switch может содержать практически неограниченное количество значений. Если выражение оценивается как значение, выполняется соответствующий код внутри блока. Важно то, что, в отличие от elseif, после выполнения одного блока кода PowerShell продолжит проверять и остальные условия, если не указано иное. Если ни одно из значений не подойдет, PowerShell выполнит код, указанный в блоке default. Чтобы прекратить перебор условий в операторе switch, используйте ключевое слово break в конце блока кода, как показано в листинге 4.7.

Листинг 4.7. Использование ключевого слова break в операторе switch

switch (выражение) {
   значениевыражения {
      # Код
      break
   }
--пропуск--

Ключевое слово break позволяет сделать условия в операторе switch взаимоисключающими. Вернемся к нашему примеру с пятью серверами и одним и тем же файлом, имеющим разные пути. Вы знаете, что сервер, с которым вы работаете, может иметь только одно значение (то есть он не может одновременно называться и SRV1, и SRV2), поэтому вам нужно использовать операторы break. Ваш сценарий должен выглядеть примерно так, как показано в листинге 4.8.

Листинг 4.8. Проверка различных серверов с помощью оператора switch

$currentServer = $servers[0]
switch ($currentServer) {
   $servers[0] {
      # Check if server is online and get content at SRV1 path.
      break
   }
   $servers[1] {
      ## Check if server is online and get content at SRV2 path.
      break
   }
   $servers[2] {
      ## Check if server is online and get content at SRV3 path.
      break
   }
--пропуск--

Вы можете переписать этот код, используя только операторы if и elseif (и я действительно рекомендую вам попробовать это!). В любом случае, какой бы метод вы ни выбрали, вам потребуется одна и та же структура для каждого сервера в списке, а это означает, что ваш сценарий будет довольно длинным — просто представьте, что вам придется протестировать пятьсот серверов вместо пяти. В следующем разделе вы узнаете, как избавиться от этой проблемы, используя одну из самых фундаментальных структур потока управления — цикл.

Использование циклов

Существует хорошее практическое правило для работы за компьютером: не повторяйся (don’t repeat yourself, DRY). Если вы обнаружите, что выполняете одну и ту же работу, то, скорее всего, существует способ ее автоматизировать. То же самое и с написанием кода: если вы используете одни и те же строки снова и снова, вероятно, существует решение получше.

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

PowerShell предлагает пять типов циклов: foreach, for, do/while, do/until и while. В этом разделе мы обсудим каждый тип цикла, отметим их уникальные черты и выделим лучшие ситуации для их использования.

Об авторе

Адам Бертрам (Adam Bertram) — опытный ИТ-специалист и эксперт в области интернет-бизнеса с 20-летним стажем. Предприниматель, ИТ-инфлюенсер, специалист Microsoft MVP, блогер, тренинг-менеджер и автор материалов по контент-маркетингу, сотрудничающий со многими ИТ-компаниями. Также Адам основал популярную платформу TechSnips для развития навыков ИТ-специалистов (techsnips.io).

Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок

Для Хаброжителей скидка 25% по купону — PowerShell

По факту оплаты бумажной версии книги на e-mail высылается электронная книга.

Like this post? Please share to your friends:
  • Windows powershell in action 3rd edition
  • Windows powershell download for windows 7
  • Windows postgresql password authentication failed for user
  • Windows post installation wizard что это
  • Windows post install wizard официальный сайт скачать