Выполнение скриптов powershell с правами администратора. Примеры PowerShell скриптов для Windows

В админиcтрировании всегда есть место творчеству. Хочешь сделать какую-нибудь автоматизацию рутинной задачи? Пожалуйста! Нужно что-то регулярно проверять на активность? Не вопрос! Хочешь обработать какой-нибудь гигантский отчет и вывести только актуальные данные? Тоже можно. Все эти и многие другие задачи лучше всего решать при помощи скриптов, и язык PowerShell в случае с Windows - оптимальный выбор.

Что такое PowerShell и чем он хорош

Пользователи UNIX и Linux, а с какого-то мoмента и macOS привыкли к тому, что под рукой всегда есть Bash - немного старомодное, но универсальное и мощное средство, при помощи которого всего парой строк можно творить удивительные вещи. Прописываешь новый скрипт в cron - и готово, он уже крутится на твоем компьютере или на сервере и незаметно делает что-нибудь полезное.

Возвращаясь в Windows (а без этого иногда никак), понимаешь, что скрипты.bat хоть и хороши, но спасают не всегда: очень уж ограниченны их возможности. И если ты до сих пор считал, что PowerShell - это неведомая штуковина, ради которой нужно что-то там поднимaть и настраивать, то не спеши с выводами - он, если разобраться, совсем неплох.

Windows PowerShell - это расширяемое средство автоматизации с открытыми исходниками, которое состоит из оболочки (командной строки) и скриптового языка. Впервые он был показан в 2003 году (тогда он назывался Monad). PowerShell 2.0 вышел в составе Windows 7 и Windows Server 2008 R2 и с тех пор присутствует в Windows в качестве стандартного компонента. Его даже включили в Windows XP SP3. PowerShell построен на основе.NET Framework и интегрирован с ним. PowerShell может обращаться к COM, WMI и ADSI, а также, конечно же, исполняет консольные команды.

В общем, «пошик» имеет крепкие связи с продуктами Microsoft, будь то Active Directory или почтовый сервер Exchange. Это позволяет без подключения к оснастке сервера обращаться к ним через консоль и отдaвать команды.

Если раньше ты не интересовался PowerShell, то, скорее всего, у тебя стоит вторая версия. Я рекомендую обновиться как минимум до третьей - она содержит куда больше возможностей и полезных фишек. Если не вдаваться в подробности, то в PowerShell 2.0 входит около десятка модулей и примерно 350 команд, а в PowerShell 3.0 уже около 2300 командлетов из более чем 70 модулей. «Хакер» также писал о том, чем отличается самый новый PowerShell пятой версии из Windows 10.

Выбираем среду разработки и инструменты

Теперь давай разберемся, где удобнее всего писать код. Можно, конечно, и в «Блокноте», Notepad++ или Sublime. Но это в данном случае не самый грамотный выбор редактора. Лучше всего начинать знакомство с PowerShell, вооружившись идущим в комплекте .


Это даже не редактор, а практически полноценная среда разработки. Здесь есть функция IntelliSense, которая позволяет просматривать перечень командлетов и их параметров, переменных, утилит и прочего. Поддерживаются сниппеты, есть возможность расширения нaбора функций за счет различных аддонов. Очень полезно и окно Commands. В нем можно составлять команды в визуальном режиме: выбираешь модуль, находишь нужный командлет и задаешь ему необходимые параметры. Получившуюся команду можно скопировать в консоль или сразу запустить на выполнение. В общем, этакий конструктор для админа. Ну и конечно, есть подсветка синтаксиса, дебаггер и многое другое.

Тем не менее у PowerShell ISE есть и достойные конкуренты. Один из них - .

PowerGUI - это визуальное дополнение к PowerShell. Оно упрощает сборку собственных сценариев до выбора необходимых командлетов. Берешь то, что нужно для решения задачи, и перетаскиваешь части кода, пока не получишь скрипт. Одна из главных фишек PowerGUI - это Power Packs, готовые скрипты, опубликованные сообществом пользователей и выложенные в свобoдный доступ. Тут есть и простенькие команды вроде добавления пoльзователей, и сложные - к примеру, управление свитчами и виртуальными машинaми. Все их легко дополнять и модифицировать в соответствии с нуждами.


Фирмы Sapien - бoлее продвинутая среда, которая рассчитана на совместную разработку одного проекта большим количеством участников. Если ты когда-нибудь имел дело с Visual Studio, то, думаю, заметишь сходство. Среди полезных фишек PowerShell Studio - панель Ribbon, поддержка удаленной отладки, а также функции компилятора, которые позволяют включить скрипты в исполняемые файлы. Есть поддержка разных версий PowerShell.


Стоит упомянуть и Script Browser для Windows PowerShell ISE. Это не среда разработки, но вeсьма интересный инструмент, разработанный в Microsoft. Script Browser открывает доступ к базе готовых скриптов, которые можно использовать в качестве образцов для написания своего кода. А еще эта штука умеет анализировать код, который ты пишешь, и подсказывает, как его улучшить.


Несколько полезных трюков

Разобравшись с редактором, можно приступать к написанию кода. PowerShell - несложный язык, и, я думаю, ты быстро разберешься, что к чему. Команды здесь называются командлетами, и каждый из них состоит из двух частей. Сначала идeт действие, например Get, Set, Add, Invoke, Remove. Затем указывается то, на что действие направлено: Service, VM, AzureAccount, DHCPServerSetting. Каждая часть отделяется от другой дефисом. Получается, к примеру, get-process. Это, кстати, полезная команда, которая выводит список процессов. Скажем, если написать

get - process BadTh *

увидим что-то такое:

Handles NPM (K ) PM (K ) WS (K ) VM (M ) CPU (s ) Id ProcessName

------------------------

28 4 - 210844 - 201128 - 163 25.67 2792 BadThread

Теперь можно завершить зависший процесс:

Можно проcмотреть рекурсивно, правда уже чуть с более сложной логикой:

Можно также выполнить

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

Get - AdUser - Filter * - Properties OfficePhone | FT OfficePhone , UserPrincipalName

PowerShell в сравнении с bat

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

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

Вот так через bat можно перезагрузить службу dnscache (или любую другую):

sc stop dnscache

sc start dnscache

Всем привет! Сегодня небольшая заметка на тему, как открыть powershell от имени администратора . Напомню PowerShell, это мощный язык программирования и администрирования от компании Microsoft, каждый год он обрастает, все большим количество командлетов и функциональностей. По сути, это замена командной строке Windows . Ниже рассмотрим методы позволяющие его открыть и настроить.
.

Методы открытия оснастки PowerShell

Powershell очень хорошо развивается и с выходом Windows 10 получил уже 5 версию, но у нас тема другая. Так как открыть powershell? Все просто если в Windows XP, то никак. так он доставляется отдельно, во всех последующих релизах он идет как встроенный компонент. Самый универсальный способ открытия powershell это нажать

Win+R и ввести powershell

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

Как запустить windows powershell от имени администратора в Windows 8.1 и Windows 7

Открыть windows powershell можно через пуск. В Windows 8.1, Windows 2012 R2 переходите в пункт Служебные - Windows и правым кликом выбираете запустить от имени администратора.

В Windows 7 и Windows 2008 R2 это выглядит вот так Пуск > Стандартные > Windows PowerShell

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

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

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

Нажимаем кнопку "Дополнительно". У вас откроется дополнительные свойства. где вам нужно выставить галку запуск от имени администратора.

Все очень просто. Уверен, что у вас теперь не встанет вопроса как вам открыть windows powershell. Еще полезным бывает поменять шрифт в окне powershell.

Как открыть PowerShell через контекстное меню кнопки «Пуск» в Windows 10

Компания Microsoft, все больше делает акцент с командной строки в сторону своего сильного языка (PowerShell), и это логично, так как его возможности по управлению операционными системами семейства Windows, почти безграничны, а то и больше, чем в графическом интерфейсе. Начиная с версии Windows 10 1709, в контекстном меню, PowerShell, заменил всем привычный cmd. Щелкаете правым кликом по кнопке пуск в Windows 10 и из контекстного меню, выбираем соответствующий пункт:

  1. Windows PowerShell
  2. Windows PowerShell (администратор) - это как раз и есть режим с максимальными правами в Windows 10.

Запуск Windows PowerShell с помощью поиска в Windows 10

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

Запуск Windows PowerShell с помощью меню Пуск в Windows 10

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

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

Дополнительные и универсальные методы запуска оболочки

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

C:\Users\имя пользователя\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell

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

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

C:\Windows\System32\WindowsPowerShell\v1.0

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

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

Ну и еще напомню метод, запуска новой задачи из оснастки "Диспетчер задач". Откройте "Диспетчер задач", выберите пункт меню "Файл - Запустить новую задачу"

В появившемся окне введите PowerShell.

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

Что такое PowerShell ISE

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

powershell шрифт меняется очень просто перейдите в свойствах на вкладку Шрифт, где вы можете задать размер от 5 до 72.

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

Тут настройки шрифта немного другие, вместе с их изменением, меняется и размер консоли.

На вкладке Цвета, можете задать цвет шрифта в powershell да и самого окна. Сделав его например черным, как командная строка.

Так же советую, если вы активный консольщик выставить размер буфера не в 50 команд, а хотя бы в 100.

Спасибо за внимание. Вот такие вот методы, открытия консоли Power Shell в Windows. Материал сайта

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


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

Ограниченный (Restricted)
Значение по умолчанию. Блокируется выполнение любых скриптов и разрешается работа интерактивных команд.
Все подписанные (All Signed)
Разрешено выполнение скриптов, имеющих цифровую подпись.
Удаленные подписанные (Remote Signed)
Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
Неограниченный (Unrestricted)
Разрешено выполнение любых скриптов. При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.
Обходной (Bypass)
Ничего не блокируется, никакие предупреждения и запросы не появляются.

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

Самым безопасным способом решения этой проблемы является – изменение политики выполнения на неограниченную, запуск скрипта, и затем обратный возврат к ограниченной политике.

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

Y (Да )

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

После запуска команды вам будет предложено подтвердить изменение политики выполнения. Ответим Y (Да )

Блокируется выполнение любых скриптов. Значение по умолчанию.

Set-ExecutionPolicy Restricted

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

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

Set-ExecutionPolicy RemoteSigned

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

Set-ExecutionPolicy Unrestricted

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

Для выполнения выше представленных команд без подтверждения изменения, воспользуйтесь параметром
 -Force , например выполните команду:

Set-ExecutionPolicy Bypass -Force

Теперь при выполнении команд не нужно подтверждать производимые изменения.

Запуск программы из PowerShell

Задача запустить из PowerShell какой либо исполняемый файл (программу или утилиту командной строки) встречается достаточно часто. PowerShell предлагает для этого несколько различных способов, которые мы и рассмотрим далее в этой статье. Начнем с самого простого…

Прямой запуск

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

Set-Location ″C:\Program Files″
.\Hello.exe

Обратите внимание, что даже находясь в нужном каталоге, требуется указывать относительный путь к исполняемому файлу. Исключение составляют файлы из директорий, перечисленных в переменной окружения (path). Например различные встроенные программы и утилиты (notepad, calc, ping и т.п.), находящиеся в директории Windows\System32, можно запускать без указания пути.

Оператор &

Если необходимо указать полный путь к исполняемому файлу, то можно воспользоваться оператором & (оператор вызова). Он позволяет выполнить строку текста, указанную в кавычках, как единую команду. Например:

& ′C:\Program Files\Hello.exe′

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

& ′C:\Program Files\Hello.exe′ ′Hello, world′

При желании можно указать нескольких аргументов через запятую:

& ′C:\Program Files\Hello.exe′ ′Hello,′, ′ world′

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

$exe = ′C:\Program Files\Hello.exe′
$arg1 = ′Hello′
$arg2 = ′world′
& $exe $arg1 $arg2

Ну и если аргументов много, то их можно объединить, воспользовавшись такой конструкцией:

$exe = ′C:\Program Files\Hello.exe′
$allargs = @(′Hello,′,′world′)
& $exe $allargs

Invoke-Expression

Командлет Invoke-Expression работает примерно так-же, как и оператор & — берет текстовую строку и выполняет ее в виде команды. Например:

Invoke-Expression -Command ′C:\Windows\Hello.exe′

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

Invoke-Expression -Command ′C:\Program Files\Hello.exe′

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

Invoke-Expression -Command ″C:\′Program Files′\Hello.exe″

Start-Process

Командлет Start-Process запускает указанный файл в виде процесса, используя метод Start .NET класса Process . Например:

Start-Process -FilePath ′C:\Program Files\Hello.exe′

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

Start-Process -FilePath ′C:\Program Files\Hello.exe′ -NoNewWindow -Wait

Также Start-Process позволяет передать в процесс дополнительные аргументы:

Start-Process -FilePath ′C:\Program Files\Hello.exe′ -ArgumentList ′Hello, world′ -NoNewWindow -Wait

По умолчанию командлет ничего не возвращает, но с помощью параметра -PassThru можно заставить его вернуть объект процесса. Этот объект очень удобно поместить в переменную:

$process = Start-Process -FilePath ′C:\Program Files\Hello.exe′ -Wait -PassThru

из которой можно затем можно узнать многие полезные вещи, такие как статус:

$process.HasExited

$process.ExitTime

или код выполнения:

$process.ExitCode

.NET

В принципе.NET классом Process можно воспользоваться напрямую, без командлета Start-Process. К примеру, запустить процесс можно командой:

::Start(′C:\Program Files\Hello.exe′)

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

$process = New-Object -TypeName System.Diagnostics.Process
$process.StartInfo.FileName = ″C:\Program Files\Hello.exe″
$process.StartInfo.Arguments = ″Hello,world″
$process.StartInfo.RedirectStandardOutput = $true
$process.StartInfo.UseShellExecute = $false
$process.Start()
$process.WaitForExit()

$process.StandatdOutput.ReadToEnd()

WMI

С помощью WMI можно сделать практически все, в том числе и запустить программу. Для этого вполне подойдет метод Create WMI-класса Win32_Process. Этот метод запускает процесс на локальном или удаленном компьютере через RPC. Например, для выполнения программы на локальном компьютере можно воспользоваться такой командой:

()″Win32_Process″).Create(′C:\Program Files\Hello.exe′)

А для выполнения на удаленном компьютере команда будет выглядеть так:

()″\\remotecomputer\root\cimv2:Win32_Process″).Create(′C:\Program Files\Hello.exe′)

Как вариант, можно воспользоваться командлетом Invoke-WmiMethod:

Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList ″C:\Program Files\Hello.exe″

Либо командлетом Invoke-CimMethod:

Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine=″C:\Program Files\Hello.exe″}

WMI запускает процесс в отдельном окне и возвращает объект, содержащий идентификатор процесса (ProcessID) и результат выполнения (ReturnValue). ReturnValue может принимать следующие значения:

0 — Sucsessful Completiom
2 — Access Denied
3 — Insufficient Privilege
8 — Uncnown Failure
9 — Path Not Found
21 — Invalid Parameter

Invoke-Command

Командлет Invoke-Command умеет выполнять команды на локальном или удаленном компьютере, используя WinRM. Например, для запуска нашей программы на локальном компьютере используем команду:

Invoke-Command -ScriptBlock {″C:\′Program Files′\Hello.exe″}

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

Invoke-Command -ScriptBlock {C:\′Program Files′\Hello.exe ″Hello,world″}

Обратите внимание, что Invoke-Command не очень дружит с пробелами, поэтому во избежании ошибок приходится исхитряться с кавычками. Впрочем, подобных проблем можно избежать, например комбинируя использования командлета с оператором &:

Invoke-Command -ScriptBlock {& ′C:\Program Files\Hello.exe′}

В основном Invoke-Command применяется для удаленного управления, его главное достоинство — это возможность одновременного выполнения на нескольких компьютерах. Например:

Invoke-Command -ScriptBlock {″C:\′Program Files′\Hello.exe″} -ComputerName SRV1,SRV2,SRV3

$scriptblock = {″C:\′Program Files′\Hello.exe″}
$Computers = @(′SRV1′,′SRV2′,′SRV3′)
Invoke-Command -ScriptBlock $scriptblock -ComputerName $Computers

По умолчанию командлет возвращает результат выполнения программы, а если запустить его в фоновом режиме (параметр -AsJob), то возвращает объект Job:

Invoke-Command -ScriptBlock {C:\′Program Files′\Hello.exe} -ComputerName localhost -AsJob -JobName Hello

Invoke-Item

Командлет Invoke-Item предназначен для применения к файлу действия по умолчанию. Так запустить исполняемый файл можно командой:

Invoke-Item -Path ″C:\Program Files\Hello.exe″

Однако наиболее удобно использовать Invoke-Item для открытия определенного типа файлов. Например так мы откроем текстовый файл:

Invoke-Item -Path ″C:\Files\test.txt″

А так все текстовые файлы в папке:

Invoke-Item -Path ″C:\Files\*.txt″

CMD

Ну и в завершение еще один способ запуска программы из PowerShell — с помощью оболочки cmd. Способ достаточно ″непрямой″, но тем не менее работающий. Следующая команда запускает новый экземпляр cmd, выполняет в нем указанную программу, завершает работу cmd и возвращает результат:

cmd /c ″C:\Program Files\Hello.exe″

Такое вот изобилие способов запустить программу предоставляет PoSh. И каждый из них хорош для определенных ситуаций.

Кстати, статья написана по мотивам PowerShell: Deep Dive and Best Practice . Рекомендую почитать, там еще много интересного.

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

  1. Запустить оболочку PowerShell и в ней запустить скрипт (ввести путь до файла и имя файла, например, так: C:\Scripts\test.ps1, или перейти в папку скрипта командой cd C:\Scripts и запустить его командой.\test.ps1)Оболочку можно найти и запустить множеством способов. Один из способов - через меню "Пуск". Для Windows 7 - нужно зайти во "Все программы" - "Стандартные" - "Windows PowerShell" и запустить оболочку "Windows PowerShell". Для Windows 10 - нужно найти группу на букву "W" и в ней вы найдете "Windows PowerShell".
  2. Запустить "Интегрированную среду сценариев Windows PowerShell ISE" - это программа - среда разработки, позволяющая редактировать и отлаживать скрипты PowerShell, которая так же есть по-умолчанию вместе с самим PowerShell. Запустив ее, нужно просто нажать кнопку "Открыть" или зайти в меню Файл - Открыть и выбрать нужный скрипт, затем нажать F5 или кнопку "Выполнить скрипт".Найти Windows PowerShell ISE можно там же, где и оболочку PowerShell - в меню "Пуск".
  3. Запустить стандартную коммандную строку и в ней написать:
    powershell -file <имя_скрипта> (пример: powershell -file myscript.ps1)

Если вы раньше не запускали скрипты PowerShell, то скорее всего, вы получите сообщение: Не удается загрузить файл <имя_скрипта>, так как выполнение скриптов запрещено для данной системы. Введите «get-help about_signing» для получения дополнительных сведений. Связано это с тем, что из соображений безопасности и недопущения случайного выполнения вредоносного кода, все скрипты должны быть подписаны цифровой подписью.

Как разрешить выполнение неподписанного скрипта PowerShell?

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

Set-ExecutionPolicy RemoteSigned -Scope Process

2. При запуске из стандартной коммандной строки использовать параметр -executionpolicy, т.е. запускать скрипт так:

<имя_скрипта>

Оба способа устанавливают политику только для текущего сеанса, при этом, политика безопасности выполнения скриптов PowerShell, прописанная в реестре, не будет изменена и останется прежней. Если вы хотите поменять политику безопасности выполнения скриптов "на постоянно", то используйте такой способ:

3. Разрешить запуск навсегда : запустить оболочку PowerShell от имени "Администратора", затем выполните команду:

Set-ExecutionPolicy RemoteSigned

Примечание: Если скрипт был загружен из интернета, то чтобы избежать запроса на подтверждение запуска, нужно вместо RemoteSigned использовать Bypass - полное отключение любых запросов и предупреждений.

Как запустить скрипт PowerShell в фоновом режиме?

Для этого достаточно использовать параметр запуска -WindowStyle, который может принимать значения: Normal, Minimized, Maximized и Hidden. Таким образом, чтобы запустить неподписанный скрипт в фоновом режиме, нужно выполнить команду:

powershell -executionpolicy RemoteSigned -WindowStyle Hidden -file <имя_скрипта>

Так же можно еще при желании добавить -NonInteractive, чтобы скрипт не задавал никаких вопросов. Таким образом, скрипт выполнится незаметно для пользователя. Будmте внимательны, используя такой способ.

Запуск скрипта PowerShell c параметрами

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

powershell -executionpolicy RemoteSigned -file <имя_скрипта> param1 param2 "еще один текстовый параметр"

В самом скрипте вы можете получить эти параметры так:

Param ($var1, $var2, $var3) echo $var1, $var2, $var3

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

Как запустить скрипт PowerShell с помощью ярлыка?

Осуществить такую задачу можно двумя способами:

  1. Создать bat/cmd файл, в котором прописать команду для запуска скрипта (с параметрами вы ознакомились выше)
  2. Создать ярлык на PowerShell, который можно найти в папке c:\Windows\System32\WindowsPowerShell\v<версия>\ и в свойствах ярлыка в поле "Объект" дописать необходимые параметры.

Таким образом, например, чтобы запустить скрипт powershell при входе пользователя, можно просто создать ярлык, как описано во 2-м пункте и поместить его в автозагрузку. Так же, создание ярлыка одним из способов выше позволит легко запустить скрипт от имени администратора или от имени любого другого пользователя как обычную программу.

Скриптовый язык PowerShell - довольно мощный инструмент для решения различных задач, но его можно использовать не только для хороших вещей, но и во вред, поэтому, пользуйтесь им с умом;)