Глава 1. начало работы с powershell

Содержание:

Проверка связи с компьютерами

Простую проверку связи с компьютером можно выполнить с помощью Win32_PingStatus . Следующая команда производит проверку связи, но при этом выводит большой объем сведений:

Удобнее отображать сводные данные, содержащие свойства Address, ResponseTime и StatusCode, как это делает приведенная ниже команда. Параметр Autosize командлета изменяет размер столбцов таблицы для их правильного отображения в PowerShell.

Значение 0 свойства StatusCode указывает на успешно выполненную проверку связи.

Для проверки связи с несколькими компьютерами с помощью одной команды можно использовать массив. Так как адресов несколько, для проверки связи с каждым адресом по отдельности можно использовать :

Один и тот же формат команды можно использовать для проверки связи со всеми компьютерами подсети. Например, при проверке частной сети, использующей номер сети 192.168.1.0 и стандартную маску подсети класса C (255.255.255.0), допустимы только локальные адреса в диапазоне от 192.168.1.1 до 192.168.1.254 (0 всегда зарезервирован в качестве номера сети, а 255 используется в качестве широковещательного адреса подсети).

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

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

Назначение домена DNS сетевому адаптеру

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

Здесь нужно использовать оператор фильтрации , так как даже в сети, использующей лишь протокол TCP/IP, некоторые сетевые адаптеры компьютера не являются настоящими адаптерами TCP/IP. Они представляют собой общие программные элементы, поддерживающие службы RAS, PPTP, QoS и т. п. для всех адаптеров, и не имеют собственного адреса.

Фильтрацию в команде можно осуществить с помощью командлета вместо фильтра .

Выполнение задач настройки DHCP

Изменение сведений DHCP, так же как и настройка DNS, включает работу с набором сетевых адаптеров. Существует несколько отдельных действий, выполняемых с помощью инструментария WMI. Мы рассмотрим несколько наиболее типичных.

Определение адаптеров, поддерживающих DHCP

Найти на компьютере адаптеры, поддерживающие DHCP, можно с помощью следующей команды:

Чтобы исключить из поиска адаптеры, имеющие проблемы в IP-конфигурации, можно добавить требование поддержки протокола IP:

Извлечение свойств DHCP

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

Включение поддержки DHCP на каждом адаптере

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

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

Отмена и обновление аренды адреса DHCP для отдельных адаптеров

Класс Win32_NetworkAdapterConfiguration использует методы ReleaseDHCPLease и RenewDHCPLease . Оба метода используются одинаково. Обычно их применяют лишь при необходимости отмены или обновления аренды адресов для адаптера в отдельной подсети. Простейшим способом фильтрации адаптеров в подсети является выбор лишь тех адаптеров, которые используют шлюз для этой подсети. Например, следующая команда отменяет все аренды адресов DHCP для адаптеров на локальном компьютере, которые арендуют адреса DHCP с 192.168.1.254:

Единственное отличие при обновлении аренды адреса DHCP состоит в вызове метода RenewDHCPLease вместо метода ReleaseDHCPLease :

Примечание

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

Отмена и обновление аренды адресов DHCP для всех адаптеров

Отменить или обновить аренду адресов DHCP сразу для всех адаптеров можно с помощью методов Win32_NetworkAdapterConfiguration — ReleaseDHCPLeaseAll и RenewDHCPLeaseAll .
Однако эту команду следует применять к классу WMI, а не к отдельному адаптеру, поскольку глобальная отмена и обновление аренды осуществляется на уровне класса, а не отдельного адаптера.

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

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

Такой же формат команды используется при вызове метода RenewDHCPLeaseAll :

Что делать, если PowerShell не открывается

Если PowerShell не может открыться, то нужно проверить целостность системных файлов:

  1. Необходимо запустить командную строку с расширенными правами доступа.
  2. Затем прописать исполнимую команду «sfc /scannow».
  3. Дождаться завершения процесса проверки файлов.
  4. При необходимости исправить поврежденные компоненты, нажав на кнопку «Enter».

Выполнить отключение компонента PowerShell и заново его активировать:

  1. Нужно открыть классическую панель управления.
  2. Выбрать раздел «Программное обеспечение».
  3. В правой части окна нажать «Включить или отключить компоненты».
  4. В списке найти нужный объект и снять с него отметку в чекбоксе.
  5. Выполнить рестарт и вновь перейти в «Панель управления». Открыть компоненты Windows и поставить отметку в чекбоксе «PowerShell».

Повер Шелл может не запускаться из-за повреждения системных файлов

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

Область политики выполнения

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

Допустимые значения для Scope : MachinePolicy , UserPolicy, Process , CurrentUser и LocalMachine. Хранилище LocalMachine используется по умолчанию при задании политики выполнения.

Scope Значения перечислены в порядке приоритета. Политика, которая имеет приоритет, вступает в силу в текущем сеансе, даже если более ограничивающая политика была установлена на более низком уровне приоритета.

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

Process

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

CurrentUser

политика выполнения распространяется только на текущего пользователя. Он хранится в подразделе реестра HKEY_CURRENT_USER .

LocalMachine

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

PowerShell ISE

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

Пример.

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

Пример.

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

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

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

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

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

Чтобы удалить политику выполнения для Scope :

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

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

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

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

Пример.

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

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

Как открыть PowerShell на Windows 10: возможные способы

Многие пользователи спрашивают, как открыть PowerShell в Windows 10. Владельцы персональных компьютеров могут открывать консоль несколькими способами:

  • через стартовое меню «Пуск»;
  • через утилиту «Выполнить»;
  • с помощью комбинации клавиш;
  • через системную папку;
  • через командную строку.

Через стартовое меню «Пуск»

Инструкция:

  1. Необходимо на панели задач щелкнуть по кнопке стартового окна.
  2. Далее в поисковой строке ввести ключевой запрос.
  3. В завершении появится список программного обеспечения, подходящего под параметры поиска.

Второй способ:

  1. Нужно щелкнуть ПКМ по иконке стартового меню.
  2. На экране появится диалоговое окно.
  3. В данном списке требуется найти пункт «Windows PowerShell».

Открыть консоль можно через поисковую строку или с помощью контекстного меню параметров

С помощью утилиты «Выполнить»

Инструкция:

  1. Требуется открыть утилиту «Выполнить», нажав сочетание клавиш «Win + R».
  2. В поисковой строке нужно прописать имя программы и нажать на кнопку «Enter»

С помощью комбинации клавиш

Инструкция:

  1. На клавиатуре требуется нажать комбинацию клавиш «Win + X».
  2. На экране появится консоль отладки.

К сведению! В версиях Windows 10 1903 (и более ранние) при нажатии клавиш «Win + X» появляется окно командной строки. В билде 2004 вместо нее запускается основная консоль PowerShell.

Через системную папку

Если нужна консоль PowerShell, где находится Windows 10 она, знает далеко не каждый пользователь. Как ее открыть:

  1. Нужно перейти в проводник и открыть раздел «Локальные диски».
  2. На основном томе следует отыскать папку «Windows».
  3. Затем следует перейти в директорию «System32».
  4. В данном каталоге следует прокрутить список вниз и найти папку с наименованием «Windows PS».
  5. Далее необходимо найти исполняемый файл программного обеспечения, который имеет расширение *exe.
  6. По объекту нужно щелкнуть ПКМ и в диалоговом окне выбрать «Запуск с расширенными правами доступа».

С помощью командной строки

Инструкция:

  1. На клавиатуре требуется нажать сочетание клавиш «Win + R».
  2. В поисковой строке ввести ключевой запрос «CMD».
  3. После запуска командной строки следует прописать код «PowerShell».

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

SSH через Powershell

Пример того, как можно работать через SSH:

#устанавливаем модуль SSH, один раз
Find-Module Posh-SSH | Install-Module

#Создаем SSH сессию:
Import-Module Posh-SSH
$ComputerName = "1.2.3.4"
$UserName = "ubuntu"
$KeyFile = "C:\SSH\key.pem"
$nopasswd = new-object System.Security.SecureString
$Crendtial = New-Object System.Management.Automation.PSCredential ($UserName, $nopasswd)
$SSHSession = New-SSHSession -ComputerName $ComputerName -Credential $Crendtial -KeyFile $KeyFile

#Создаем шелл:
$SSH = $SSHSession | New-SSHShellStream

# отправляет команду
$SSH.WriteLine("ifconfig")

# считываем ответ
$SSH.read()

#закрываем сессию:
$sshSession | Remove-SSHSession

Команды:

  • Get-SSHTrustedHost — посмотреть доверенные хосты
  • Get-SSHSession — посмотреть список открытых сессий
  • Remove-SSHSession — закрыть сессию

Ссылки:

  • habrahabr.ru: Модуль Posh-SSH простой доступ к SSH и SCP из PowerShell
  • Официальная страничка от создателя модуля — там еще можно посмотреть пример работы sftp

Теперь можно переходить к изучению окружения

ps wordpad | Get-Member
PS C:\> notepad                                                        
PS C:\> ps notepad                                                                                                                            Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName  -------  ------    -----      ----- -----   ------     -- -----------       70       4     1148       5376    56     0.30   3900 notepad                                                                                                                                                    PS C:\> ps notepad | get-member -type method


   TypeName: System.Diagnostics.Process

Name                      MemberType Definition
----                      ---------- ----------
BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
CancelErrorRead           Method     System.Void CancelErrorRead()
CancelOutputRead          Method     System.Void CancelOutputRead()
Close                     Method     System.Void Close()
CloseMainWindow           Method     bool CloseMainWindow()
CreateObjRef              Method     System.Runtime.Remoting.ObjRef CreateObj...
Dispose                   Method     System.Void Dispose()
Equals                    Method     bool Equals(System.Object obj)
GetHashCode               Method     int GetHashCode()
GetLifetimeService        Method     System.Object GetLifetimeService()
GetType                   Method     type GetType()
InitializeLifetimeService Method     System.Object InitializeLifetimeService()
Kill                      Method     System.Void Kill()
Refresh                   Method     System.Void Refresh()
Start                     Method     bool Start()
ToString                  Method     string ToString()
WaitForExit               Method     bool WaitForExit(int milliseconds), Syst...
WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds),...
(ps notepad).WaitForExit()
(ps notepad).StartTime | Get-Member

Использование групповая политика для управления политикой выполнения

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

Включить параметры политики выполнения сценария следующим образом:

  • Если отключить выполнение скрипта, скрипты не будут выполняться. Это эквивалентно Restricted политике выполнения.

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

    Групповая политика Политика выполнения
    Разрешить все скрипты Unrestricted
    Разрешить локальные скрипты и удаленные подписанные скрипты RemoteSigned
    Разрешить только подписанные скрипты AllSigned
  • Если параметр включить выполнение скрипта не настроен, он не будет действовать. Политика выполнения, заданная в PowerShell, вступает в силу.

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

для Windows XP и Windows Server 2003:

для Windows Vista и более поздних версий Windows:

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

Дополнительные сведения см. на веб-сайте about_Group_Policy_Settings.

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

При определении действующей политики выполнения для сеанса PowerShell оценивает политики выполнения в следующем порядке очередности.

Запустите сценарии PowerShell от имени администратора.

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

Чтобы сделать это в Regedit, вернитесь в ключ Shell по адресу:

HKEY_CLASSES_ROOT \ \ Shell

Там создайте новый подраздел. Назовите это «Запуск с PowerShell (Admin)». Под этим создайте еще один подраздел под названием «Команда». Затем установите значение «(по умолчанию)» в разделе «Command» следующим образом:

«C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ » «-Command» «« & {Start-Process -ArgumentList ‘-ExecutionPolicy RemoteSigned -File \ „% 1 \“’ -Verb RunAs }»

В этот раз для PowerShell потребуется три строки. Один для каждого нового ключа и один для установки значения «(по умолчанию)» для команды. Не забудьте высоту и отображение HKCR.

Новый элемент ‘HKCR: \ \ Shell \ Run with PowerShell (Admin)’ Новый элемент ‘HKCR: \ \ Shell \ Запускать с PowerShell (Admin) \ Command’ Set-ItemProperty ‘HKCR: \ \ Shell \ Запускать с PowerShell (Admin) \ Command’ ‘(по умолчанию)’ ‘»C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ » «- Команда «» «& {Start-Process -ArgumentList » -ExecutionPolicy RemoteSigned -File \»% 1 \ «» -Verb RunAs}» ‘

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

Теперь у вас должна появиться новая запись контекстного меню для сценариев PowerShell, которая называется «Запускать с PowerShell (Admin)».

Запуск 32-разрядной версии Windows PowerShellStarting the 32-Bit Version of Windows PowerShell

При установке Windows PowerShell на 64-разрядном компьютере в дополнение к 64-разрядной версии устанавливается Windows PowerShell (x86) — 32-разрядная версия Windows PowerShell.When you install Windows PowerShell on a 64-bit computer, Windows PowerShell (x86), a 32-bit version of Windows PowerShell is installed in addition to the 64-bit version. При открытии Windows PowerShell по умолчанию запускается 64-разрядная версия.When you run Windows PowerShell, the 64-bit version runs by default.

Однако в некоторых случаях нужно запустить Windows PowerShell (x86) , например при использовании модуля, которому требуется 32-разрядная версия, или при удаленном подключении к 32-разрядному компьютеру.However, you might occasionally need to run Windows PowerShell (x86), such as when you’re using a module that requires the 32-bit version or when you’re connecting remotely to a 32-bit computer.

Для запуска 32-разрядной версии Windows PowerShell воспользуйтесь любой из следующих процедур.To start a 32-bit version of Windows PowerShell, use any of the following procedures.

Windows Server 2012 R2In Windows Server 2012 R2

  • На экране Пуск щелкните Windows PowerShell (x86) .On the Start screen, type Windows PowerShell (x86). Щелкните плитку Windows PowerShell x86.Click the Windows PowerShell x86 tile.
  • Выберите пункт Windows PowerShell (x86) в меню Сервис диспетчера сервера.In Server Manager, from the Tools menu, select Windows PowerShell (x86).
  • На рабочем столе переместите курсор в правый верхний угол, щелкните элемент Поиск, введите PowerShell x86 и выберите Windows PowerShell (x86) .On the desktop, move the cursor to the upper right corner, click Search, type PowerShell x86 and then click Windows PowerShell (x86).
  • В командной строке введите следующее: Via command line, enter:

Windows Server 2012In Windows Server 2012

  • На экране Пуск введите PowerShell и выберите Windows PowerShell (x86) .On the Start screen, type PowerShell and then click Windows PowerShell (x86).
  • Выберите пункт Windows PowerShell (x86) в меню Сервис диспетчера сервера.In Server Manager, from the Tools menu, select Windows PowerShell (x86).
  • На рабочем столе переместите курсор в правый верхний угол, щелкните элемент Поиск, введите PowerShell и выберите Windows PowerShell (x86) .On the desktop, move the cursor to the upper right corner, click Search, type PowerShell and then click Windows PowerShell (x86).
  • В командной строке введите следующее: Via command line, enter:

Windows 8.1In Windows 8.1

  • На экране Пуск щелкните Windows PowerShell (x86) .On the Start screen, type Windows PowerShell (x86). Щелкните плитку Windows PowerShell x86.Click the Windows PowerShell x86 tile.
  • Если вы используете средства удаленного администрирования сервера для Windows 8.1, можно также открыть Windows PowerShell x86 из меню Сервис диспетчера сервера.If you’re running Remote Server Administration Tools for Windows 8.1, you can also open Windows PowerShell x86 from the Server ManagerTools menu. Выберите Windows PowerShell (x86) .Select Windows PowerShell (x86).
  • На рабочем столе переместите курсор в правый верхний угол, щелкните элемент Поиск, введите PowerShell x86 и выберите Windows PowerShell (x86) .On the desktop, move the cursor to the upper right corner, click Search, type PowerShell x86 and then click Windows PowerShell (x86).
  • В командной строке введите следующее: Via command line, enter:

Windows 8In Windows 8

  • На экране Пуск переместите курсор в правый верхний угол, щелкните Параметры, Плитки, а затем переместите ползунок Показать средства администрирования в значение Да.On the Start screen, move the cursor to the upper right corner, click Settings, click Tiles, and then move the Show Administrative Tools slider to Yes. Введите PowerShell и выберите Windows PowerShell (x86) .Then, type PowerShell and click Windows PowerShell (x86).
  • Если вы используете средства удаленного администрирования сервера для Windows 8, можно также открыть Windows PowerShell x86 из меню Сервис диспетчера сервера.If you’re running Remote Server Administration Tools for Windows 8, you can also open Windows PowerShell x86 from the Server ManagerTools menu. Выберите Windows PowerShell (x86) .Select Windows PowerShell (x86).
  • На экране Пуск или рабочем столе введите PowerShell (x86) и выберите Windows PowerShell (x86) .On the Start screen or the desktop, type PowerShell (x86) and then click Windows PowerShell (x86).
  • В командной строке введите следующее: Via command line, enter:

Прежде чем пользоваться скриптами

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

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

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

Преднамеренный запуск макросов происходит после изменения уровня безопасности, если юзер даст добро, осознавая, что он делает, и зная наверняка, что в файле *.ps1 находится.

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

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

Оболочка обладает тремя уровнями безопасности:

  • файлы с расширением ps1 не идентифицируются системой как исполняемые и обозначаются как неизвестные или текстовые (по двойному клику открываются в используемом на компьютере по умолчанию текстовом редакторе);
  • оболочка позволяет выполнять скрипты после указания к ним полного пути, скриптовые файлы в текущей директории не ищутся, делая невозможным выполнения макросов, расположенных в текущем каталоге;
  • запуск встроенного скрипта Execution Policy, отвечающего за добавление в перечень разрешенных скриптов требуемого.

Даже не думайте изменять конфигурацию, понизив её хотя бы до второго уровня, не ознакомившись с основами PowerShell, пока не начнёте хотя бы поверхностно понимать содержимое файлов *.ps1.

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

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

Проверить текущее состояние политики запуска можно командой «Get-ExecutionPolicy». Какой бы ни была политика безопасности, пользователь не сможет запустить скрипт, в котором содержатся команды, на выполнение коих у него недостаточно привилегий.

Удаленное взаимодействие с Windows PowerShell без настройки

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

В эти командлеты входят следующие:

  • Restart-Computer
  • Test-Connection
  • Clear-EventLog
  • Get-EventLog
  • Get-HotFix
  • Get-Process
  • Get-Service
  • Set-Service
  • Get-WinEvent
  • Get-WmiObject

Обычно командлеты, которые поддерживают удаленное взаимодействие без специальной настройки, имеют параметр ComputerName, но не имеют параметра Session. Чтобы найти эти командлеты в сеансе, введите:

Создание временного события — триггера

Следующим мы определим, когда мы будем запускать задачу. Это делается с помощью команды ‘New-ScheduledTaskTrigger’. Эта команда имеет множество параметров, которые делятся на системные события и временные. 

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

  • AtLogOn — во время входа пользователя в систему;
  • AtStartup — во время запуска системы.

Аргументы связанные со временем:

  • At — точное время выполнение скрипта;
  • Daily — ежедневно;
  • DaysInterval — интервал в днях. Если указать цифру 1, то подразумевается, что задача будет запускаться ежедневно. Если указать 2 — то задача будет запускаться через день;
  • DaysOfWeek — день недели, когда будет выполнен запуск. Возможны варианты: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday;
  • Once — запуск будет выполнен единожды;
  • Weekly — запуск по неделям;
  • WeeksInterval — интервал между неделями;
  • RandomDelay — указывает задержку между запусками. Задержка определяется случайно от указанного значения. Принимает не число, а объект TimeSpan;
  • RepetitionDuration — Срок действия задачи. Принимает не число, а объект TimeSpan. 
  • RepetitionInterval — время через которое задача будет повторяться. Принимает не число, а объект TimeSpan.

Большую часть команд, связанных со временем, мы можем сочетать вместе. Так, например, мы создадим триггер выполнится однажды в 13:00:

Еще несколько примеров:

Меня интересует ежедневный запуск задачи с периодичностью в 5 минут. Для ‘RepetitionInterval’, который устанавливает такие интервалы, нужно использовать дополнительную команду ‘New-TimeSpan’. В этой команде определим сам интервал:

Изменение пользователя, параметров безопасности и уровня запуска

Создавая задачи в планировщике мы имеем блок ‘Security Options’, который чаще используется с настройками по умолчанию. В этом блоке определяются следующие параметры:

  • Пользователь, от имени которого будет выполнен запуск;
  • Выполняется ли задача для вошедших в систему пользователей;
  • Привилегии запуска (от пользователя/администратора);
  • Совместимость.

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

Так же как и в случае с созданием задачи, в случае ее изменения мы создаем разные объекты (результаты команд), которые затем привязываем через команду ‘Set-SchedukedTask’.

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

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

Set-ScheduledTask : No mapping between account names and security IDs was done.

Само собой эти же объекты можно использовать при создании (регистрации) задачи в планировщике:

Учитывайте, что у New-ScheduledTaskSettingsSet около 30 возможных параметров (работа при отключенной батареи, максимальное количество перезапусков и т.д.). В примере выше рассмотрено лишь несколько.

Изменение триггеров и действий

С помощью Set-ScheduledTask так же добавляются и изменяются триггеры и действия. Изменение будут заключаться в полной замене существующих триггеров и действий у задач. Вам просто нужно создать объект по аналогии с тем, как это делалось в предыдущих разделах:

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

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

также может выполнять блоки скриптов с блоками параметров.
Параметры присваиваются по положению с помощью параметра ArgumentList .

Блок скрипта в предыдущем примере использует ключевое слово для создания параметров и . Строка «First» привязывается к первому параметру ( ), а «Second» — к ( ).

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

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

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

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

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

Ошибки при запуске скрипта PowerShell

Как запустить скрипт PowerShell в Windows-02

Так же вы можете увидеть ошибку после запуска установленного PowerCLI:

Import-Module : Невозможно загрузить файл C:\Program Files\WindowsPowerShell\Modules\VMware.VimAutomation.Sdk\12.2.0.17 531155\VMware.VimAutomation.Sdk.psm1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=135170. строка:1 знак:1 + Import-Module VMware.PowerCLI + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : Ошибка безопасности: (:) , PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

PowerShell обладает рядом режимов исполнения, которые определяют, какой тип кода разрешается выполнять. Все это управляется ключом реестра, живущим в HKLM. Существует 4 различных режима исполнения:

  • Ограниченный (Restricted): Политика исполнения по умолчанию, не допускает работу скриптов и разрешает работу лишь интерактивных команд.
  • Все подписанные (All Signed): Допускает работу всех скриптов. Правда, все скрипты и файлы конфигурации должны быть подписаны издателем, которому вы доверяете; данный режим подвергает вас риску работы подписанных (но вредоносных) скриптов, после получения подтверждения доверия издателю.
  • Удаленные подписанные (Remote Signed): Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
  • Неограниченный (Unrestricted): Все скрипты и файлы конфигурации, полученные из коммуникационных приложений, вроде Microsoft Outlook, Internet Explorer, Outlook Express и Windows Messenger работают после подтверждения, что вы понимаете, что файл исходит из Интернета; никакие цифровые подписи не требуются; данный режим подвергает вас риску работу неподписанных, вредоносных скриптов.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector