Установка powershell в windowsinstalling powershell on windows

Создание файлов и папокCreating Files and Folders

Создание новых элементов осуществляется одинаковым образом всеми поставщиками Windows PowerShell.Creating new items works the same on all Windows PowerShell providers. Если поставщик Windows PowerShell поддерживает более одного типа элементов (например, поставщик Windows PowerShell FileSystem различает каталоги и файлы), необходимо указать тип элемента.If a Windows PowerShell provider has more than one type of item—for example, the FileSystem Windows PowerShell provider distinguishes between directories and files—you need to specify the item type.

Эта команда создает папку :This command creates a new folder :

Эта команда создает пустой файл .This command creates a new empty file

Важно!

При использовании параметра Force с командой для создания папки, которая уже существует, она не перезапишет и не заменит папку.When using the Force switch with the command to create a folder, and the folder already exists, it won’t overwrite or replace the folder. Будет просто возвращен имеющийся объект папки.It will simply return the existing folder object. Однако, если использовать в уже имеющимся файле, файл будет полностью перезаписан.However, if you use on a file that already exists, the file will be completely overwritten.

Условия

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

IF

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

Switch

Мы уже говорили про Powershell Switch в предыдущих статьях. Если коротко, то это более удобные условия. Используя предыдущий пример, но со Switch, это будет выглядеть так:

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

Со switch так же удобно передавать булевы значения. В примере ниже если указан ключ -On сервис включится, а если его нет выключится:

8 ответов

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

Второй файл — это то, что нужно выполнить, когда компьютер запускается, и просто вставка .ps1 в папку автозагрузки не будет работать, потому что это на самом деле не выполняет скрипт — он только открывает файл с блокнотом. Вам нужно выполнить .cmd, который сам будет выполнять .ps1 с помощью PowerShell. Хорошо, достаточно болтовни и на ступеньках:

  1. Создайте сценарий .ps1 и поместите его в папку. Я положил его на свой рабочий стол для простоты. Путь будет выглядеть примерно так:
  1. Создайте файл .cmd и поместите его в

При этом файл cmd будет запускаться каждый раз при запуске. Вот ссылка на то, как создать файл .cmd , если вам нужна помощь.

  1. Откройте файл .cmd в текстовом редакторе и введите следующие строки:

Это сделает две вещи:

  1. Установите для политики выполнения вашей PowerShell значение Неограниченно. Это необходимо для запуска сценариев, иначе PowerShell этого не сделает.
  2. Используйте PowerShell для выполнения сценария .ps1, найденного по указанному пути.

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

  1. Сохраните файл .cmd

Теперь, когда у вас есть файлы .ps1 и .cmd по соответствующим путям и со сценарием для каждого, все готово.

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

Что я делаю, это создаю ярлык, который помещаю в shell: startup.

Ярлык имеет следующее:

Цель:

(замена scripts \ scripts.ps1 на то, что вам нужно)

Начать с:

(замена скриптов папкой с вашим скриптом)

Скопируйте ps1 в эту папку и создайте его при необходимости. Он будет запускаться при каждом запуске (до входа пользователя в систему).

Также это можно сделать через GPEDIT.msc, если он доступен в вашей сборке ОС (возможно, ОС более низкого уровня).

У меня есть скрипт, который также запускает наблюдателя файловой системы, но как только окно скрипта закрывается, наблюдатель умирает. Он будет работать весь день, если я запусту его из окна powershell и оставлю его открытым, но как только я закрою его, скрипт перестанет делать то, что должен.
Вам нужно запустить скрипт, чтобы он оставался открытым PowerShell.
Я попробовал множество способов сделать это, но тот, который действительно работал, был из http://www.methos-it.com/blogs/keep-your-powershell-script-open-when-executed

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

Относительно короткий путь к указанию сценария Powershell для выполнения при запуске в Windows может быть следующим:

  1. Нажмите кнопку Windows (кнопка Windows + r)
  2. Введите это:
  1. Создайте новый ярлык , щелкнув правой кнопкой мыши и в контекстном меню выберите пункт меню: New => Ярлык

  2. Создайте ярлык для вашего скрипта, например:

Обратите внимание на использование -NoProfile .
Если вы много инициализируете в вашем файле $ profile, неэффективно загружать его, чтобы просто запустить скрипт Powershell. -NoProfile пропустит загрузку файла вашего профиля и будет разумно указать, нужно ли запускать его перед выполнением скрипта Powershell

Здесь вы видите такой ярлык, созданный (файл .lnk со значком Powershell с символом ярлыка):

Это сработало для меня. Создано запланированное задание с подробностями ниже:
Триггер: при запуске

Действия:
Программа /скрипт: powershell.exe
Аргументы: -файл

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

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

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

Это запустит сценарий Powershell без запуска сценариев $ profile для более быстрого выполнения. Это обеспечит запуск сценария powershell.

Папка оболочки: автозагрузка находится в:

А затем в папку:

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

Другие функции сценариевOther script features

В PowerShell есть много полезных функций, которые можно использовать в скриптах.PowerShell has many useful features that you can use in scripts.

  • — Можно использовать инструкцию, чтобы предотвратить выполнение скрипта без указанных модулей или оснасток и заданную версию PowerShell. — You can use a statement to prevent a script from running without specified modules or snap-ins and a specified version of PowerShell. Дополнительные сведения см. в разделе about_Requires.For more information, see about_Requires.

  • — Содержит полный путь и имя выполняемого скрипта. — Contains the full path and name of the script that is being run. Этот параметр допустим во всех скриптах.This parameter is valid in all scripts. Эта автоматическая переменная появилась в PowerShell 3,0.This automatic variable is introduced in PowerShell 3.0.

  • — Содержит каталог, из которого выполняется скрипт. — Contains the directory from which a script is being run. В PowerShell 2,0 эта переменная допустима только в модулях скриптов ( ).In PowerShell 2.0, this variable is valid only in script modules ().
    Начиная с PowerShell 3,0, он действителен во всех скриптах.Beginning in PowerShell 3.0, it is valid in all scripts.

  • — Автоматическая переменная содержит сведения о текущем скрипте, включая сведения о том, как он был запущен или вызван. — The automatic variable contains information about the current script, including information about how it was started or «invoked.» Эту переменную и ее свойства можно использовать для получения сведений о скрипте во время его выполнения.You can use this variable and its properties to get information about the script while it is running. Например, . Переменная Микомманд. path содержит путь и имя файла скрипта.For example, the .MyCommand.Path variable contains the path and filename of the script. . Строка содержит команду, которая запустила скрипт, включая все параметры и значения..Line contains the command that started the script, including all parameters and values.

    Начиная с PowerShell 3,0, имеет два новых свойства, которые предоставляют сведения о скрипте, который вызывал или вызывает текущий скрипт.Beginning in PowerShell 3.0, has two new properties that provide information about the script that called or invoked the current script. Значения этих свойств заполняются только в том случае, если вызывающий элемент или вызвавший объект является сценарием.The values of these properties are populated only when the invoker or caller is a script.

    • Пскоммандпас содержит полный путь и имя скрипта, который вызывал или вызывает текущий скрипт.PSCommandPath contains the full path and name of the script that called or invoked the current script.

    • PSScriptRoot содержит каталог скрипта, вызвавшего или вызвавшего текущий скрипт.PSScriptRoot contains the directory of the script that called or invoked the current script.

    В отличие от и автоматических переменных, содержащих сведения о текущем скрипте, свойства пскоммандпас и PSScriptRoot этой переменной содержат сведения о скрипте, вызвавшем текущий скрипт.Unlike the and automatic variables, which contain information about the current script, the PSCommandPath and PSScriptRoot properties of the variable contain information about the script that called the current script.

  • Разделы данных. Вы можете использовать ключевое слово для разделения данных из логики в скриптах.Data sections — You can use the keyword to separate data from logic in scripts. Разделы данных также могут упростить локализацию.Data sections can also make localization easier. Дополнительные сведения см. в разделе about_Data_Sections и about_Script_Internationalization.For more information, see about_Data_Sections and about_Script_Internationalization.

  • Подпись скрипта. Вы можете добавить цифровую подпись к сценарию.Script Signing — You can add a digital signature to a script. В зависимости от политики выполнения можно использовать цифровые подписи для ограничения выполнения скриптов, которые могут включать ненадежные команды.Depending on the execution policy, you can use digital signatures to restrict the running of scripts that could include unsafe commands. Дополнительные сведения см. в разделе about_Execution_Policies и about_Signing.For more information, see about_Execution_Policies and about_Signing.

Security

  • PowerShellArsenal — Module used to aid a reverse engineer.
  • PowerTools — Collection of projects with a focus on offensive operations.
  • PowerForensics — Popular live disk forensics platform for windows.
  • PowerSploit — Post-exploitation framework.
  • PowerShellEmpire — Post-exploitation agent.
  • PSReflect — Easily define in-memory enums, structs, and Win32 functions in PowerShell. Useful for attacks, example.
  • BloodHound — Easily identify highly complex attack paths that would otherwise be impossible to quickly identify.
  • Nishang — Enables scripting for red team, penetration testing, and offensive security.
  • Harness — Interactive remote PowerShell Payload.
  • Invoke-Obfuscation — PowerShell Obfuscator.
  • p0wnedShell — PowerShell Runspace Post Exploitation Toolkit.
  • PESecurity — Module to check if a Windows binary (EXE/DLL) has been compiled with ASLR, DEP, SafeSEH, StrongNaming, and Authenticode.
  • Powershellery — Powershell scripts used for general hackery.
  • PowerUpSQL — Toolkit for Attacking SQL Server.

Справка на основе комментариевComment-Based Help

В функции рекомендуется добавить справку на основе комментариев, чтобы пользователи, которым вы предоставляете доступ к функциям, могли знать, как их использовать.It’s considered to be a best practice to add comment based help to your functions so the people you’re sharing them with will know how to use them.

Добавленную справку на основе комментариев можно получить так же, как встроенные команды по умолчанию.When you add comment based help to your functions, help can be retrieved for them just like the default built-in commands.

Весь синтаксис написания функции в PowerShell может показаться слишком объемным и перегруженным, особенно для тех, кто только начинает работу с этой оболочкой.All of the syntax for writing a function in PowerShell can seem overwhelming especially for someone who is just getting started. Часто, если я не могу вспомнить какой-то синтаксис, я открываю вторую копию ISE на отдельном мониторе, просматриваю фрагмент «Cmdlet (расширенная функция) — Complete» и одновременно ввожу код для функции.Often times if I can’t remember the syntax for something, I’ll open a second copy of the ISE on a separate monitor and view the «Cmdlet (advanced function) — Complete» snippet while typing in the code for my function. В интегрированной среде сценариев PowerShell доступ к фрагментам кода можно получить с помощью сочетания клавиш CTRL+J.Snippets can be accessed in the PowerShell ISE using the Ctrl+J key combination.

Характеристики

  • Командлеты — Командлеты выполняют общие задачи системного администрирования, например, управление реестром, службами, процессами, журналами событий и использованием инструментария управления Windows (WMI).

  • Ориентация на задачи — язык сценариев PowerShell основан на задачах и обеспечивает поддержку существующих сценариев и инструментов командной строки.

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

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

  • Основанный на объектах — PowerShell обладает мощными возможностями манипулирования объектами. Объекты могут быть отправлены в другие инструменты или базы данных напрямую.

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

ПросмотрReview

Как определить версию PowerShell, установленную на компьютере?How do you determine what PowerShell version a computer is running?

Почему важно запускать PowerShell с повышенными правами администратора?Why is it important to launch PowerShell elevated as an administrator?

Как определить текущую политику выполнения PowerShell?How do you determine the current PowerShell execution policy?

Чему препятствует политика выполнения PowerShell по умолчанию на клиентских компьютерах Windows?What does the default PowerShell execution policy on Windows client computers prevent from occurring?

Как изменить политику выполнения PowerShell?How do you change the PowerShell execution policy?

Собираем все воедино

Возможности PSService.ps1 На основе всего того, что мы обсудили на данный момент, я могу создать ту службу Windows PowerShell, о которой я мечтал, — скрипт PSService.ps1, который:

  • может сам себя устанавливать и удалять (используя функции Windows PowerShell для управления службами);
  • может сам себя запускать и останавливать (используя тот же набор функций);
  • включает короткий фрагмент C#-кода, создающий PSService.exe для SCM (с помощью команды Add-Type);
  • делает обратный вызов из заглушки PSService.exe в скрипт PSService.ps1 для выполнения реальной операции службы (в ответ на события OnStart, OnStop и др.);
  • управляется из панели SCM и всех утилит командной строки (благодаря заглушке PSService.exe);
  • является отказоустойчивым и успешно обрабатывает любую команду, находясь в любом состоянии. Например, он может автоматически остановить службу перед ее удалением или ничего не делать, если ему поступит запрос запустить уже выполняемую службу;
  • поддерживает Windows 7 и все более поздние версии Windows (используя функциональность только Windows PowerShell v2).

Заметьте, что в этой статье я затронул лишь критически важные части проекта и реализации PSService.ps1. Скрипт-пример также содержит отладочный код и в какой-то мере поддерживает необязательную функциональность служб, но их описание здесь усложнило бы пояснения безо всякой необходимости.

Архитектура PSService.ps1 Скрипт организуется в серию разделов:

  • комментарий-заголовок, описывающий файл;
  • справочный блок в виде комментариев;
  • блок Param, определяющий ключи командной строки;
  • глобальные переменные;
  • вспомогательные процедуры: Now и Log;
  • блок исходного кода на C# для создания заглушки PSService.exe;
  • основную процедуру, обрабатывающую все ключи командной строки.

Логические операторы

В следующей таблице перечислены логические операторы —

Предположим, что булевы переменные A верны, а переменная B ложна, тогда —

оператор Описание пример
И (логическое и) Вызывается логическим и оператором. Если оба операнда отличны от нуля, условие становится истинным. (A -AND B) является ложным
ИЛИ (логический или) Вызывается оператор логического ИЛИ. Если любой из двух операндов отличен от нуля, условие становится истинным. (A -OR B) верно
НЕ (логично, нет) Вызывается логическим оператором НЕ. Используйте для изменения логического состояния своего операнда. Если условие истинно, то оператор Логический НЕ будет делать ложь. -НЕ (А-И Б) верно

PowerShell ISE

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

Установка

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

Вот последовательность операций, выполняемых при обработке ключа –Setup.

  1. Удаление любого предыдущего экземпляра, если таковой есть.
  2. Создание каталога установки, если требуется. (Этого не нужно при использовании каталога по умолчанию: C:\Windows\System32.)
  3. Копирование скрипта службы в каталог установки.
  4. Создание заглушки service.exe в том же каталоге установки на основе фрагмента C#-кода в скрипте.
  5. Регистрация службы.

Заметьте, что, начав с единственного исходного скрипта Windows PowerShell (PSService.ps1), я получил в итоге три файла, установленных в C:\Windows\System32: PSService.ps1, PSService.pdb и PSService.exe. Эти три файла понадобится удалить при удалении службы. Для реализации установки включите две части кода в скрипт.

Определение ключа –Setup в блоке Param в начале скрипта:

Блок if (рис. 3) для обработки ключа –Setup в основной процедуре в конце скрипта.

Рис. 3. Обработчик кода установки

Скачивание пакетов из коллекции PowerShellDownloading packages from the PowerShell Gallery

При скачивании пакетов из коллекции PowerShell рекомендуется сделать следующее:We encourage the following process when downloading packages from the PowerShell Gallery:

ИзучениеInspect

Чтобы скачать пакет из коллекции для изучения, выполните командлет Save-Module или Save-Script (в зависимости от типа пакета).To download a package from the Gallery for inspection, run either the Save-Module or Save-Script cmdlet, depending on the package type. Так вы сможете сохранить пакет локально без установки и проверить его содержимое.This lets you save the package locally without installing it, and inspect the package contents. Не забудьте удалить пакет, сохраненный вручную.Remember to delete the saved package manually.

Некоторые из этих пакетов созданы корпорацией Майкрософт, а другие — сообществом PowerShell.Some of these packages are authored by Microsoft, and others are authored by the PowerShell community. Корпорация Майкрософт рекомендует ознакомиться с содержимым и кодом пакетов в этой коллекции перед их установкой.Microsoft recommends that you review the contents and code of packages on this gallery prior to installation.

Если вы нашли пакет, который, по вашему мнению, опубликован с нарушениями, щелкните Сообщить о нарушении на странице этого пакета.If you discover a package that you feel is not published in good faith, click Report Abuse on that package’s page.

УстановкаInstall

Чтобы установить пакет из коллекции для использования, выполните командлет Install-Module или Install-Script (в зависимости от типа пакета).To install a package from the Gallery for use, run either the Install-Module or Install-Script cmdlet, depending on the package type.

Командлет Install-Module устанавливает модуль в по умолчанию.Install-Module installs the module to by default.
Для выполнения этой операции необходима учетная запись администратора.This requires an administrator account. При добавлении параметра модуль будет установлен в каталог .If you add the parameter, the module is installed to .

Install-Script по умолчанию устанавливает скрипт в каталог .Install-Script installs the script to by default.
Для выполнения этой операции необходима учетная запись администратора.This requires an administrator account. При добавлении параметра скрипт будет установлен в каталог .If you add the parameter, the script is installed to .

По умолчанию командлеты Install-Module и Install-Script устанавливают последнюю версию пакета.By default, Install-Module and Install-Script installs the most current version of a package. Чтобы установить более раннюю версию пакета, добавьте параметр .To install an older version of the package, add the parameter.

РазвертываниеDeploy

Чтобы развернуть пакет из коллекции PowerShell в службе автоматизации Azure, щелкните Служба автоматизации Azure, а затем Deploy to Azure Automation (Развернуть в службе автоматизации Azure) на странице сведений о пакете.To deploy a package from the PowerShell Gallery to Azure Automation, click Azure Automation, then click Deploy to Azure Automation on the package details page. После этого вы будете перенаправлены на портал управления Azure, на который нужно войти с использованием учетных данных учетной записи Azure.You are redirected to the Azure Management Portal where you sign in by using your Azure account credentials

Обратите внимание, что развертывание пакетов с зависимостями приводит к развертыванию всех зависимостей в службе автоматизации Azure.Note that deploying packages with dependencies deploys all the dependencies to Azure Automation. Кнопку «Развернуть в службе автоматизации Azure» можно отключить, добавив тег AzureAutomationNotSupported в метаданные пакета.The ‘Deploy to Azure Automation’ button can be disabled by adding the AzureAutomationNotSupported tag to your package metadata

Дополнительные сведения о службе автоматизации Azure см. в соответствующей документации.To learn more about Azure Automation, see the Azure Automation documentation.

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий