Хотите верьте, хотите нет, но вы можете свободно вызывать объекты и функции aardio в PowerShell без какого-либо сложного кода? ! aardio теперь поддерживает такой геймплей, просто взгляните на код без всякой ерунды:


var ps1 = /*     # 定义命名参数    param($win,$external,$username)        # 自由调用参数传进来的 aardio 对象    $win.msgboxTest("这是 PowerShell 调用 aardio 打开的对话框。") #返回值会自动输出一行        # 自由调用 aardio 函数     $external.func("参数1","参数2")  */
import win;import dotNet.ps;var output = dotNet.ps(ps1,{ win = win; //参数名前不要加$或- external = { func = function(title,text){ win.msgbox(text,title) } }; });

Очень волшебно, вы можете произвольно вызывать объекты aardio и функции aardio в PowerShell. Нет необходимости писать какой-либо сложный код.

Параметр @1 dotNet.ps(script,param) — это сценарий PowerShell, а параметр @2 — это параметр для вызова сценария. Этот параметр может быть табличным объектом. Пара «имя-значение» в таблице параметров — это тот, который указывает PowerShell.Именованные параметры. Элементы массива в таблице массива - это анонимные параметры.

Пример анонимного параметра:

var ps1 = /*   for ( $i=0; $i -lt $args.count; $i++){    write-host $args[$i]}  */
import dotNet.ps;var output = dotNet.ps(ps1,{ "匿名参数1","匿名参数2","匿名参数3","匿名参数4"}); import console;console.log(output); console.pause();

Анонимные параметры также можно записать так:

dotNet.ps(ps1,"匿名参数1","匿名参数2","匿名参数3","匿名参数4");

Если вы хотите выполнить команду, вы также можете использовать функцию dotNet.ps.command() Метод передачи параметров точно такой же, как и при использовании dotNet.ps Пример:

import dotNet.ps;var output = dotNet.ps.command("Get-Command",{Name="*Process"});
import console;console.logPause(output);

По умолчанию вывод PowerShell — например, с Write-Host, Write-Output автоматически перехватывается и возвращается в возвращаемом значении функции. Вы также можете указать функцию обратного вызова для получения выходных данных PowerShell, например:

import console;import dotNet.ps;dotNet.ps.onWrite = function(str){  console.log(str)} dotNet.ps.command("Get-Command",{Name="*Process"});console.pause(output);

В качестве альтернативы мы можем указать обратный вызов dotNet.ps.onWriteProgress для настройки индикатора выполнения PowerShell, например:

картина

Исходный код здесь:
aardio поставляется с примерами/вызовом других языков/PowerShell/индикатором выполнения

картина

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

картина

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

Если вы не хотите изменять настройки системных разрешений, aardio предоставляет функцию для прямого запуска скрипта ps1, например:

import process.popen;var ps1  = process.popen.ps1("/test.ps1");ps1.readAll()

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

картина

Другой пример вызова process.popen для создания конвейера процесса для выполнения команд PowerShell:

import console;import process.popen;
console.showLoading(" 请稍候,正在调用 PowerShell");var prcs = process.popen.ps(`-Command "& {Get-Command -Name *Process}"`);
var result = prcs.readAll(); console.log(result);console.pause();