-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
использование команд 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 ?
|
Предупреждение за нарушение общих правил (П. 2.7).
Жду переименования темы.
По поводу самой темы...
А для тех кто не вкурсе, можно описать что такое Powershell, и главное, как проверить пример, или нам нужно гадать?
Хотя попробую... Есть библиотека Encoding.au3, там есть функций конвертирования строк, может одна из них подойдёт (например _StringOEM2ANSI).
|
_StringOEM2ANSI
помогло, но тему пока не закрываю, может есть более лучший вариант
|
Цитата:
Цитата andr_mozg
может есть более лучший вариант »
|
В соответствий с названием темы, другого варианта просто нет :).
|
Код:
#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)
рабочий вариант но всё равно не нравится.....
|
andr_mozg, а зачем запусть PS через cmd? лучше уж сразу
Код:
Run('PowerShell ' & $command, ...)
|
Код:
#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)
Так работает?
|
всё правельно пожно запускать через CMD, но есть проблема... при попытки послать сложную команду ,
ответа нет.... пока немогу понять почему.... :(((
|
мде.. вот и все, что я могу сказать
|
вот вроде рабочий вариант
Код:
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
|
Прошло 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
|
а как посмотреть результат выполнения ? типа лог файл
|
Цитата:
Цитата andr_mozg
if $out="" then $out="" »
|
а какую функцию выполняет эта строка? Не пойму смысла её добавлять. Или просто сделать паузу в коде?
|
Цитата:
Цитата bredych
Не пойму смысла её добавлять »
|
Видимо просто старая привычка обнулять переменные )).
|
Время: 19:40.
© OSzone.net 2001-