Как конвертировать сценарии powershell с формата ps1 в exe

Как защититься от «глобального разрушения»?

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

Во-первых, добавляйте префикс ко всем вашим глобальным переменным и/или размещайте их в пространстве имен, дабы уменьшить вероятность возникновения конфликтов имен.

Например, вместо следующего:

#include <iostream>

double gravity (9.8); // по имени переменной непонятно, глобальная ли это переменная или локальная

int main()
{
return 0;
}

1
2
3
4
5
6
7
8

#include <iostream>
 

doublegravity(9.8);// по имени переменной непонятно, глобальная ли это переменная или локальная

intmain()

{

return;

}

Сделайте следующее:

#include <iostream>

double g_gravity (9.8); // теперь понятно, что это глобальная переменная

int main()
{
return 0;
}

1
2
3
4
5
6
7
8

#include <iostream>
 

doubleg_gravity(9.8);// теперь понятно, что это глобальная переменная

intmain()

{

return;

}

Во-вторых, вместо разрешения прямого доступа к глобальным переменным, лучше их «инкапсулировать». Сначала добавьте ключевое слово , чтобы доступ к ним был возможен только из файла, в котором они объявлены. Затем напишите внешние глобальные «функции доступа» для работы с переменными. Эти функции помогут обеспечить надлежащее использование переменных (например, при проверке ввода, проверке допустимого диапазона значений и т.д.). Кроме того, если вы когда-либо решите изменить первоначальную реализацию программы (например, перейти из одной базы данных в другую), то вам нужно будет обновить только функции доступа вместо каждого фрагмента кода, который напрямую использует глобальные переменные.

Например, вместо следующего:

double g_gravity (9.8); // можно экспортировать и использовать напрямую в любом файле

1 doubleg_gravity(9.8);// можно экспортировать и использовать напрямую в любом файле

Сделайте следующее:

static double g_gravity (9.8); // ограничиваем доступ к переменной только на этот файл

double getGravity() // эта функция может быть экспортирована в другие файлы для доступа к глобальной переменной
{
return g_gravity;
}

1
2
3
4
5
6

staticdoubleg_gravity(9.8);// ограничиваем доступ к переменной только на этот файл

doublegetGravity()// эта функция может быть экспортирована в другие файлы для доступа к глобальной переменной

{

returng_gravity;

}

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

Вместо следующего:

// Эта функция полезна только для расчета мгновенной скорости на основе глобальной гравитации
double instantVelocity(int time)
{
return g_gravity * time;
}

1
2
3
4
5

// Эта функция полезна только для расчета мгновенной скорости на основе глобальной гравитации

doubleinstantVelocity(inttime)

{

returng_gravity *time;

}

Сделайте следующее:

// Эта функция вычисляет мгновенную скорость для любого значения гравитации.
// Передайте возвращаемое значение из getGravity() в параметр gravity, если хотите использовать глобальную переменную gravity
double instantVelocity(int time, double gravity)
{
return gravity * time;
}

1
2
3
4
5
6

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

doubleinstantVelocity(inttime,doublegravity)

{

returngravity *time;

}

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

Адаптация скриптов PowerShell для Linux

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

В Invoke-TheHash есть функция Invoke-SMBEnum, которая выполняет перечисление пользователей, групп, сетевых сессий и совместных ресурсов. В Windows эта функция работает отлично. Попробую использовать её в Linux.

Запускаю консоль PowerShell:

pwsh

Перехожу в папку с уже скаченными скриптами:

cd ./bin/Invoke-TheHash/

Импортирую файл с нужной функцией:

Import-Module .\Invoke-SMBEnum.ps1

Запускаю:

Invoke-SMBEnum -Target 192.168.0.53 -Action All -Username HackWare-mial\Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -verbose

И получаю ошибку «Cannot find path ‘computername’ because it does not exist.», она означает, что не получается найти путь computername (имя компьютера), т. к. путь не существует. Ошибка возникла в этой строке:

$auth_hostname = (Get-ChildItem -path env:computername).Value

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

Get-ChildItem -path env:computername

то она вызовет эту же самую ошибку:

Get-ChildItem: Cannot find path 'computername' because it does not exist.

Можно предположить (лучше посмотреть в справке, но мне лень туда лезть), что env имеет отношение к переменным окружения, а computername — это имя переменной, которая содержит (как следует из названия) имя компьютера. Судя по всему, в Linux эта переменная окружения не существует.

Самое простое решение — прописать это имя вручную. Для этого открываю файл Invoke-SMBEnum.ps1 текстовым редактором, нахожу там строку

$auth_hostname = (Get-ChildItem -path env:computername).Value

И меняю её на такую строку:

$auth_hostname = 'hackware-mial'

То есть я просто прописал имя компьютера вместо получения его с помощью функции.

Важно помнить, что после импорта функция будет считываться не из файла, который я изменил, а из памяти. Поэтому чтобы PowerShell увидел сохранённые в файле изменения, нужно заново выполнить импорт файла — для этого пришлось закрыть (CTRL+d) и открыть заново PowerShell:

pwsh

Импортируем файл:

cd ./bin/Invoke-TheHash/
Import-Module .\Invoke-SMBEnum.ps1

И после этого вновь запускаю команду:

Invoke-SMBEnum -Target 192.168.0.53 -Action All -Username HackWare-mial\Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -verbose

В этот раз команда сработала.

Мораль:

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

History

The original gui.cs was a UI toolkit in a single file and tied to curses. This version tries to be console-agnostic and instead of having a container/widget model, only uses Views (which can contain subviews) and changes the rendering model to rely on damage regions instead of burdening each view with the details.

Release history can be found in the Terminal.Gui.csproj file.

In 2019, 2020, and 2021, Charlie Kindel (https://github.com/tig), @BDisp (https://github.com/BDisp), and Thomas Nind (https://github.com/tznind) vastly extended, improved, polished and fixed gui.cs to what it is today.

Execution policy

We have it all put together and we’re ready to launch. If you haven’t already, remember to set the execution policy so that you can run the script:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

Also, remember to run Windows PowerShell as an administrator. Otherwise you’ll hit this error message:

Set-ExecutionPolicy : Access to the registry key

‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell’ is denied. To change the execution policy for the default (LocalMachine) scope, start Windows PowerShell with the «Run as administrator» option. To change the execution policy for the current user, run «Set-ExecutionPolicy -Scope CurrentUser».

Запуск

За управление службами отвечает 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?

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

Set-ExecutionPolicy RemoteSigned -Scope Process

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

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

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

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

Set-ExecutionPolicy RemoteSigned

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

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

Getting started

I’m going to presume a lot here. I’m going to assume you’ve got modern Windows Server admin skills and are a proficient Windows PowerShell scripter. I’m also going to assume you’ve heard of XML and XPath, event-driven programming, and some basics about object-oriented programming. If not, please get started with the following resources.

     Note  The mention of these resources is not an endorsement.  

  • Scripting with Windows PowerShell
  • Understanding Event Driven Programming – 23
  • XPath Tutorial 
  • Windows Presentation Foundation (WPF) interface fundamentals

WPF and XAML are important concepts to grasp for this methodology. To begin, let’s review a bit about WPF and XAML (from the documentation). Here are some significant pieces of the documentation that should help you understand a bit more about why we are using them.

Introduction to WPF

WPF is a next-generation presentation system for building Windows client applications. It is a resolution-independent and vector-based rendering engine. WPF extends the core with a comprehensive set of application development features that include Extensible Application Markup Language (XAML). WPF is included in the Microsoft .NET Framework, so you can build applications that incorporate other elements of the .NET Framework class library.

WPF exists as a subset of .NET Framework types that are for the most part located in the System.Windows namespace. You instantiate classes, set properties, call methods, and handle events by using your favorite .NET Framework programming language.

WPF offers the ability to develop an application by using markup and code-behind, which is an experience that ASP.NET developers should be familiar with. You generally use XAML markup to implement the appearance of an application while using managed programming languages (code-behind) to implement its behavior.

XAML Overview (WPF)

XAML is an XML-based markup language that is used to implement an application’s appearance declaratively. It is typically used to create windows, dialog boxes, pages, and user controls, and to fill them with controls, shapes, and graphics. Because XAML is XML-based, the UI that you compose with it is assembled in a hierarchy of nested elements known as an element tree.

Если драйвера нет на сайте

Редко, но бывает, что на официальном сайте производителя устройства нет никаких драйверов. Здесь придется воспользоваться великим и могучим кладезем знаний под названием Google. Для того чтобы найти в сети требуемый драйвер, нужно скопировать цифровое обозначение устройства. Для этого нужно зайти в диспетчер задач и выбрать «Неизвестное устройство». Затем нужно щелкнуть правой кнопкой мыши по названию и открыть вкладку «Свойства».

Далее выбираем вкладку «Сведения» и в появившейся строке выбираем пункт «ИД оборудования». В окне появится набор букв и цифр. Этот самый шифр вводим в строку поиска Google, и умный поисковик выдает драйвер именно для нашего устройства. Теперь остается только скачать и установить программное обеспечение.

Но иногда и это не помогает. Значит, самое время перейти к следующему пункту инструкции «Как найти драйвер для неизвестного устройства».

Установка

Цель установки службы — сохранить копию ее файлов в локальном каталоге и объявить 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. Обработчик кода установки

Отладка с помощью Visual Studio Code

Отладка без рабочей области

Начиная с версии VS Code 1.9, вы можете отлаживать скрипты PowerShell, не открывая папку со скриптом PowerShell.

  1. Откройте файл скрипта PowerShell с помощью команды Файл > Открыть файл.
  2. Установите точку останова на строке и нажмите клавишу F9.
  3. Нажмите клавишу F5, чтобы запустить отладку.

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

Отладка с рабочей областью

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

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

  1. Откройте представление Отладка в Windows или Linux (CTRL+SHIFT+D). В macOS нажмите клавиши CMD+SHIFT+D.

  2. Щелкните ссылку create a launch.json file (Создать файл launch.json).

  3. В окне запроса Select Environment (Выбор среды) выберите PowerShell.

  4. Выберите тип отладки, который хотите использовать:

    • Launch Current File (Запуск текущего файла) — запуск и отладка файла в текущем активном окне редактора.
    • Launch Script (Запуск скрипта) — запуск и отладка указанного файла или команды.
    • Interactive Session (Интерактивный сеанс) — команды отладки, выполняемые из интегрированной консоли.
    • Attach (Подключение)  — подключение отладчика к выполняемому хост-процессу PowerShell.

VS Code создаст каталог и файл в корневой папке рабочей области, где будет храниться конфигурация отладки. Если ваши файлы хранятся в репозитории Git, скорее всего, вы захотите зафиксировать файл . Содержимое файла :

Этот файл представляет типичные сценарии отладки. При открытии его в редакторе отображается кнопка Добавить конфигурацию… Можете нажать ее, чтобы добавить дополнительные конфигурации отладки PowerShell. Одной из полезных конфигураций является PowerShell: Launch Script (Запустить сценарий). С помощью этой конфигурации можно указать файл с дополнительными аргументами, которые используются при каждом нажатии клавиши F5, независимо от того, какой файл активен в редакторе.

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

Windows Service Control Manager

Службы управляются Windows Service Control Manager (SCM). SCM отвечает за конфигурирование служб, их запуск и остановку и т. д.

Панель управления SCM доступна через Control Panel | System and Security | Administrative Tools | Services. Как показано на рис. 1, она отображает список всех сконфигурированных служб с их названиями, описаниями, состоянием, типом запуска и именем пользователя.

Рис. 1. Windows Service Control Manager GUI в Windows 10

Для SCM также имеются интерфейсы командной строки.

  • Старая утилита net.exe с хорошо известными командами net start и net stop, корнями уходящая аж в MS-DOS! Несмотря на такое название, ее можно использовать для запуска и остановки любой службы, а не только сетевых служб. Введите net help, чтобы получить подробное описание.
  • Более мощная утилита, sc.exe, введенная в Windows NT, дает тонкий контроль над всеми аспектами управления службами. Введите sc /?, чтобы получить подробное описание.

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

Подвох Как net.exe, так и sc.exe используют «короткие» имена служб в одно слово, которые, к сожалению, не совпадают с более описательными названиями, отображаемыми в панели управления SCM. Чтобы получить соответствие между двумя именами, используйте команду get-service из Windows PowerShell.

Loading the dialog box

To make this easier (but admittedly more complex to understand), you’ll need the following helper cmdlet to load and interpret the XAML. Simply save the following text as loadDialog.ps1:

Param(

 $XamlPath

$Global:xmlWPF = Get-Content -Path $XamlPath

#Add WPF and Windows Forms assemblies

try{

 Add-Type -AssemblyName PresentationCore,PresentationFramework,WindowsBase,system.windows.forms

} catch {

 Throw «Failed to load Windows Presentation Framework assemblies.»

}

#Create the XAML reader using a new XML node reader

$Global:xamGUI = ::Load((new-object System.Xml.XmlNodeReader $xmlWPF))

#Create hooks to each named object in the XAML

$xmlWPF.SelectNodes(«//*») | %{

 Set-Variable -Name ($_.Name) -Value $xamGUI.FindName($_.Name) -Scope Global

 }

.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 3,0 на локальном и удаленном компьютерах должны быть выполнены следующие действия.

  • Windows PowerShell 3,0 или более поздней версии
  • Microsoft платформа .NET Framework 4 или более поздней версии
  • Windows Удаленное управление 3,0

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

  • Windows PowerShell 2,0 или более поздней версии
  • Microsoft платформа .NET Framework 2,0 или более поздней версии
  • Windows Удаленное управление 2,0

можно создавать удаленные сеансы между компьютерами с Windows PowerShell 2,0 и Windows PowerShell 3,0. однако функции, которые выполняются только в Windows PowerShell 3,0, например возможность отключения и повторного подключения к сеансам, доступны только в том случае, если оба компьютера работают под управлением Windows PowerShell 3,0.

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

Windows удаленное управление (WinRM) 3,0 и Microsoft платформа .NET Framework 4 включены в Windows 8, Windows Server 2012 и более новые выпуски Windows операционной системы. WinRM 3,0 входит в Windows Management Framework 3,0 для старых операционных систем. если на компьютере не установлена требуемая версия WinRM или Microsoft платформа .NET Framework, установка завершится сбоем.

Копирование файлов и папок

Копирование выполняется с помощью командлета . Следующая команда создает резервную копию C:\boot.ini в C:\boot.bak:

Copy-Item -Path C:\boot.ini -Destination C:\boot.bak

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

Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force

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

Так же выполняется и копирование папок. Эта команда копирует папку  в новую папку  рекурсивно.

Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe

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

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text

Для копирования элементов файловой системы можно использовать и другие средства. В Windows PowerShell по-прежнему работают команды XCOPY, ROBOCOPY и такие COM-объекты, как Scripting.FileSystemObject. Например, можно воспользоваться COM-классом Scripting.FileSystem сервера сценариев Windows для создания резервной копии файла  в файле :

(New-Object -ComObject Scripting.FileSystemObject).CopyFile('C:\boot.ini', 'C:\boot.bak')

Параметры конфигурации для Visual Studio Code

Прежде всего, если вы не знаете, как изменить параметры в VS Code, мы рекомендуем ознакомиться с документацией по параметрам Visual Studio Code.

После этого вы сможете добавить параметры конфигурации в .

Если вы не хотите, чтобы эти параметры влияли на все типы файлов, в VS Code можно задавать конфигурации для каждого языка отдельно. Создать параметр для конкретного языка можно, поместив параметры в поле . Пример:

Совет

Добавление собственных путей PowerShell в меню сеансов

В меню сеанса можно добавить другие пути к исполнимому файлу PowerShell с помощью параметра Visual Studio Code: .

Добавьте элемент в список или создайте список, если его нет в :

Каждый элемент должен иметь следующее:

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

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

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

Открыв меню сеансов, вы увидите дополнительные версии PowerShell.

Примечание

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

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

Для запуска скрипта с расширением .ps1 нужно открыть консоль PowerShell и затем указать полный путь до файла. Вы также можете перейти в папку со скриптом либо с помощью команды cd, либо, если вы хотите полностью окунуться в стиль PowerShell, то можете использовать Set-Location.

Например, мне нужно перейти в папку C:\Users\Администратор\Downloads\WinPwn-master\:

Set-Location C:\Users\Администратор\Downloads\WinPwn-master\

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

Set-ExecutionPolicy unrestricted

Подробности смотрите в статье «Ошибка «Невозможно загрузить файл ….ps1, так как выполнение сценариев отключено в этой системе» (РЕШЕНО)»

Запуск скрипта с помощью Import-Module

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

Например для запуска WinPwn нужно вначале импортировать файл с функциями:

Import-Module .\WinPwn.ps1

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

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

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