Сценарій PowerShell, що показує виконання команд


37

Я граю зі сценаріями PowerShell, і вони чудово працюють. Однак мені цікаво, чи є спосіб показати також усі запущені команди так само, як якщо б ви вручну ввели їх у себе. Це буде схоже на "відлуння" у пакетних файлах. Я переглянув аргументи командного рядка PowerShell, командлети, але нічого очевидного не знайшов. Спасибі!

Відповіді:


45

Наступна команда виведе кожен рядок сценарію в Write-Debug-

Set-PSDebug -Trace 1

З man Set-PSDebug

Коли для параметра Trace встановлено значення 1, кожен рядок сценарію простежується під час його виконання. Коли для параметра встановлено 2, також відстежуються призначення змінних, виклики функцій та виклики скриптів. Якщо вказано параметр Step, вам буде запропоновано перед виконанням кожного рядка сценарію.


Якщо ви додасте це до сценарію, який використовує Param, переконайтеся, що цей рядок розташований нижче блоку, що визначає парам, або це може спричинити збої.
kayleeFrye_onDeck

4

Де я використовував echo onу CMD, зараз я використовую Write-Verboseі Set-PSDebug -Stepзамість цього. Вони не однакові, але вони більш потужні, якщо володіти вміло.


2

Некрасиво:

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 >

Проблема з вищезазначеним полягає в тому, що якщо у вас є такі багаторядкові команди, як це:

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

Наведене вище не вдасться з моїм прикладом вище, якщо він розміщений у foo.ps1 з цією структурою ...


Так, я продовжую знаходити такі напіврозчини. Я дійсно думаю, що немає "срібної кулі" для того, що я хочу. Дякуємо за творчість із цими рішеннями. Зараз у мене є пара варіантів, і мені доведеться вирішити, куди поїхати звідси.
Нельсон Ротермель

2
help about_History 

Розповім про всі команди і

Get-History [options]  

поверне вам повний список для маніпулювання \ відображення тощо


2
Я знайшов "set-psdebug -trace 1", який покаже команди, але багато зайвого "шуму" я не хочу. get-history нічого не виводить у сценарій. Якби це було, я міг би вставити його в кінці сценарію, але тоді команди не були б рядковими (до виведення команди), і будь-які винятки пропустили б його (якщо я, звичайно, не згадаю). Це все-таки добре пам’ятати… Будь-які інші ідеї?
Нельсон Ротермель

Ах - ти маєш на увазі, що ти хочеш зафіксувати вхід і вихід, або, принаймні, хочеш повторити команди введення негайно, за якими слідує відповідний вихід? Один із способів зробити це - просунути результати в масив, а потім провести цикл через результати отримання історії, що виводить команду, а потім її вихід.
Гельвік

start-transcript також може робити те, що ви шукаєте, але це обмежується лише текстовою частиною консолі дії.
Гельвік

Ви отримали його - так само, як працює пакетний файл. Зараз у нас є маса пакетних файлів, і я розглядаю можливість заміни цих сценаріїв PowerShell. У нас є програмне забезпечення для планування, збереження історії виводу тощо. Без повторення команди введення важче налагоджувати. Я здогадуюсь, що для наведення результатів потрібно робити це в кожній команді, переконайтеся, що ви ловите винятки тощо, щоб нічого не пропустити. Ще один варіант, але не зовсім те, що я шукаю. Ми можемо просто вибрати один варіант і запустити його.
Нельсон Ротермель

Я спробував стартовий стенограф, але він лише зафіксував, що він починається / зупиняється, але нічого між ними. Я десь читав, що призначено для інтерактивних команд.
Нельсон Ротермель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.