Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Execute PowerShell script file and save its output into variable, Запустите файл PowerShell script и сохраните его вывод в переменной
neves
сообщение 24.12.2020, 12:26
Сообщение #1


***

Novice
Сообщений: 64
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.419
Возраст: 19



I have file called: start.ps1 which contain long powershell script.
For the example lets say the file's script is:
Код
$i = 7
Return $i

I am trying to execute that file in the pilot and save its output in a variable, without showing the POPUP COMMAND LINE.
I checked all Fors1k examples of LuaPoSH, and they all execute PoSH script inside the lua script, but didn't saw if it's possible to run a PoSH script file and save its output in lua variable.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 24.12.2020, 14:08
Сообщение #2


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2397
Пользователь №: 18.746



Код
--lua
require"luaposh";log "clear";log "mode compact"
--code
i = PScode('r',{[[$return = D:\scripts\start.ps1]]})
log(i)
--code

Output: 7

Сообщение отредактировал Fors1k - 24.12.2020, 14:09


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
neves
сообщение 24.12.2020, 14:18
Сообщение #3


***

Novice
Сообщений: 64
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.419
Возраст: 19



Цитата(Fors1k @ 24.12.2020, 13:08) *

Код
--lua
require"luaposh";log "clear";log "mode compact"
--code
i = PScode('r',{[[$return = D:\scripts\start.ps1]]})
log(i)
--code

Output: 7

Nice! But is it possible to run the start.ps1 file with Exec (Lua)(or other executon way which can capture the output) and somehow to save into variable.
Something like that:
Код
--lua
local file_path = [[D:\game\start.ps1]]
local start_posh_script = exec("powershell.exe -windowstyle hidden -noprofile -executionpolicy bypass", file_path)
log(start_posh_script)

this executes the posh file, but ain't save the output in variable and also shows the POPUP PoSH terminal. :/
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 24.12.2020, 15:04
Сообщение #4


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2397
Пользователь №: 18.746



Exec (Lua) can't.
Code, that I provided not works?

Don't understand what do you want) You're asking the same thing i gave you:
Цитата(neves @ 24.12.2020, 14:18) *
Something like that:

Код
--lua
require"luaposh";log "clear"
file_path = [[D:\game\start.ps1]]
start_posh_script = PScode('EXEC',{[[$return = &$input]]},file_path)
log(start_posh_script)

Output: 7 , just like u wanted.

Сообщение отредактировал Fors1k - 24.12.2020, 15:06


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
neves
сообщение 24.12.2020, 15:11
Сообщение #5


***

Novice
Сообщений: 64
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.419
Возраст: 19



Цитата(Fors1k @ 24.12.2020, 14:04) *

Code, that I provided not works?

Works good.
Цитата(Fors1k @ 24.12.2020, 14:04) *

Don't understand what do you want) You're asking the same thing i gave you:

I am just curious if it's possible to run the start.ps1 file and save the output in variable, without importing modules. (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 24.12.2020, 15:32
Сообщение #6


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2397
Пользователь №: 18.746



Цитата(neves @ 24.12.2020, 15:11) *
without importing modules. (IMG:style_emoticons/default/smile.gif)

Buddy, Lua even don't have function 'split string' (IMG:style_emoticons/default/laugh.gif)
Powershell can do everything without any imports from the outside. Lua almost always needs to import some libraries or import с++ code... That's why i created luaposh (IMG:style_emoticons/default/wink.gif)

Цитата(neves @ 24.12.2020, 15:11) *
Works good.

You're welcome. Glad to help u (IMG:style_emoticons/default/wink.gif)


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.12.2020, 16:59
Сообщение #7


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26703
Пользователь №: 16.971
Возраст: 29



Цитата
I am just curious if it's possible to run the start.ps1 file and save the output in variable, without importing modules.

code
Код
--lua
local ffi = require("ffi")
local STARTF_USESHOWWINDOW = 1
local INFINITE = 0xFFFFFFFF
ffi.cdef[[
    typedef bool BOOL;
    typedef unsigned short WORD;
    typedef unsigned long DWORD;
    typedef const char* LPCSTR;
    typedef struct _PROCESS_INFORMATION { int hProcess; int hThread; DWORD dwProcessId;  DWORD dwThreadId;
        } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
    typedef struct {DWORD cb; LPCSTR lpReserved; LPCSTR  lpDesktop; LPCSTR  lpTitle; DWORD dwX; DWORD dwY; DWORD dwXSize; DWORD dwYSize;
                    DWORD dwXCountChars;  DWORD dwYCountChars;  DWORD dwFillAttribute; DWORD dwFlags; WORD wShowWindow;
                    WORD cbReserved2; int lpReserved2; int hStdInput; int hStdOutput; int hStdError;} STARTUPINFOA, *LPSTARTUPINFOA;
    BOOL CreateProcessA(LPCSTR lpApplicationName, LPCSTR lpCommandLine, int lpProcessAttributes, int lpThreadAttributes, BOOL bInheritHandles,
                        DWORD dwCreationFlags, int lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation);
    DWORD WaitForSingleObject(int hHandle, DWORD  dwMilliseconds);
    BOOL CloseHandle(int hObject);
]]

local path_to_powershell_script = [["C:\script.ps1"]]  -- the path to the script

local ProcessInformation = ffi.new('PROCESS_INFORMATION', 0)
local StartupInfo = ffi.new('STARTUPINFOA', 0)
StartupInfo.cb = ffi.sizeof('STARTUPINFOA')
StartupInfo.dwFlags = STARTF_USESHOWWINDOW
ffi.C.CreateProcessA(nil, 'powershell.exe ' .. path_to_powershell_script, 0, 0, 0, 0, 0, nil, StartupInfo, ProcessInformation)
ffi.C.WaitForSingleObject(ProcessInformation.hProcess,  INFINITE)  -- wait for the script to execute
ffi.C.CloseHandle(ProcessInformation.hProcess)

-- read the file with the result
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 24.12.2020, 17:42
Сообщение #8


****

Apprentice
Сообщений: 283
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 8460
Пользователь №: 19.451
Возраст: 32



Try this
Код

--lua
local file = [[powershell.exe -windowstyle hidden -noprofile -executionpolicy bypass D:\game\start.ps1]]
local handle = io.popen (file)
local result = handle:read("*a")
handle:close()
log(result)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 20.4.2024, 9:19
Designed by Nickostyle