Ехо еквівалент PowerShell для тестування сценарію


233

Я хотів би вивести змінні та значення у сценарії PowerShell , встановивши прапори та побачивши матрицю даних у всьому сценарії.

Як би я це зробив?

Наприклад, що було б еквівалентним PowerShell наступному PHP-коду?

echo "filesizecounter: " . $filesizecounter 

Перевірте редактор сценаріїв / налагоджувач, що постачається з PowerGUI . Це може підходити для того, що ви робите. Я розумію, що Powershell 2 також поставляється з налагоджувачем (але я цього не пробував).
dan-gph

Відповіді:


275

Існує кілька способів:

Write-Host: Пишіть безпосередньо на консоль, не входить до виводу функції / cmdlet. Дозволяє встановлювати колір переднього плану та колір тла.

Write-Debug: Напишіть безпосередньо на консоль, якщо $DebugPreferenceвстановлено значення Продовжити або Зупинити.

Write-Verbose: Напишіть безпосередньо на консоль, якщо $VerbosePreferenceвстановлено значення Продовжити або Зупинити.

Остання призначена для додаткової необов'язкової інформації, Write-Debugдля налагодження (так, здавалося б, підходить в цьому випадку).

Додатково : У PSH2 (принаймні) сценарії, які використовують прив'язку командлетів, автоматично отримують параметри -Verboseта -Debugперемикання, локально включаючи Write-Verboseта Write-Debug(тобто переосмислюючи змінні параметрів), як це роблять компільовані командлети та провайдери.


4
Приємна річ у програмі Write-Debug і Write-Verbose полягає в тому, що ви можете залишити свої заяви про налагодження у своєму коді та просто увімкнути вихід, коли вам це потрібно, використовуючи відповідну змінну переваг. Економить час і приємна функція для інших користувачів ваших функцій.
JasonMArcher

5
Ви також хочете ознайомитись із Out-String, тому що з будь-яким нетривіальним об'єктом вам потрібно буде скористатися цим для перетворення об'єкта в рядку, що може відображатися, перш ніж використовувати будь-який із цих трьох командлетів Write-*.
Джейкуль

113

У Повершелла відбиття псевдоніму відображається Write-Outputтак:

echo "filesizecounter : $filesizecounter"


7
echoє псевдонімом у Write-Outputвідповідності до TechNet Майкрософт та обговорюється тут
Глен Лоуренс

2
Дякую, Гленн, схоже, псевдонім був переобладнаний за 6 років, відколи я опублікував це. Що добре, дійсно не слід використовувати Write-Host, оскільки він обходить конвеєр. Я оновив свою відповідь, щоб вказати на це. Дякую!
Джастін Р.

3
Чому б ви не хотіли обійти конвеєр, якщо все, що ви хочете зробити, - це відлуння "налагодження" виводу на консоль, щоб простежити виконання сценарію? Write-Output має дивний побічний ефект, коли вміст останнього дзвінка на Write-Output буде залишений у стеці, замінюючи будь-яку змінну, яку ви намагаєтеся явно повернути з функції. Подібні побічні ефекти, як, здається, дуже жахливий спосіб поведінки мови.
Крейг

33

PowerShell інтерполює, чи не так?

В PHP

echo "filesizecounter: " . $filesizecounter 

також можна записати як:

echo "filesizecounter: $filesizecounter" 

У PowerShell щось подібне повинно відповідати вашим потребам:

Write-Host "filesizecounter: $filesizecounter"

9
PHP не має нічого спільного з цим питанням
reggaeguitar


14

Одним з найпростіших способів відлунюватись в shellhell - це просто створити об'єкт string і дозволити конвеєру вивести його:

$filesizecounter = 8096
"filesizecounter : $filesizecounter"

Звичайно, ви відмовляєтеся від певної гнучкості, якщо не використовуєте методів Write- *.


9

echo є псевдонімом Write-Output, хоча він виглядає так само, як Write-Host .

Це не в чому різниця між echo та Write-Host в PowerShell? .

echo - псевдонім для Write-Output, який записує у вихідний потік Success. Це дозволяє обробляти висновки по трубопроводах або перенаправляти у файли. Write-Host записує безпосередньо на консоль, тому вихід не можна більше перенаправляти / обробляти.



5

Я не знаю, чи розумно це робити, але ви можете просто написати

"filesizecounter: " + $filesizecounter

І він повинен вивести:

filesizecounter: значення


1
"filesizecounter: $filesizecounter"ще коротше.
jiggunjer

3

PowerShell має псевдоніми для декількох загальних команд, як-от echo. Введіть у PowerShell:

Get-Alias echo

щоб отримати відповідь:

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           echo -> Write-Output

Навіть Get-Alias ​​має псевдонім gal -> Get-Alias. Ви можете написати, gal echoщоб отримати псевдонім для echo.

gal echo

Інші псевдоніми перелічені тут: https://docs.microsoft.com/en-us/powershell/scripting/learn/using-familiar-command-names?view=powershell-6

cat dir mount rm cd echo move rmdir chdir erase popd sleep clear h ps sort cls history pushd tee copy kill pwd type del lp r write diff ls ren


2

Спробуйте Get-Content .\yourScript.PS1 і ви побачите вміст свого сценарію.

також ви можете вставити цей рядок у свій код сценарію:

get-content .\scriptname.PS1
script code
script code

….


Не відображає фактичні оброблені значення (наприклад, заміщення env var), тому не є відповіддю на поставлене запитання.
iisystems

0

Слід також зазначити, що Set-PSDebug схожий на echo onпакетну команду old-school :

Set-PSDebug -Trace 1

Ця команда призведе до показу кожного рядка сценарію виконання:

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

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