Запуск скриптов powershell

Запуск процессов с Powershell Start-Process

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

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

 Если в программа может принимать аргументы их так же можно добавить:

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

Ключ WindowStyle принимает 4 значения:

  • minimized — свернутый вариант.
  • hidden —  скрытый режим.
  • normal — обычный.
  • maximized — полностью развернутый.

Добавив ключ NoNewWindow, в случае с tracert, команда выполнится в текущем окне:

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

  • RedirectStandardOutput — перенаправляет вывод
  • RedirectStandardError  — перенаправляет ошибки
  • RedirectStandardInput — перенаправляет ввод

Воспользоваться этими ключами можно так:

 Если нужно открыть файл в определенной программе, то это делается так:

Отмечу, что ни одна команда PS не позволяет запускать процессы в интерактивном сеансе пользователя (например открыть пользователю Excel). Если вы хотите использовать такой метод, то вам нужно использовать psexec от SysInternals либо помещать задачи в планировщик и выполнять оттуда.

Чтение текстового файла в массив

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

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

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

Windows PowerShell как калькулятор

В командной строке PowerShell можно вычислять выражения, то есть пользоваться командной строкой как калькулятором (в оболочке cmd.exe эта возможность отсутствовала).

PS C:\> 2+9
11

Результат сразу появляется на экране и нет нужды использовать для вычислений дополнительные команды. В командной строке можно также вычислять значения с плавающей точкой:

PS C:\> 203
6,66666666666667

PowerShell способен выполнять и более сложные математические вычисления. Например вычисление квадратного корня из числа 327:

PS I:\> System.Math::Sqrt(327)
18,0831413200251

В этом примере используется метод Sqrt() класса System.Math Результаты вычислений можно сохранять в переменную и пользоваться ими в рамках текущей сессии:

$a=302
$a
15
$a*10
15050

Что такое Windows PowerShell?

Прежде чем мы углубимся в PowerShell, давайте сначала ответим на другой вопрос: «Что такое оболочка?»

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

Хотя оболочка существует с момента выпуска операционной системы Multics в 1969 году, Windows представила ее версию, Shell, в ноябре 1985 года. Это была базовая оболочка, которая была полезна для управления файлами и называлась MS-DOS Executive. Затем последовала разработка этой базовой оболочки, но всегда требовалось что-то более мощное.

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

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

Это не только экономит ваше время, но также дает вам больший контроль над операционной системой и ее процессами.

Что такое командлет PowerShell?

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

Командлеты (произносится как command-let) — это легкие и эффективные команды Windows PowerShell. Они существуют как строительные блоки, которые вы можете использовать для выполнения определенных действий, таких как копирование и перемещение файлов, или как часть более крупного и более сложного сценария PowerShell.

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

Подобно Get-Help , Get-Command — это еще один командлет, который можно использовать для устранения различных проблем из оболочки. В частности, он показывает все команды, установленные в вашей системе. Отображаемые команды включают командлеты, функции, псевдонимы, фильтры, сценарии и приложения. При использовании с параметрами он покажет вам все конкретные команды, связанные с этим параметром.

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

С другой стороны, Get-Command с параметром ListImported будет получать команды только из текущих сеансов.

Включение интегрированной среды сценариев Windows PowerShell в более ранних версиях Windows

При использовании Windows PowerShell 4.0 и Windows PowerShell 3.0 интегрированная среда сценариев Windows PowerShell по умолчанию включена во всех версиях Windows. Если она еще не включена, Windows Management Framework 4.0 или Windows Management Framework 3.0 включает ее.

При использовании Windows PowerShell 2.0 интегрированная среда сценариев Windows PowerShell по умолчанию включена в Windows 7. В Windows Server 2008 R2 и Windows Server 2008 эта функция является дополнительной.

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

Включение интегрированной среды сценариев Windows PowerShell Windows PowerShell (ISE)

  1. Запустите диспетчер серверов.
  2. Щелкните Компоненты и выберите Добавить компоненты.
  3. В меню «Выберите компоненты» щелкните интегрированную среду сценариев Windows PowerShell.

Отличия PowerShell и CMD в Windows

В Windows PowerShell уже давно устанавливается по умолчанию.

Чтобы открыть PowerShell, нажмите Win+x и выберите Windows PowerShell (администратор):

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

Чтобы открыть CMD нужно нажать Win+r, напечатать cmd и нажать ENTER:

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

В CMD можно запустить:

  • утилиты командной строки Windows
  • встроенные функции CMD
  • файлы .bat

В PowerShell можно запустить всё то же самое, что и в CMD, а также дополнительно:

  • команды языка PowerShell
  • скрипты PowerShell

В PowerShell сработает такая простая команда как dir:

dir

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

А если попытаться выполнить эту команду с опцией, например:

dir /A

То в CMD она сработает, а в PowerShell завершится ошибкой.

Дело в том, что вместо реализации таких же утилит как в CMD, в PowerShell используются собственные командлеты, работа которых различается, например, выводом или поддержкой опций. В PowerShell сработают команды cd, ls, dir, cat, man, kill, mount, move, sort, pwd, wget, curl и другие, знакомые по Linux, но это НЕ ОЗНАЧАЕТ что эти команды поддерживают те же самые опции, что и опции в Linux. Это просто аналоги, причём довольно грубые. Точнее говоря, это псевдонимы команд PowerShell. Полный список псевдонимов вы можете просмотреть командой:

Get-Alias

.NET-класс ServiceBase

Все службы должны создавать .NET-объект, производный от класса ServiceBase. В документации Microsoft описаны все свойства и методы этого класса. В табл. 2 перечислены те из них, которые представляют интерес в данном проекте.

Табл. 2. Некоторые свойства и методы класса ServiceBase

Член Описание
ServiceName Краткое имя, используемое для идентификации службы в системе
CanStop Сообщает, можно ли остановить службу после того, как она запущена
OnStart() Действия, предпринимаемые при запуске службы
OnStop() Действия, предпринимаемые при остановке службы
Run() Регистрирует исполняемый файл службы в SCM

Реализуя эти методы, служба будет управляемой SCM и сможет запускаться автоматически при загрузке системы или по требованию; кроме того, такую службу можно будет запускать или останавливать вручную через панель управления SCM, старыми командами net.exe/sc.exe или новыми функциями Windows PowerShell для управления службами.

Все службы должны создавать .NET-объект, производный от класса ServiceBase.

История команд в сеансе работы Windows PowerShell

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

По умолчанию Windows PowerShell сохраняет последние 64 команды. Для изменения числа сохраняемых команд нужно изменить значение специальной переменной $MaximumHistoryCount, например:

Просмотреть полный список выполнявшихся команд можно нажав клавишу F7 но, можно просматривать не весь список, а только те команды которые начинаются с определённых символов, для этого нужно ввести начальные символы и нажимать F8 для прокручивания списка команд начинающихся с этих символов.

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

Кроме клавиатурных комбинаций для работы с журналом команд в Windows PowerShell имеются специальные командлеты, get-history (псевдонимы h, history и ghy) позволяет вывести историю команд, по умолчанию последние 32 команды. Число выводимых команд можно изменить с помощью параметра -Count.

Можно выделять из журнала сеанса команды, удовлетворяющие определённому критерию. Для этого используется конвейер и специальный командлет Where-Object. Например, для вывода команд, содержащих слово del, можно выполнить следующую команду:

×

Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!

Полученный с помощью Get-History список команд можно экспортировать во внешний файл в формате XML или CVS (текстовый файл с запятыми в качестве разделителя). Например:

Get-History | Export-CSV .\pshistory.csv

С помощью командлета Add-History можно добавлять команды обратно в журнал сеанса:

Import-CSV .\pshistory.csv | Add-History

Командлет Invoke-History (псевдонимы r, сокращение от «repeat» или «return», и ihy) позволяет повторно выполнять команды из журнала сеанса, при этом команды можно задавать по их порядковому номеру или первым символом, а также получать по конвейеру от командлета Get-History. Например:

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

При установке Windows PowerShell на 64-разрядном компьютере в дополнение к 64-разрядной версии устанавливается Windows PowerShell (x86) — 32-разрядная версия Windows PowerShell. При открытии Windows PowerShell по умолчанию запускается 64-разрядная версия.

Однако в некоторых случаях нужно запустить Windows PowerShell (x86), например при использовании модуля, которому требуется 32-разрядная версия, или при удаленном подключении к 32-разрядному компьютеру.

Для запуска 32-разрядной версии Windows PowerShell воспользуйтесь любой из следующих процедур.

В Windows Server 2012 R2

  • На экране Пуск щелкните Windows PowerShell (x86). Щелкните плитку Windows PowerShell x86.
  • Выберите пункт Windows PowerShell (x86) в меню Сервис****диспетчера сервера.
  • На рабочем столе переместите курсор в правый верхний угол, щелкните элемент Поиск, введите PowerShell x86 и выберите Windows PowerShell (x86) .
  • В командной строке введите следующее:

В Windows Server 2012

  • На экране Пуск введите PowerShell и выберите Windows PowerShell (x86).
  • Выберите пункт Windows PowerShell (x86) в меню Сервис****диспетчера сервера.
  • На рабочем столе переместите курсор в правый верхний угол, щелкните элемент Поиск, введите PowerShell и выберите Windows PowerShell (x86) .
  • В командной строке введите следующее:
  • На экране Пуск щелкните Windows PowerShell (x86). Щелкните плитку Windows PowerShell x86.
  • Если вы используете средства удаленного администрирования сервера для Windows 8.1, можно также открыть Windows PowerShell x86 из меню Сервис диспетчера сервера. Выберите Windows PowerShell (x86).
  • На рабочем столе переместите курсор в правый верхний угол, щелкните элемент Поиск, введите PowerShell x86 и выберите Windows PowerShell (x86) .
  • В командной строке введите следующее:

Как запустить PowerShell (от имени администратора) в Windows 10, 8.1, 8, 7

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

1. Запуск Windows PowerShell через меню «Пуск»

Самый популярный способ у нас будет первым, для Windows 10: открываем меню «Пуск» → «Все программы» → ищем каталог «Windows PowerShell» и выбираем файл нужной разрядности. На 32 битных системах будет только 32 битный исполняющий файл.

Если необходим PowerShell с правами администратора, то кликаем правой клавишей мыши по файлу, выбираем «Дополнительно» и жмем «Запуск от имени администратора».

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

Запуск от имени администратора по тому же сценарию, правой клавишей по файлу и выбираем «Запустить от имени администратора»

2. Запуск PowerShell через командную строку

Да, для любителей нестандартных путей, тоже способ есть)) Много способов запуска командной строки описаны здесь. Здесь же я опишу способ, который подходит для современных операционных систем. Нажимаем правой клавишей мыши по углу пуск или жмем Win+X, а в открывшемся меню выбираем подходящую командную строку. Если вам необходим PowerShell с правами администратора, то выбираем и командную строку с правами администратора.

В открывшееся окно вводим powershell и жмём Enter. После этого командная строка будет работать полностью как Windows PowerShell.

3. Запуск Windows PowerShell через окно проводника Windows

Открываем проводник и переходим в одну из папок:

a) 64bit PowerShell если стоит 64 битная система или 32bit PowerShell, если стоит 32 битная системаC:\Windows\System32\WindowsPowerShell\v1.0

b) 32bit PowerShell на 64 битных системах находится в папке:C:\Windows\syswow64\Windowspowershell\v1.0

Можно просто вставить ссылку в адресную строку.

Если вам нужен PowerShell с обычными правами, просто запускаем выделенный файл. Если же с правами администратора, жмём правой клавишей мыши и выбираем «Запуск от имени администратора».

4. Замена командной строки на PowerShell в контекстном меню «Пуск»

Вот во втором способе, мы использовали контекстное меню «Пуска» и там по-умолчанию добавлена командная строка. Это можно исправить. Скажем для системных администраторов, все чаще нужен PowerShell, вместо командной строки и вместе с добавлением контекстного меню, Microsoft добавили возможность замены командной строки на Windows PowerShell. Для этого, необходимо кликнуть правой клавишей мыши по пустому месту на «Панели задач». И выбрать её «Свойства».

На вкладке «Навигация» ставим галочку на «Заменить командную строку оболочкой Windows PowerShell…» и жмём ОК.

Теперь в контекстном меню можно сразу же запускать Windows PowerShell.

Материал сайта geekteam.pro

Создание самозаверяющего сертификата.

Чтобы создать самозаверяющий сертификат, используйте командлет New-SelfSignedCertificate в модуле PKI. этот модуль появился в PowerShell 3,0 и входит в Windows 8 и Windows Server 2012. Дополнительные сведения см. в разделе справки по командлету.

Использование Makecert.exe

чтобы создать самозаверяющий сертификат в более ранних версиях Windows, используйте средство создания сертификатов . это средство входит в состав пакета SDK для Microsoft .NET (версии 1,1 и более поздних) и в Microsoft Windows SDK.

Дополнительные сведения о синтаксисе и описаниях параметров средства см. в разделе средство создания сертификатов (MakeCert.exe).

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

Примечание

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

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

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

В командной строке PowerShell введите следующее:

Эта команда использует поставщик сертификата PowerShell для просмотра сведений о сертификате.

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

Постановка задачи

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

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

Переменные среды PowerShell

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

Ниже перечислены переменные среды, в которых хранятся настройки.

  • PSExecutionPolicyPreference

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

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

    • Используйте командлет . Используйте параметр Scope со значением «Process».

      Подробнее см. в разделе about_Execution_Policies.

  • псмодулеаналисискачепас

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

    Расположение кэша по умолчанию:

    • Windows PowerShell 5.1: .
    • PowerShell 6,0 и более поздние версии:
    • значение по умолчанию не Windows:

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

    Примечание

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

    Чтобы изменить расположение кэша по умолчанию, задайте переменную среды перед запуском PowerShell. Изменения этой переменной среды влияют только на дочерние процессы. Значение должно быть полным путем (включая имя файла), на создание и запись файлов по которому у среды PowerShell есть разрешение.

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

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

  • псдисаблемодулеаналисискачеклеануп

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

    Установка этой переменной среды вступает в силу немедленно в текущем процессе.

  • PSModulePath

    Переменная среды содержит список расположений папок, в которых выполняется поиск модулей и ресурсов.

    По умолчанию действующие расположения, назначенные, являются:

    • Расположения на уровне системы. Эти папки содержат модули, поставляемые с PowerShell. Модули хранятся в расположении. кроме того, это расположение, в котором устанавливаются модули управления Windows.

    • Модули, установленные пользователем: это модули, установленные пользователем.
      имеет параметр области , который позволяет указать, установлен ли модуль для текущего пользователя или для всех пользователей. Дополнительные сведения см. в разделе Install-Module.

      • в Windows расположением определяемой пользователем области CurrentUser является папка. Областью ALLUSERS является расположение .
      • в системах, отличных от Windows, расположением определенной пользователем области CurrentUser является папка. Областью ALLUSERS является расположение .

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

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

  • POWERSHELL_UPDATECHECK

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

    • отключает функцию уведомления об обновлении
    • то же самое, что не определяет :
      • В общедоступных выпусках выводятся уведомления об обновлениях для общедоступных выпусков.
      • В предварительных выпусках и релизах-кандидатах выводятся уведомления об обновлениях для общедоступных и предварительных выпусков.
    • уведомления об обновлениях только для выпусков долгосрочного обслуживания (LTS)

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

  • POWERSHELL_TELEMETRY_OPTOUT

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

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

Set-Executionpolicy

Что бы изменять значение политик выполнения скриптов PowerShell, существует коммандлет  Set-ExecutionPolicy.
Данный командлет имеет следующие параметры:

-ExecutionPolicy
Указывает значение политики. Может иметь следующие значения:  Restricted, AllSigned, RemoteSigned, Unrestricted, Bypass, Undefined. Данный параметр обязательный для указания. Если не указан, во время выполнения комадлет попросит указать значения.

PowerShell

Set-ExecutionPolicy

1 Set-ExecutionPolicy

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

-Scope
Определяет область применения данной политики. Может иметь следующие значения: LocalMachine ,Process, CurrentUser. Если параметр области применения не указан, по умолчанию указывается значение LocalMachine.

PowerShell

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process

1 Set-ExecutionPolicy-ExecutionPolicyUnrestricted-ScopeProcess

или

PowerShell

Set-ExecutionPolicy Unrestricted Process

1 Set-ExecutionPolicyUnrestricted Process

-Force
С этим параметром командлет не будет требовать подтверждения со стороны пользователя.

Пример

PowerShell

Set-ExecutionPolicy Unrestricted Process -Force

1 Set-ExecutionPolicyUnrestricted Process-Force

Командлет ничего не выведет на экран и применит значение политики.

-Confirm
Если же вам наоборот мало одного подтверждения. Можно указать параметр Confirm и у вас будет ещё один, дополнительный, запрос на подтверждение ваших действий:

PowerShell

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process -confirm

1 Set-ExecutionPolicy-ExecutionPolicyUnrestricted-ScopeProcess-confirm

Результат выполнения:

Подтверждение Вы действительно хотите выполнить это действие? Выполнение операции «Set-ExecutionPolicy» над целевым объектом «Unrestricted». Да — Y  Да для всех — A  Нет — N  Нет для всех — L  Приостановить — S  Справка (значением по умолчанию является «Y»):

Изменение политики выполнения Политика выполнения защищает компьютер от ненадежных сценариев. Изменение политики выполнения может поставить под угрозу безопасность системы, как описано в разделе справки, вызываемом командой about_Execution_Policies. Вы хотите изменить политику выполнения? Да — Y  Нет — N  Приостановить — S  Справка (значением по умолчанию является «Y»):

-WhatIf
С параметром WhatIf командлет не выполняется. А выводит на консоль свои предполагаемые действия без данного параметра.

PowerShell

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process -WhatIf

1 Set-ExecutionPolicy-ExecutionPolicyUnrestricted-ScopeProcess-WhatIf

Результат выполниня:

 WhatIf: Выполнение операции «Set-ExecutionPolicy» над целевым объектом «Unrestricted».

Как запустить PowerShell в папке

Если вам нужно запустить PowerShell в сразу определенной папке, то в Windows 10 для этого нужно открыть эту папку при помощи проводника и нажать на кнопку «Файл» в левом верхнем углу окна. В результате появится меню с помощью которого можно будет запустить данную программу с правами пользователя или от имени администратора.

В операционной системе Windows 7 вы можете запустить PowerShell в папке при помощи адресной строки. Для этого откройте нужную папку и введите в адресную строку команду «powershell».

В результате PowerShell откроется сразу в выбранной вами папке.

Кстати, таким образом вы можете запускать и стандартную командную строку, но в этом случае нужно вводить «cmd».

Запуск

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

  1. Пользователь (администратор) запускает первый экземпляр: PSService.ps1 –Start.
  2. Этот первый экземпляр сообщает SCM запустить службу: Start-Service $serviceName.
  3. SCM выполняет PSService.exe. Ее процедура Main создает объект службы, а затем вызывает его метод Run.
  4. SCM вызывает метод OnStart объекта службы.
  5. C#-метод OnStart запускает второй экземпляр скрипта: PSService.ps1 –Start.
  6. Этот второй экземпляр, теперь выполняемый в фоне как системный пользователь, запускает третий экземпляр, который останется в памяти как настоящая служба: PSService.ps1 –Service. Этот экземпляр и работает как служба.

В итоге будут выполняться две задачи: PSService.exe и экземпляр PowerShell.exe, выполняющий PSService.ps1 –Service.

За управление службами отвечает SCM.

Все это реализуется тремя частями кода в скрипте.

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

В процедуре Main в конце скрипта блок if обрабатывает ключ –Start:

Фрагмент исходного кода на C#, процедура Main и обработчик для OnStart, который выполняет команду PSService.ps1 –Start, как показано на рис. 4.

Рис. 4. Обработчик стартового кода

Запуск PowerShell от учетной записи NT AUTHORITY\SYSTEM из планировщика заданий

Данный метод более изощренный нежели использование внешней утилиты PSexec, но я уверен, что его так же полезно знать. В окне выполнить введите команду taskschd.msc.

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

Задаем ее имя у меня оно будет «Запуск PowerShell NT».

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

Задаем время запуска.

Оставляем пункт «Запустить программу» и нажимаем далее.

Тут нам необходимо заполнить два пункта:

  1. Поле программы или сценария
  2. Аргумент

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

  • x86 : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
  • x64 : %SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe

В качестве аргумента, вам необходимо указать путь до нашего скрипта, расположенного по пути C:\Scripts\Get-CurrentUser.ps1

–NoProfile –ExecutionPolicy Bypass –File C:\Demo\Get-CurrentUser.ps1

ExecutionPolicy, это команда позволяющая выполнять не подписанные скрипты.

Содержимое Get-CurrentUser.ps1

@{ ‘env:USERNAME’ = $env:USERNAME ‘whoami’ = whoami.exe ‘GetCurrent’ = ::GetCurrent().Name } | Format-List | Out-File -FilePath C:\Scripts\whoami.txt

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

заканчиваем создание простого задания, обязательно выставите галку «открыть окно «Свойств» для этой задачи после нажатия кнопки «Готово». Далее у вас откроется окно свойств данной задачи, вы можете заметить, что она по умолчанию выполняется от того пользователя, кто ее создал, в моем примере, это ROOT\Администратор, это нужно поменять. Нажмите кнопку изменить.

Если у вас русская Windows, то в окне поиска введите «СИСТЕМА», если английская версия, то введите SYSTEM.

В результате вы увидите, что задача запускается от системной учетной записи (nt authority\система).

В итоге если все хорошо, то у вас должен был быть запущен скрипт Get-CurrentUser.ps1, который в той же папке в файл whoami записал из под кого он выполнился, как видно, это nt authority\система (GetCurrent:NT AUTHORITY\СИСТЕМА). Таки образом вы можете запускать скрипты от имени системной учетной записи.

Надеюсь, что было полезно. На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Групповые политики и скрипты

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

Скрипты, выполняющиеся при старте и завершении системы.

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

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

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

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