Czy jest błąd w Start-Process
poleceniu programu PowerShell podczas uzyskiwania dostępu do właściwości StandardError
i StandardOutput
?
Jeśli uruchomię następujące, nie otrzymam żadnych wyników:
$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait
$process.StandardOutput
$process.StandardError
Ale jeśli przekieruję dane wyjściowe do pliku, otrzymam oczekiwany wynik:
$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait -RedirectStandardOutput stdout.txt -RedirectStandardError stderr.txt
powershell
start-process
jzbruno
źródło
źródło
$process= ping localhost
# zapisałoby dane wyjściowe w zmiennej procesowej.Odpowiedzi:
Tak
Start-Process
zostało zaprojektowane z jakiegoś powodu. Oto sposób na uzyskanie go bez wysyłania do pliku:źródło
W podanym w pytaniu kodzie myślę, że powinno działać odczytanie właściwości ExitCode zmiennej inicjującej.
Zauważ, że (tak jak w twoim przykładzie) musisz dodać parametry
-PassThru
i-Wait
(to mnie na chwilę zaskoczyło).źródło
-NoNewWindow
z-Verb runAs
Miałem też ten problem i skończyło się na tym, że użyłem kodu Andy'ego do stworzenia funkcji do czyszczenia rzeczy, gdy trzeba uruchomić wiele poleceń.
Zwróci kody stderr, stdout i zakończenia jako obiekty. Jedna uwaga: funkcja nie przyjmie
.\
ścieżki; należy używać pełnych ścieżek.Oto jak go używać:
źródło
WAŻNY:
Korzystamy z funkcji, jaką zapewnia LPG .
Jednak zawiera błąd, który możesz napotkać podczas uruchamiania procesu, który generuje dużo danych wyjściowych. Z tego powodu podczas korzystania z tej funkcji możesz skończyć z impasem. Zamiast tego użyj dostosowanej wersji poniżej:
Więcej informacji na ten temat można znaleźć w witrynie MSDN :
źródło
Naprawdę miałem kłopoty z tymi przykładami z Andy Arismendi iz LPG . Powinieneś zawsze używać:
zanim zadzwonisz
Pełny przykład to:
źródło
Oto moja wersja funkcji, która zwraca standardowy proces System.Diagnostics.Process z 3 nowymi właściwościami
źródło
Oto niezręczny sposób na uzyskanie danych wyjściowych z innego procesu PowerShell:
źródło