Выполнение удаленных команд

Область скрипта и источники с точкой

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

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

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

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

Пример:

или диспетчер конфигурации служб

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

Например, Скрипт создает функцию и переменную.

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

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

Дополнительные сведения об области действия см. в разделе about_Scopes.

Setting an appropriate PowerShell Execution Policy

Now that we know the different execution policies, the different scopes that they can be set at, and how PowerShell determines the resultant execution policy, we should be able to set an PowerShell Execution Policy appropriate for our environment.

If I were to share my recommendation, I would set, on an environment that has adequate security measures applied to it at the perimeter and within the environment itself, the following:

  1. Set up Active Directories Organisational Units appropriately; separate administrators from end users
  2. Generate a code signing certificate (from your Internal CA, preferably) for those who write PowerShell scripts in your environment
  3. Ensure the certificates you generate for these script-writers is trusted in your environment
  4. Implement a process in place that every script that will be used for administration must be signed by the respective script-writer
  5. Apply the AllSigned policy at the UserPolicy level using Group Policy
  6. Apply an appropriate policy at the MachinePolicy level for the computers that will be used to test scripts. This should preferably be a separate, sandboxed environment
  7. Ensure that only those trusted individuals, who know what they’re doing, have access to log into these test computers in the sandboxed environment

Of course, this is a recommendation. As an Enterprise Administrator, you should have a good understanding of what is best for your environment. The goal of this article is to explain what the group policies are, and explain what the scopes are, by means of a deep-dive look at the different aspects concerning Execution Policies in PowerShell.

I hope this article helps you with your decision-making on setting an appropriate PowerShell Execution Policy in your enterprise environment. If you have any questions or would like to share your thoughts or experiences with respect to PowerShell Execution Policy, post your comments below!

How to Set PowerShell ExecutionPolicy

As I mentioned in the introduction, you can set ExecutionPolicy with the Set-ExecutionPolicy cmdlet. You can also use the PowerShell.exe -ExecutionPolicy command.

How to Set Execution Policy with Set-ExecutionPolicy

The syntax of the Set-ExecutionPolicy cmdlet is:

Set-ExecutionPolicy -ExecutionPolicy <ExecutionPolicy>

As an example, to set the Execution Policy to RemoteSigned use the command below:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Here is the result of the command.

The command failed because I did not open PowerShell as Administrator.

Here is the command executed as administrator:

As you can see from the image, the new Execution Policy is now RemoteSigned.

From the last 2 commands, I was asked to confirm the command. To bypass this prompt, include the -Force parameter.

The command now executes without prompting for confirmation.

The -Force parameter is particularly useful in scripting. Without this parameter your script may halt.

By default this command sets execution policy for LocalMachine scope. To confirm this, run the command below:

Get-ExecutionPolicy -List

To set Execution Policy to apply to another scope, use the –Scope parameter.

The command below sets execution policy for CurrentUser:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser -Force

As you can see from the result, CurrentUser policy is no longer Undefined. It is now Bypass, the policy set with the last command.

How to Set ExecutionPolicy with PowerShell.exe -ExecutionPolicy

If you want to bypass Execution Policy for the logged in session, you can set Execution Policy for the current command line. This is achieved using the PowerShell.exe command.

Before I give examples, here is the current execution policy:

The current execution policy is Restricted. This is because the Process scope takes precedence. To confirm, see the result below:

If you recollect, Restricted policy will NOT allow scripts to run.

This means that if I try to run a script, I will be denied access. The image below shows a series of commands and their results. See my explanation beneath the image.

The first command shown in the image is:

powershell.exe -file “C:\PS\schedule powershell example\Create-folders-from-text-file.ps1”

I tried to run a PowerShell script. Then I received the error message below:

“File C:\PS\schedule powershell example\Create-folders-from-text-file.ps1 cannot be loaded because running scripts is disabled on this system.”

The reason is because the current execution policy is Restricted. It does not allow any scripts to run.

Back to the reference image. In the next line, I ran the following command:

powershell.exe -file “C:\PS\schedule powershell example\Create-folders-from-text-file.ps1” -ExecutionPolicy Unrestricted

Effectively, I can set a temp execution policy for the command line using the -ExecutionPolicy parameter of the powershell.exe command. But I received the same error message. The reason is that I need to set the execution policy before I call the script.

Then in the next line, I executed this command:

powershell.exe -ExecutionPolicy Unrestricted

This sets the execution policy for the current logged in session to Unrestricted. So when I now run my PowerShell script, it executed successfully! See the reference image above.

The take from the last analysis is this: You can set Powershell ExecutionPolicy for the current session using Powershell.exe -ExecutionPolicy. But, you have to run the command first before calling your script.

To confirm that Powershell.exe only sets policy for the current session, I will run the command below from the current session:

Get-ExecutionPolicy -List

The result is Unrestricted for the CurrentUser scope. If I log off my current session and log back on. It will revert back to the policy set by Set-ExecutionPolicy command.

Служба удаленного взаимодействия Windows PowerShell

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

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

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

Запуск интерактивного сеанса

Чтобы запустить интерактивный сеанс с одним удаленным компьютером, используйте командлет Enter-PSSession. Например, чтобы запустить интерактивный сеанс с удаленным компьютером Server01, введите:

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

Чтобы завершить интерактивный сеанс, введите:

См. дополнительные сведения о командлетах Enter-PSSession и Exit-PSSession:

  • Enter-PSSession
  • Exit-PSSession;

Выполнение удаленной команды

Чтобы выполнить команду на одном или нескольких компьютерах, используйте командлет Invoke-Command. Например, чтобы выполнить команду Get-UICulture на удаленных компьютерах Server01 и Server02, введите:

Выходные данные будут возвращены на ваш компьютер.

Запуск сценария

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

Например, следующая команда выполняет скрипт DiskCollect.ps1 на удаленных компьютерах Server01 и Server02.

Установка постоянного подключения

Используйте командлет для создания постоянного сеанса на удаленном компьютере. В следующем примере создаются удаленные сеансы на удаленных компьютерах Server01 и Server02. Объекты сеанса хранятся в переменной .

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

Например, следующая команда выполняет команду Get-Hotfix в сеансах в переменной $s и сохраняет результаты в переменной $h. Переменная $h создается в каждом сеансе в переменной $s, но она не существует в локальном сеансе.

Теперь вы можете использовать данные в переменной с другими командами в том же сеансе. Результаты отобразятся на локальном компьютере. Пример:

Расширенная служба удаленного взаимодействия

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

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

См. дополнительные сведения о поставщике WSMan и командлетах WS-Management или введите команду в консоли Windows PowerShell.

Дополнительные сведения можно найти в разделе

  • Вопросы и ответы об удаленном взаимодействии PowerShell
  • Register-PSSessionConfiguration
  • Import-PSSession

Справку по ошибкам службы удаленного взаимодействия см. в разделе about_Remote_Troubleshooting.

Как запустить скрипт PowerShell по расписанию

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

Я приведу пример, когда мне нужно было отслеживать события ID 20291 или ID 11707.  И так откройте окно выполнить и введите в нем:

taskschd.msc

Далее вы щелкаете по библиотеке правым кликом и из контекстного меню выбираете пункт «Создать задачу».

Задаете имя задания, советую запускать скрипт PowerShell от имени учетной записи «СИСТЕМА (SYSTEM)», это будет гарантировать, что задание точно отработает.

Поставьте галку «Выполнять с наивысшими правами»

Переходим на вкладку тригеры и создаем новый. В параметрах выберите «При событии»

Далее задаем:

  • Журнал — Приложение
  • Источник — MsiInstaller
  • Код события — 11707

Тут тригер будет срабатывать, когда в логах появится событие 11707.

В действие оставляем «Запуск программы». В программе указываем powershell, а в параметрах задайте путь до самого скрипта, через параметр -File c:\scripts\id11707.ps1.

В итоге у меня вышло вот так.

Как видим, мое задание по запуску скрипта PowerShell успешно создано и отработало в планировщике Windows.

Скрипты в модулях

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

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

Дополнительные сведения о модулях см. в разделе about_Modules.

Как в скрипте PowerShell проверить, что он запущен от имени администратора

Следующий код PowerShell можно использовать для проверки того, работает ли текущий сценарий в режиме «Запуск от имени администратора»:

Write-Host "Проверяем повышенные права..."
if (-NOT ( ::GetCurrent()).IsInRole(`
 "Administrator")) {
	Write-Warning "Недостаточные разрешения для скрипта. Откройте консоль PowerShell как администратор и вновь запустите этот скрипт."
	Break
}
else {
	Write-Host "Код запущен от имени администратора — продолжаем выполнение скрипта..." -ForegroundColor Green
}

Сохраните код PowerShell в файле check_process_elevation.ps1 и запустите его в консоли без прав администратора:

C:\PS\check_process_elevation.ps1

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

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

Также вы можете запросить повышение прав прямо из сценария PowerShell. Для этого вместо строк:

	Write-Warning "Недостаточные разрешения для скрипта. Откройте консоль PowerShell как администратор и вновь запустите этот скрипт."
	Break

используйте следующий код:

Start-Process Powershell -ArgumentList $PSCommandPath -Verb RunAs

При запуске сценария без прав администратора он будет повторно запущен в новом сеансе PowerShell с повышенными привилегиями, и вы увидите запрос на повышение прав UAC. Если вы примете его, ваш сценарий PS1 будет запущен от имени администратора. (Путь к текущему файлу сценария PowerShell передаётся с помощью переменной среды $PSCommandPath.)

В PowerShell 4.0 или новее ещё проще проверить, работает ли ваш скрипт с правами администратора. Для этого используйте директиву -RunAsAdministrator.

#requires -version 4.0
#requires -RunAsAdministrator
Write-Host "PowerShell запущен от имени администратора" -ForegroundColor Green

Если скрипт не запускается под администратором, появится следующая ошибка:

C:\PS\check_process_elevation.ps1: The script 'check_process_elevation.ps1' cannot be run because it contains a "#requires" statement for running as Administrator. The current PowerShell session is not running as Administrator. Start PowerShell by using the Run as Administrator option, and then try running the script again.

Если вы запустите сценарий на компьютере с PowerShell v2, появится следующее сообщение об ошибке:

Cannot process the “#requires” statement at line 2 because it is not in the correct format.
The “#requires” statement must be in one of the following formats:
“#requires -shellid <shellID>”
“#requires -version <major.minor>”
“#requires -pssnapin <psSnapInName> ”

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

If(( ::GetCurrent()).IsInRole("Domain Admins"))
{
	# у пользователя, запустившего этого скрипт, есть права Domain Admins (админа домена)
}
Else
{
	# нет прав Domain Admins (админа домена)
}

Написание и запуск скриптов в PowerShell

Программа PowerShell — это альтернативная командная строка с обширной функциональностью. Многие владельцы компьютеров, которые неплохо ориентируются в системных процессах, интересуются возможностями её использования на Windows 10 и предыдущих версиях этого обеспечения, чтобы менять конкретные процессы и настройки ПК под себя.

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

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

Как открыть PowerShell?

Это можно сделать несколькими следующими способами:

  • Через Пуск — вы найдёте приложение в общем списке компонентов под буквой W.
  • При помощи поиска в Панели задач — откройте её, и введите слово PowerShell для поиска.
  • Используя меню «Выполнить» — запустите его через комбинацию Win+R и напишите название утилиты, после чего она будет найдена в системе.
  • В коммандере задайте действие PowerShell — но, вы должны знать, что будете работать с приложением через уже запущенную строку, а не в отдельном окне.
  • В параметрах Windows выберите «Свойства панели задач» и меню «Пуск». Во вкладке «Навигация» поставьте флажок на строке «Заменить командную строку оболочкой PowerShell…». Теперь вы сможете включать утилиту комбинацией Win+X.

Как писать и запускать скрипты?

Как создать скрипт PowerShell и запустить его? Это можно попросту сделать в блокноте — используя его, укажите в новом документе необходимые вам команды. После сохраните его, но поменяйте формат на .ps1 — именно такое расширение имеют файлы этой системной утилиты.

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

  • Запустите его.
  • Нажмите на пункт «Создать».
  • Или кликните на «Файл», и в появившемся списке выберите «Создать».
  • Напишите все команды, которые нужно выполнить, сохраните файл.

Скрипты ещё можно писать и редактировать в FAR Manager, но их нельзя использовать непосредственно в таком приложении, ведь оно отображает файлы этого типа через стандартную строку cmd. Однако прочие действия выполняются таким же образом, как и в «родной» утилите.

Запустить скрипт вы сможете таким образом:

  1. Зайдите в PowerShell от имени администратора.
  2. При помощи команд cd укажите месторасположение требуемого файла. Например, e: cd\ cd work .\ имя_файла. Ps1, или e: \work\ имя_файла.ps1
  3. В этом случае e: — имя жёсткого диска, где находится файл.
  4. Жмите Enter.

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

Как? В тексте, возникающем вместе с ошибкой, будет рекомендация ввести команду get-help about_signing, чтобы получить больше информации. Вы можете выполнить эти указания, или использовать комбинацию Set-ExecutionPolicy remotesigned — после её ввода потребуется подтверждение, и ограничение будет снято.

Другие вопросы по пользованию

У многих возникает вопрос, как узнать версию PowerShell? Для этого выполните следующее:

  1. Откройте приложение.
  2. Введите $PSVersionTable.
  3. Если это ни к чему не привело, значит, у вас версия 1.0 — для неё есть команда $host.version.
  4. В ином случае появится подробная информация о том, какая версия приложения установлена на ПК.

Ещё один вопрос, на который стоит дать ответ — как удалить PowerShell? Для этого потребуются такие действия:

  • Зайдите через Панель управления в меню установки и удаления программ.
  • Найдите ветку Microsoft Windows
  • Удалите обновление для компонента WindowsPowerShell (TM), следуйте инструкциям системы.

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

Выполнение сценария

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

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

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

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

В командной строке введите:

или

Изменение вступает в силу немедленно.

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

Например, чтобы запустить сценарий Get-ServiceLog.ps1 в каталоге C:\Scripts, введите:

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

Например, чтобы запустить сценарий ServicesLog.ps1 в локальном каталоге, введите:

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

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

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

Запуск с помощью PowerShell

Начиная с PowerShell 3,0 можно запускать сценарии из проводника.

Чтобы использовать функцию «Запуск с помощью PowerShell», сделайте следующее:

Запустите проводник, щелкните правой кнопкой мыши имя файла скрипта и выберите команду «запустить с помощью PowerShell».

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

Дополнительные сведения см. в разделе about_Run_With_PowerShell.

Выполнение сценариев на других компьютерах

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

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

Следующая команда запускает сценарий на удаленных компьютерах с именем Server01 и Server02.

Выполнение сценария

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

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

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

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

В командной строке введите:

или

Изменение вступает в силу немедленно.

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

Например, чтобы запустить сценарий Get-ServiceLog.ps1 в каталоге C:\Scripts, введите:

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

Например, чтобы запустить сценарий ServicesLog.ps1 в локальном каталоге, введите:

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

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

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

Запуск с помощью PowerShell

Начиная с PowerShell 3,0 можно запускать сценарии из проводника.

Чтобы использовать функцию «Запуск с помощью PowerShell», сделайте следующее:

Запустите проводник, щелкните правой кнопкой мыши имя файла скрипта и выберите команду «запустить с помощью PowerShell».

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

Дополнительные сведения см. в разделе about_Run_With_PowerShell.

Выполнение сценариев на других компьютерах

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

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

Следующая команда запускает сценарий на удаленных компьютерах с именем Server01 и Server02.

Требования к операционной системе

Windows PowerShell 5.1

Windows PowerShell 5.1 выполняется в следующих версиях Windows: Для запуска Windows PowerShell 5.1 установите Windows Management Framework 5.1. Дополнительные сведения см. в статье Установка и настройка WMF 5.1.

Версия Windows Требования к системе
Windows Server 2022 Устанавливается по умолчанию
Windows Server 2019 Устанавливается по умолчанию
Windows Server 2016 Устанавливается по умолчанию
Windows Server 2012 R2 Установите Windows Management Framework 5.1
Windows Server 2012 Установите Windows Management Framework 5.1
Windows Server 2008 R2 с пакетом обновления 1 (SP1) Установите Windows Management Framework 5.1
Windows 11 Устанавливается по умолчанию
Windows 10 версии 1607 и выше Устанавливается по умолчанию
Windows 10 версии 1507, 1511 Установите Windows Management Framework 5.1
Windows 8.1 Установите Windows Management Framework 5.1
Windows 7 с пакетом обновления 1 (SP1) Установите Windows Management Framework 5.1

Windows PowerShell 5.0

Windows PowerShell 5.0 работает в следующих версиях Windows. Для запуска Windows PowerShell 5.0 установите Windows Management Framework 5.1. Дополнительные сведения см. в статье Установка и настройка WMF 5.1. Windows Management Framework 5.1 заменяет Windows Management Framework 5.0.

Версия Windows Требования к системе
Windows Server 2022 Более поздняя версия устанавливается по умолчанию
Windows Server 2019 Более поздняя версия устанавливается по умолчанию
Windows Server 2016 Более поздняя версия устанавливается по умолчанию
Windows Server 2012 R2 Установите Windows Management Framework 5.1
Windows Server 2012 Установите Windows Management Framework 5.1
Windows Server 2008 R2 с пакетом обновления 1 (SP1) Установите Windows Management Framework 5.1
Windows 11 Более поздняя версия устанавливается по умолчанию
Windows 10 версии 1607 и выше Более поздняя версия устанавливается по умолчанию
Windows 10 версии 1507, 1511 Устанавливается по умолчанию
Windows 8.1 Установите Windows Management Framework 5.1
Windows 7 с пакетом обновления 1 (SP1) Установите Windows Management Framework 5.1

Windows PowerShell 4.0

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

Версия Windows Требования к системе
Windows 8.1 Устанавливается по умолчанию
Windows Server 2012 R2 Устанавливается по умолчанию
Windows 7 с пакетом обновления 1 (SP1) Установите Windows Management Framework 4.0
Windows Server 2008 R2 с пакетом обновления 1 (SP1) Установите Windows Management Framework 4.0

Windows PowerShell 3.0

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

Версия Windows Требования к системе
Windows 8 Устанавливается по умолчанию
Windows Server 2012 Устанавливается по умолчанию
Windows 7 с пакетом обновления 1 (SP1) Установите Windows Management Framework 3.0
Windows Server 2008 R2 с пакетом обновления 1 (SP1) Установите Windows Management Framework 3.0
Windows Server 2008 с пакетом обновления 2 (SP2) Установите Windows Management Framework 3.0

Используем Invoke-Command для параллельного запуска команд на нескольких компьютерах

Командлет Invoke-Command можно использовать для параллельного выполнения команд на нескольких удаленных компьютерах.

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

Invoke-Command server1, server2, server3 -ScriptBlock {get-date}

1 Invoke-Command server1,server2,server3-ScriptBlock{get-date}

Список компьютеров можно поместить в переменную (массив):

$servers = @(″server1″,″server2″,″server3″)
Invoke-Command -ScriptBlock { get-date} -ComputerName $servers

1
2

$servers=@(″server1″,″server2″,″server3″)

Invoke-Command-ScriptBlock{get-date}-ComputerName$servers

Или получить из текстового файла:

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName(Get-Content c:\ps\servers.txt)

1 Invoke-Command-ScriptBlock{Restart-Service spooler}-ComputerName(Get-Contentc\ps\servers.txt)

Также можно получить список компьютеров в ADс помощью командлета Get-ADComputer из модуля AD PowerShell:

Чтобы выполнить команду на всех Windows Server в домене, исопльзуйте такой код:

$computers = (Get-ADComputer -Filter ‘operatingsystem -like «*Windows server*» -and enabled -eq «true»‘).Name
Invoke-Command -ComputerName $computers -ScriptBlock {get-date} -ErrorAction SilentlyContinue

1
2

$computers=(Get-ADComputer-Filter’operatingsystem -like «*Windows server*» -and enabled -eq «true»‘).Name

Invoke-Command-ComputerName$computers-ScriptBlock{get-date}-ErrorAction SilentlyContinue

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

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

$results = Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
$results | Select-Object PSComputerName, DateTime

1
2

$results=Invoke-Command server1,server2,server3-ScriptBlock{get-date}

$results|Select-ObjectPSComputerName,DateTime

При запуске команды через Invoke-Command на нескольких компьютерах она выполняется параллельно. В Invoke-Command есть ограничение на максимальное количество компьютеров, которыми можно управлять одновременно (ограничение на количество одновременных PSSession). Оно определяется параметром ThrottleLimit (по умолчанию 32). Если вам нужно выполнить команду одновременно более чем на 32 компьютерах (например, на 128), используйте параметр –ThrottleLimit 128 (но это вызывает повышенную нагрузку на ваш компьютер).

Для запуска команд на удаленных компьютерах через Invoke-Command в фоновом режиме используется специальный атрибут 
–AsJob. В этом случае результат выполнения команды не возвращается в консоль. Чтобы получить результаты нужно использовать командлет 
Receive-Job.

What is PowerShell ExecutionPolicy?

ExecutionPolicy in PowerShell is a security feature that controls how PowerShell loads configuration files and runs scripts. ExecutionPolicy features helps prevent PowerShell running malicious scripts.

You can set Execution Policy for a computer, a user or a session. The Set-ExecutionPolicy cmdlet can be used to set ExecutionPolicy. PowerShell.exe command also has an ExecutionPolicy parameter that you can use to set Powershell ExecutionPolicy.

In this guide you will learn about the different types of PowerShell Execution Policies. You will also learn how to use Set-ExecutionPolicy and PowerShell.exe -ExecutionPolicy commands.

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

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