Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] использование команд Powershell в скриптах AutoIT (http://forum.oszone.net/showthread.php?t=160495)

andr_mozg 16-12-2009 15:24 1296773

использование команд Powershell в скриптах AutoIT
 
необходимость есть заручится поддержкой powershell

есть код
Код:

#include <Constants.au3>


$Cmd = 'dsquery'


$PowerShell = Run('PowerShell.exe '&$Cmd, "", @SW_HIDE , $STDERR_CHILD + $STDOUT_CHILD + $STDIN_CHILD)     

StdinWrite($PowerShell)

While 1
    $line = StdoutRead($PowerShell)
    If @error Then ExitLoop
    If $line <> "" Then
    MsgBox(0,"",$line)
    EndIf
Wend

While 1
    $line = StderrRead($PowerShell)
    If @error Then ExitLoop
    MsgBox(0,"",$line)
Wend

но вот беда по русски он не может писать.... что можно придумать?
может есть другой способ взаимодействия с powershell ?

Creat0R 16-12-2009 15:40 1296792

Предупреждение за нарушение общих правил (П. 2.7).
Жду переименования темы.




По поводу самой темы...
А для тех кто не вкурсе, можно описать что такое Powershell, и главное, как проверить пример, или нам нужно гадать?

Хотя попробую... Есть библиотека Encoding.au3, там есть функций конвертирования строк, может одна из них подойдёт (например _StringOEM2ANSI).

andr_mozg 16-12-2009 16:24 1296836

_StringOEM2ANSI

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

Creat0R 16-12-2009 16:35 1296851

Цитата:

Цитата andr_mozg
может есть более лучший вариант »

В соответствий с названием темы, другого варианта просто нет :).

andr_mozg 16-12-2009 17:15 1296889

Код:

#include <Constants.au3>
#include <Encoding.au3>

$comand="dsquery"
$foo = Run(@ComSpec & " /c powershell " & $comand, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$out=""
$line=""

While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    if $line <>"" then $out=$out & _StringOEM2ANSI($line)
       
Wend

        MsgBox(0,"",$out)

рабочий вариант но всё равно не нравится.....

kaster 16-12-2009 18:07 1296953

andr_mozg, а зачем запусть PS через cmd? лучше уж сразу
Код:

Run('PowerShell ' & $command, ...)

Creat0R 16-12-2009 22:33 1297160

Код:

#include <Constants.au3>
#include <Encoding.au3>

$comand="dsquery"
$foo = Run("powershell " & $comand, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
$out=""
$line=""

While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    If $line <>"" Then $out &= $line
Wend

$out = _StringOEM2ANSI($out)
MsgBox(0, "", $out)

Так работает?

andr_mozg 18-12-2009 18:01 1298707

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

kaster 18-12-2009 18:35 1298733

мде.. вот и все, что я могу сказать

andr_mozg 21-12-2009 13:25 1300673

вот вроде рабочий вариант

Код:

Func _power($value)
       
        local $PowerShell = Run(@ComSpec & " /c " &$value, @SystemDir, @SW_HIDE , $STDERR_MERGED + $STDIN_CHILD)     
        local $out="", $err=""
        StdinWrite($PowerShell)
        While 1
                $line = StdoutRead($PowerShell)
               
                If @error Then ExitLoop
                If $line <> "" Then
                $out&=_StringOEM2ANSI($line)
                EndIf
        Wend
       

        if $out="" then
                $out=""
                While 1
                        $err = StderrRead($PowerShell)
                        If @error Then ExitLoop
                        If $line <> "" Then
                                $out&=_StringOEM2ANSI($err)
                        EndIf

                Wend       
        endif       
       
        If $PowerShell Then ProcessClose($PowerShell)
        if $out <> "" then Return $out

EndFunc


andr_mozg 21-10-2014 19:05 2418471

Прошло 5лет и я нашел баг в своем посте :)

вот рабочий вариант

Код:


#include <Constants.au3>
#include <Encoding.au3>



Func _power($comand)

        local $PowerShell = Run(@ComSpec & " /c powershell " & $comand, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
        local $out="", $err=""
        StdinWrite($PowerShell)
        While 1
                $line = StdoutRead($PowerShell)
                If @error Then ExitLoop
                If $line <> "" Then $out&=_Encoding_OEM2ANSI($line)
        Wend


        if $out="" then
                $out=""
                While 1
                        $err = StderrRead($PowerShell)
                        If @error Then ExitLoop
                        If $err <> "" Then $out&=_Encoding_OEM2ANSI($err)

                Wend
        endif

        If $PowerShell Then ProcessClose($PowerShell)
        if $out <> "" then Return $out

EndFunc


_arahnid_ 26-07-2019 10:04 2881414

а как посмотреть результат выполнения ? типа лог файл

bredych 31-07-2019 08:53 2882085

Цитата:

Цитата andr_mozg
if $out="" then $out="" »

а какую функцию выполняет эта строка? Не пойму смысла её добавлять. Или просто сделать паузу в коде?

Creat0R 02-08-2019 21:07 2882465

Цитата:

Цитата bredych
Не пойму смысла её добавлять »

Видимо просто старая привычка обнулять переменные )).


Время: 02:06.

Время: 02:06.
© OSzone.net 2001-