Skrypt PowerShell, pokazujący uruchamianie poleceń

37

Bawię się skryptami PowerShell i działają one świetnie. Zastanawiam się jednak, czy jest jakiś sposób, aby pokazać wszystkie uruchomione polecenia, tak jakbyś wpisywał je ręcznie. Byłoby to podobne do „włączania echa” w plikach wsadowych. Spojrzałem na argumenty wiersza poleceń programu PowerShell, polecenia cmdlet, ale nie znalazłem nic oczywistego. Dzięki!

Nelson Rothermel
źródło

Odpowiedzi:

45

Następujące polecenie wyświetli każdy wiersz skryptu do Write-Debug-

Set-PSDebug -Trace 1

Z man Set-PSDebug

Gdy parametr Śledzenie jest ustawiony na 1, każdy wiersz skryptu jest śledzony podczas wykonywania. Gdy parametr jest ustawiony na 2, śledzone są również przypisania zmiennych, wywołania funkcji i wywołania skryptów. Jeśli parametr Step jest określony, przed każdym wierszem skryptu zostanie wyświetlony monit.

Spongeboy
źródło
Jeśli dodasz to do używanego skryptu Param, umieść ten wiersz poniżej bloku definiującego parametry, ponieważ może to spowodować awarie.
kayleeFrye_onDeck
4

Tam, gdzie użyłem echo onw CMD, teraz używam Write-Verbosei Set-PSDebug -Stepzamiast tego. Nie są takie same, ale są potężniejsze, jeśli są umiejętnie władane.

Jay Bazuzi
źródło
2

Brzydki:

PS > get-content foo.ps1|foreach-object{$_;invoke-expression "$_"}
$procs=get-process powershell
foreach($proc in $procs){$proc.processname}
powershell
PS > get-content foo.ps1
$procs=get-process powershell
foreach($proc in $procs){$proc.processname}
PS >

Problem z powyższym polega na tym, że jeśli masz takie polecenia wieloliniowe:

foreach($proc in $procs){
  $proc.processname
}

Powyższe nie powiedzie się w moim przykładzie powyżej, jeśli jest umieszczony w foo.ps1 z tą strukturą ...

Marco Shaw
źródło
Tak, ciągle znajduję takie pół-rozwiązania. Naprawdę myślę, że nie ma „srebrnej kuli” dla tego, czego chcę. Dziękujemy za kreatywność dzięki tym rozwiązaniom. Mam teraz kilka opcji i będę musiał zdecydować, dokąd pójść.
Nelson Rothermel
2
help about_History 

Powie ci o wszystkich poleceniach i

Get-History [options]  

zwróci pełną listę do manipulowania \ wyświetlaniem itp.

Helvick
źródło
2
Znalazłem „set-psdebug -trace 1”, który pokaże polecenia, ale wiele dodatkowych „szumów” nie chcę. get-history nie wyświetla niczego w skrypcie. Gdyby tak się stało, mógłbym nakleić go na końcu skryptu, ale wtedy polecenia nie byłyby wbudowane (przed wyjściem polecenia) i wszelkie wyjątki pomijałyby go (chyba że go oczywiście złapię). Nadal warto pamiętać… Jakieś inne pomysły?
Nelson Rothermel
Ach - czy masz na myśli, że chcesz przechwycić dane wejściowe i wyjściowe, czy przynajmniej chcesz powtórzyć polecenia wejściowe, a następnie odpowiednie dane wyjściowe? Jednym ze sposobów jest wpychanie wyników do tablicy, a następnie przeglądanie wyników get-history w wyniku wysyłania polecenia, a następnie jego wyniku.
Helvick
start-transkrypcja może również robić to, czego szukasz, ale będzie ona ograniczona do części tekstowej konsoli.
Helvick
Masz - w ten sam sposób, w jaki działa plik wsadowy. Mamy teraz kilka plików wsadowych i zastanawiam się nad możliwością zastąpienia ich skryptami PowerShell. Mamy oprogramowanie do planowania, utrzymywania historii wyników itp. Bez echa polecenia wejściowego trudniej jest debugować. Zgaduję, że wypychanie wyników wymaga zrobienia tego przy każdym poleceniu, upewnij się, że wychwytujesz wyjątki itp., Aby niczego nie przegapić. Inna opcja, ale nie do końca to, czego szukam. Być może będziemy musieli wybrać jedną opcję i uruchomić ją.
Nelson Rothermel
Próbowałem rozpocząć transkrypcję, ale tylko zapisałem, że się zaczęło / zatrzymało, ale nic pomiędzy. Czytałem gdzieś, gdzie są przeznaczone do interaktywnych poleceń.
Nelson Rothermel