Powershell: goodbye, goto

Командлеты для работы с Active Directory (AD)

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

  • New-ADUser – создание нового пользователя в Active Directory;
  • Get-ADUser – выводит информацию о пользователях Active Directory;
  • Set-ADUser — изменяет пользователя Active Directory;
  • Remove-ADUser — удаляет пользователя Active Directory;
  • New-ADGroup – командлет создает группу в Active Directory;
  • Get-ADGroup – выводит информацию о группе или выполняет поиск, чтобы получить несколько групп из Active Directory;
  • Set-ADGroup – командлет изменяет группу в Active Directory;
  • Remove-ADGroup — удаление группы в Active Directory;
  • Add-ADGroupMember — командлет добавляет учетные записи пользователей, компьютеров или групп в качестве новых членов группы Active Directory;
  • Get-ADGroupMember — выводит информацию о членах группы Active Directory;
  • Remove-ADGroupMember — удаление элементов из группы Active Directory;
  • Set-ADAccountPassword — сброс пароля учетной записи Active Directory;
  • Disable-ADAccount — отключает учетную запись Active Directory.
  • Enable-ADAccount — включает учетную запись Active Directory;
  • Unlock-ADAccoun — разблокирует учетную запись Active Directory;
  • New-ADComputer — создание новой учетной записи компьютера в Active Directory;
  • Get-ADComputer — выводит информацию об одном или нескольких компьютерах в Active Directory;
  • Set-ADComputer — изменение учетной записи компьютера в Active Directory;
  • Remove-ADComputer — удаление компьютера из Active Directory.

Powershell For Loop

The For Loop in PowerShell is pretty much the most basic loop that you can use. It iterates a specified number of times through a part of the script until the condition is met.

To use the For loop in PowerShell you will need to specify a counter , the condition (run as long as $i is less than 5) and increase the counter.

For ($i = 0; $i -lt 5; $i++) {
    Write-host $i 
}

Increasing the counter can also be done inside the script. This allows you to only increase the counter when a specific condition is met in your script.

For ($i = 0; $i -lt 5) {
    Write-Host $i;    
    $i++
}

You can also iterate over an array with a simple For Loop in PowerShell. We can take the array length as part of the condition and iterate through the array until we have processed all the items in the array.

It’s easier to use a foreach loop to process an array than a for loop, more about that later.

$fruit = @('apple','pear','banana','lemon','lime','mango')

# -le means less or equal to
For ($i = 0; $i -le $fruit.length; $i++) {
    Write-Host $fruit;    
}

PowerShell also has a shorthand that you can use for a loop. You can define a range that allows you to specify how many times you want to run the script and just pipe the script behind it.

$path = "C:\temp"

1..10 | % {
    $newFile = "$path\test_file_" + $_ + ".txt";
    New-Item $newFile
}

Исследование ошибок конвейера

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

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

Команда завершается ошибкой, и PowerShell отображает следующее сообщение об ошибке:

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

Результаты трассировки являются длинными, но они показывают значения, привязанные к командлету , а затем именованные значения, привязанные к командлету .

Наконец, показано, что попытка привязать путь к параметру Destination завершилась сбоем.

Используйте командлет для просмотра атрибутов параметра Destination.

В результатах показано, что назначение принимает входные данные конвейера только по имени свойства. Таким образом, конвейерный объект должен иметь свойство с именем Destination.

Используется для просмотра свойств объекта, поступающих из .

Выходные данные показывают, что элемент является объектом Microsoft.Win32.RegistryKey , у которых нет свойства Destination . Это объясняет, почему команда завершилась сбоем.

Параметр Path принимает входные данные конвейера по имени или по значению.

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

Например,

SupportsShouldProcess

Чтобы включить поддержку и , для начала необходимо указать в функции.

Указав таким образом, можно вызвать функцию с параметром (или ).

Обратите внимание, что я не создаю параметр с именем. Он создается автоматически, если задать свойство

Если задать параметр для , некоторые из вызываемых объектов также выполняют обработку .

Доверяйте, но проверяйте

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

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

Receiving and Providing Feedback with Exit Codes

The command is helpful for situations when you need a script or function to run some code and exit. But you are not getting any indication if the script ran successfully or not.

When PowerShell runs the last command in a script, it stores the exit code of that last command in the variable.

There are two default exit codes:

  • 0 – meaning success: normal termination
  • 1 – meaning failure:

PowerShell does not restrict you to and as exit codes. PowerShell lets you return custom exit codes, as long as they are .

To exit PowerShell with a custom exit code, you can provide the exit code as an argument for the exit keyword.

Copy and paste the code below in the existing test.ps1 file and run the script with the command . Check the content of the variable. By telling PowerShell to exit with a exit code, it did so, as you can see below.

Returning a custom exit code

Iterating a Text File’s Contents

The Cmd.exe For /F command iterates the content of a text file. The syntax is as follows:

The set is one or more files (wildcards are allowed). The For command opens each file and assigns the iteration variable (%%x) to each line of the file. The options string, enclosed in double quotes («), alters how the For command interprets and parses the file content or command output. Table 1 lists the keywords available in the options string.

Keyword

Description

eol=c

Specifies a single end-of-line character. The For command ignores the remainder of the text on the line if it encounters the specified character.

skip=n

Skips this many lines at the beginning of the file content or command output.

delims=xyz

Specifies delimiters for each line of file content or command output. The For command will split the content into strings, or tokens, based on the delimiters specified with this keyword. The default delimiters are space and tab.

tokens=n

The For command will split each line of file content or command output by the specified numeric token positions. You can specify a comma-delimited list of token positions or a range of positions separated by a dash. The * character means “remaining text on each line after parsing the last token.”

Table 1: Keywords for the For /F options string

Let’s take a look at how we can replace each of these options in PowerShell.

eol. There are a number of ways to parse strings in PowerShell. One way to ignore the remainder of a string after a certain character is to use the IndexOf and Substring methods. For example:

The first line specifies a string containing a semicolon, and the second line of code returns the portion of the string up to (but not including) the semicolon (i.e., the string “Test”). Another technique is to use the -split operator, which splits a string into array using a character or string as a delimiter. For example:

The first command splits the string into an array, and the second command returns the first element from the array (i.e., the string “Test”).

skip. You can skip lines at the beginning of input in PowerShell by using the Select-Object cmdlet with the -Skip parameter. For example, the command

tells PowerShell to retrieve the content of the Test.txt but to skip the first three lines of the file.

delims. The PowerShell -split operator, as already noted, splits a string into an array of substrings based on one or more delimiters. For example, the command

returns an array of two strings (“ABC” and “DEF”).

tokens. PowerShell arrays have numeric indices, so you can easily return any item from an array simply by specifying its index in square braces. For example:

In this example, the $element variable will contain the string “Baker”.

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

В Windows такие программы, как Internet Explorer и Microsoft Edge, добавляют альтернативный поток данных в скачанные файлы. Это помечает файл как «поступающий из Интернета». Если политика выполнения PowerShell имеет значение RemoteSigned, PowerShell не будет запускать неподписанные скрипты, скачанные из Интернета, включая программы электронной почты и обмена мгновенными сообщениями.

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

Начиная с PowerShell 3.0, можно использовать параметр Stream командлета для обнаружения заблокированных файлов, так как они были загружены из Интернета. Используйте командлет для разблокировки скриптов, чтобы их можно было запустить в PowerShell.

Дополнительные сведения см. в разделе about_Signing, Get-Item и Unblock-File.

Примечание

Другие методы скачивания файлов могут не помечать файлы как поступающие из зоны Интернета. Некоторые примеры:

Использование break в инструкции switch

В конструкции приводит к выходу из блока кода PowerShell.

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

В этом примере переменная создается и инициализируется в строковое значение . Оператор использует класс Regex для сопоставления значения переменной в первую очередь с термином . Так как значение переменной и первый тест в операторе совпадают, выполняется первый блок кода в инструкции .

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

Использование break в инструкции switch

В конструкции powerShell выходит из блока кода.

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

В этом примере переменная создается и инициализируется строковым значением . Оператор использует класс Regex для сопоставления значения переменной в первую очередь с термином . Так как значение переменной и первый тест в операторе совпадают, первый блок кода в инструкции выполняется.

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

Подробное описание

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

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

  • Используйте командлет, который отправляет выходные данные команды в текстовый файл.
    Как правило, командлет используется, если необходимо использовать его параметры, такие как , или параметры.

  • Используйте командлет, который отправляет выходные данные команды в текстовый файл, а затем отправляет его в конвейер.

  • Используйте операторы перенаправления PowerShell. Использование оператора перенаправления с целевым объектом файла функционально эквивалентно конвейеру без дополнительных параметров.

Дополнительные сведения о потоках см. в about_Output_Streams.

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

PowerShell поддерживает перенаправление следующих выходных потоков.

Поток # Описание Представлено в Командлет Write
1 Успех Поток PowerShell 2.0
2 Ошибка Поток PowerShell 2.0
3 Предупреждение Поток PowerShell 3.0
4 Многословный Поток PowerShell 3.0
5 Отлаживать Поток PowerShell 3.0
6 Информация Поток PowerShell 5.0
* Все потоки PowerShell 3.0

В PowerShell также существует поток progress , но он не поддерживает перенаправление.

Важно!

Потоки успешности и ошибок похожи на потоки stdout и stderr других оболочков. Однако stdin не подключен к конвейеру PowerShell для ввода.

Операторы перенаправления PowerShell

Операторы перенаправления PowerShell приведены ниже, где представляет номер потока. Поток успешности ( ) является значением по умолчанию, если поток не указан.

Оператор Описание Синтаксис
Отправка указанного потока в файл.
Добавление указанного потока в файл.
Перенаправляет указанный поток в поток success .

Примечание

В отличие от некоторых оболочк Unix, вы можете перенаправить только другие потоки в поток успешного выполнения .

Работа с фоновыми заданиями

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

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

Примеры

Пример 1. Запуск процесса, использующего значения по умолчанию

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

Пример 3. Запуск процесса сортировки элементов в новый файл

В этом примере запускается процесс, который сортирует элементы в файле и возвращает отсортированные элементы в файлах . Все ошибки записываются в файл. Параметр UseNewEnvironment указывает, что процесс выполняется с собственными переменными среды.

В этом примере используется сплаттинг для передачи параметров командлету . Дополнительные сведения см. в разделе about_Splatting.

Пример 6. Использование разных команд для запуска процесса

В этом примере показано, как найти команды, которые можно использовать при запуске процесса. Доступные команды определяются расширением имени файла, который запускается в процессе.

В примере используется для создания объекта System.Diagnostics.ProcessStartInfo для , файла, который выполняется в процессе PowerShell. Свойство Verbs объекта ProcessStartInfo показывает, что команды Open и можно использовать с или с любым процессом, выполняющим файл.

Пример 7. Указание аргументов для процесса

Обе команды запускают интерпретатор команд Windows, выдавая команду в папке

Так как это имя папки содержит пробел, значение должно быть заключено в экранированные кавычки.
Обратите внимание, что первая команда указывает строку как ArgumentList. Вторая команда представляет собой массив строк

В Windows можно запустить , чтобы запустить процесс с повышенными разрешениями.
Это повышает уровень контекста текущего пользователя. Параметр Credential позволяет указать альтернативное имя пользователя и пароль, что позволяет запустить процесс в другом пользовательском содержимом.
Однако параметры Credential и Verb нельзя использовать вместе.

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

Пример начинается с повышенных разрешений из сеанса PowerShell, который выполняется с альтернативными учетными данными.

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

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

Чтобы избежать завершения дочернего процесса на unix-подобных платформах, можно объединить с . В следующем примере запускается фоновый экземпляр PowerShell в Linux, который остается активным даже после закрытия сеанса запуска. Команда собирает выходные данные в файле в текущем каталоге.

В этом примере выполняет команду Linux , которая запускается как отсоединяемый процесс. Дополнительные сведения см. в статье nohup в Википедии.

Приступая к работе

Майкрософт

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Alias                                  Alias
C                  16.56         63.44 FileSystem    C:\
cert                                   Certificate   \
D                    .11         53.92 FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan
Set-Location HKLM: # Или, если вы из людей подосёвее, набирайте cd HKLM:
SKC  VC Name                           Property
---  -- ----                           --------
  2   0 BCD00000000                    {}
  4   0 HARDWARE                       {}
  1   0 SAM                            {}
Get-ChildItem : Requested registry access is not allowed.
At line:1 char:3
+ ls <<<<  -force
    + CategoryInfo          : PermissionDenied: (HKEY_LOCAL_MACHINE\SECURITY:St
   ring) , SecurityException
    + FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.Power
   Shell.Commands.GetChildItemCommand

 35   0 SOFTWARE                       {}
  8   0 SYSTEM                         {}

ErrorAction parameter

The -ErrorAction common parameter allows you to specify which action to take if a command fails. The available options are: Stop, Continue, SilentlyContinue, Ignore, or Inquire. If you’re developing a Windows PowerShell workflow, you can also use the Suspend value. However, advanced functions cannot be suspended.

When you specify the ErrorAction parameter during a call to a command, the specified behavior will override the $ErrorActionPreference variable in Windows PowerShell. This variable is part of a handful of variables known as “preference variables.” By default, Windows PowerShell uses an error action preference of Continue, which means that errors will be written out to the host, but the script will continue to execute. Hence, these types of errors are known as “non-terminating” errors.

If you set $ErrorActionPreference to Stop or if you use Stop as the parameter value for -ErrorAction, Windows PowerShell will stop the script execution at the point an error occurs. When these errors occur, they are considered “terminating errors.”

As an example, if you want to stop the execution of your Windows PowerShell script when an error occurs during a call to Stop-Process, you can simply add the -ErrorAction parameter and use the value Stop:

Stop-Process -Name invalidprocess -ErrorAction Stop;

If you want to suppress the errors from being displayed, you can use the value SilentlyContinue, for example:

Stop-Process -Name invalidprocess -ErrorAction SilentlyContinue;

You can also combine the ErrorAction and ErrorVariable parameters, such as in this example:

Stop-Process –Name invalidprocess -ErrorAction SilentlyContinue -ErrorVariable ProcessError;

If ($ProcessError) {

    ####### Something went wrong

}

We have explored the use of two Windows PowerShell common parameters, ErrorAction and ErrorVariable. I hope that this post has enlightened you about the use of these variables and how to use them to direct the execution flow of your scripts. Thank you for reading, and I will see you next time!

~Trevor

Thank you, Trevor, for taking the time to write this explanation and sharing it with our readers. You can reach Trevor on Twitter () or follow him on his blog, Trevor Sullivan’s Tech Room, Minding the gap between administration and development.

Ed Wilson, Microsoft Scripting Guy

Doctor Scripto
Scripter, PowerShell, vbScript, BAT, CMD

Регистрация задачи в планировщике

Теперь, после выполнения минимальных требований в виде ‘action’ и ‘trigger’, мы должны объединить эти объекты. Это делается с помощью команды ‘Register-ScheduledTask’. Дополнительно мы можем определить название и описание создаваемого объекта:

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

TaskPath указывает где была создана задача. В примере выше это произошло в корне планировщика:

Вы можете использовать аналогичный параметр для регистрации задачи в другой директории:

Способа узнать путь два:

  1. Через графический интерфейс;
  2. Через команду ‘Get-ScheduledTask’ (будет рассмотрена ниже).

В powershell есть еще одна команда, которая может участвовать в создании задач «New-ScheduledTask». Основное отличие такой команды в том, она не регистрирует (добавляет) задачу в сервис планировщика. Если бы мы использовали обе команды это бы выглядело так:

The For Statement

The for statement, or for loop, repeats code in a scriptblock based on a set of conditions. The code in the for loop has an initialization statement, a condition statement, and a repetition statement. The initialization statement runs at the beginning of the loop and sets the initial conditions, the condition statement tests whether the loop should continue, and the repetition statement executes each time the loop runs. Listing 6 shows a simple example of a for loop.

for ( $n = 5; $n -ge 1; $n-- ) {

  $n

}

Listing 6: The PowerShell for loop

In Listing 6, the initialization statement is $n = 5, the condition statement is $n -ge 1, and the repetition statement is $n—. Listing 6 produces exactly the same output as Listings 3, 4, and 5. Run the PowerShell command help about_For for more information about and examples of the for loop.

Как Powershell обрабатывает ошибки

До рассмотрения основных методов посмотрим на теоретическую часть.

Автоматические переменные $Error

В Powershell существует множество переменных, которые создаются автоматически. Одна из таких переменных — $Error хранит в себе все ошибки за текущий сеанс PS. Например так я выведу количество ошибок и их сообщение за весь сеанс:

При отсутствии каких либо ошибок мы бы получили пустой ответ, а счетчик будет равняться 0:

Переменная $Error являет массивом и мы можем по нему пройтись или обратиться по индексу что бы найти нужную ошибку:

Свойства объекта $Error

Так же как и все что создается в Powershell переменная $Error так же имеет свойства (дополнительную информацию) и методы. Названия свойств и методов можно увидеть через команду Get-Member:

Например, с помощью свойства InvocationInfo, мы можем вывести более структурный отчет об ошибки:

Критические ошибки (Terminating Errors)

Критические (завершающие) ошибки останавливают работу скрипта. Например это может быть ошибка в названии командлета или параметра. В следующем примере команда должна была бы вернуть процессы «svchost» дважды, но из-за использования несуществующего параметра ‘—Error’ не выполнится вообще:

Не критические ошибки (Non-Terminating Errors)

Не критические (не завершающие) ошибки не остановят работу скрипта полностью, но могут вывести сообщение об этом. Это могут быть ошибки не в самих командлетах Powershell, а в значениях, которые вы используете. На предыдущем примере мы можем допустить опечатку в названии процессов, но команда все равно продолжит работу:

Как видно у нас появилась информация о проблеме с первым процессом ‘svchost111’, так как его не существует. Обычный процесс ‘svchost’ он у нас вывелся корректно.

Параметр ErrorVariable

Если вы не хотите использовать автоматическую переменную $Error, то сможете определять свою переменную индивидуально для каждой команды. Эта переменная определяется в параметре ErrorVariable:

Переменная будет иметь те же свойства, что и автоматическая:

Вам так же будет интересно:

Common parameters

When Windows PowerShell 2.0 came out, a new concept was introduced, called Advanced Functions. This concept allows you to develop commands that have the same feel as compiled cmdlets, while writing them in Windows PowerShell script syntax. One of the benefits of developing cmdlet-style commands instead of basic functions, is that they offer a few “common parameters.” Two of these common parameters are related to error handling: -ErrorAction and -ErrorVariable.

For more information about common parameters in advanced functions and compiled cmdlets, run this command at the Windows PowerShell prompt:

Get-Help -Name about_CommonParameters;

ErrorVariable Parameter

Normally, if you run a Windows PowerShell command and an error occurs, the error record will be appended to the “automatic variable” named $error. When you use the -ErrorVariable parameter in a call to a command, the error is assigned to the variable name that you specify. It’s important to note that even when you use the -ErrorVariable parameter, the $error variable is still updated.

By default, the -ErrorVariable parameter will overwrite the variable with the name that you specify. If you want to append an error to the variable, instead of overwriting it, you can put a plus sign (+) in front of the variable name. Let’s take a look at an example:

Stop-Process -Name invalidprocess -ErrorVariable ProcessError; $ProcessError; Stop-Process -Name invalidprocess2 -ErrorVariable +ProcessError; if ($ProcessError) {     ######## Take administrative action on error state }

Terminating the Console and Scripts with PowerShell Exit Command

Let’s dig into this tutorial and first cover the keyword, one of the many reserved words in PowerShell. A reserved word is a set of characters built into PowerShell that performs some action. For the keyword, the action is making PowerShell exit a PowerShell session.

Let’s practice! Open a PowerShell console session, type , and press the Enter key. The PowerShell console will immediately close.

This keyword can also exit a script rather than the console session. Including the keyword in a script and terminates only the script and not the entire console session from where the script runs.

Copy and paste the code below into notepad and save the script as test.ps1 to the C:\Temp directory. Run the PowerShell script file by running the command as shown in the below screenshot. Notice that instead of PowerShell closing the session, PowerShell terminates the script and returns control to the prompt of the current PowerShell session.

The keyword stopped the script execution, but the console is still running

Описание

Командлет получает процессы на локальном или удаленном компьютере.

Без параметров этот командлет получает все процессы на локальном компьютере. Вы также можете указать конкретный процесс по имени процесса или идентификатору процесса (PID) или передать объект процесса через конвейер в этот командлет.

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

Управление политикой выполнения с помощью PowerShell

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

Следующая команда получает эффективную политику выполнения:

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

Результат выглядит примерно так:

В этом случае эффективная политика выполнения — RemoteSigned , так как политика выполнения для текущего пользователя имеет приоритет над политикой выполнения, установленной для локального компьютера.

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

Например, следующая команда получает политику выполнения для области CurrentUser :

Изменение политики выполнения

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

Если вы задали политику выполнения для областей LocalMachine или CurrentUser, изменение сохраняется в реестре и остается эффективным до тех пор, пока вы не измените его снова.

Если вы задали политику выполнения для Process области, она не сохраняется в реестре. Политика выполнения сохраняется до тех пор, пока текущий процесс и все дочерние процессы не будут закрыты.

Примечание

В Windows Vista и более поздних версиях Windows выполните команды, изменяющие политику выполнения для локального компьютера, область LocalMachine , запустите PowerShell с параметром «Запуск от имени администратора «.

Чтобы изменить политику выполнения, выполните следующие действия.

Пример:

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

Пример:

Команда для изменения политики выполнения может быть выполнена успешно, но по-прежнему не изменит эффективную политику выполнения.

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

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

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

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

Удаление политики выполнения для:Scope

Если политика выполнения не задана в какой-либо области, то эффективная политика выполнения — Restrictedэто значение по умолчанию для клиентов Windows.

Настройка другой политики для одного сеанса

С помощью параметра ExecutionPolicy можно задать политику выполнения для нового сеанса PowerShell. Политика влияет только на текущие сеансы и дочерние сеансы.

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

Пример:

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

Во время сеанса политика выполнения, заданная для сеанса, имеет приоритет над политикой выполнения, установленной в реестре для локального компьютера или текущего пользователя. Однако он не имеет приоритета над политикой выполнения, установленной с помощью групповая политика.

Параметры

-FileVersionInfo

Указывает, что этот командлет получает сведения о версии файла для программы, которая выполняется в процессе.

В Windows Vista и более поздних версиях Windows необходимо открыть PowerShell с параметром Запуск от имени администратора , чтобы использовать этот параметр в процессах, которыми вы не владеете.

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

Использование этого параметра эквивалентно получению свойства MainModule.FileVersionInfo каждого объекта процесса. При использовании этого параметра возвращает объект FileVersionInfoSystem.Diagnostics.FileVersionInfo, а не объект процесса. Таким образом, нельзя передать выходные данные команды в командлет, который ожидает объект процесса, например .

Type: SwitchParameter
Aliases: FV, FVI
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

-Id

Указывает один или несколько процессов по идентификатору процесса (PID). При указании нескольких идентификаторов разделяйте их запятыми. Чтобы найти ИДЕНТИФИКАТОР процесса, введите .

Type: Int32
Aliases: PID
Position: Named
Default value: None
Accept pipeline input: True
Accept wildcard characters: False

-IncludeUserName

Указывает, что значение UserName объекта Process возвращается с результатами выполнения команды .

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

-InputObject

Указывает один или несколько объектов процесса. Введите переменную, которая содержит объекты, или команду или выражение, которое возвращает объекты.

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

-Module

Указывает, что этот командлет получает модули, загруженные процессами.

В Windows Vista и более поздних версиях Windows необходимо открыть PowerShell с параметром Запуск от имени администратора , чтобы использовать этот параметр в процессах, которыми вы не владеете.

Чтобы получить модули, загруженные процессом на удаленный компьютер, используйте командлет .

Этот параметр эквивалентен получению свойства Modules каждого объекта процесса. При использовании этого параметра этот командлет возвращает объект ProcessModuleSystem.Diagnostics.ProcessModule, а не объект процесса. Таким образом, нельзя передать выходные данные команды в командлет, который ожидает объект процесса, например .

При использовании параметров Module и FileVersionInfo в одной команде этот командлет возвращает объект FileVersionInfo со сведениями о версии файла всех модулей.

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

-Name

Указывает один или несколько процессов по имени процесса. Можно ввести несколько имен процессов (разделенных запятыми) и использовать подстановочные знаки. Имя параметра () является необязательным.

Type: String
Aliases: ProcessName
Position:
Default value: None
Accept pipeline input: True
Accept wildcard characters: True
Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

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

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