Komut dosyası testi için PowerShell'de yankı eşdeğeri


233

Değişkenleri ve değerleri bir PowerShell betiğinde bayraklar kurarak ve komut dosyası boyunca veri matrisini görerek çıktı almak istiyorum .

Bunu nasıl yaparım?

Örneğin, aşağıdaki PHP koduna eşdeğer PowerShell ne olurdu?

echo "filesizecounter: " . $filesizecounter 

PowerGUI ile birlikte gelen komut dosyası düzenleyicisine / hata ayıklayıcısına göz atın . Yaptığınız iş için uygun olabilir. Powershell 2'nin de bir hata ayıklayıcı ile geldiğini anlıyorum (ama denemedim).
dan-gph

Yanıtlar:


275

Birkaç yol vardır:

Write-Host: Fonksiyon / cmdlet çıkışına dahil olmayan doğrudan konsola yazın. Ön plan ve arka plan renginin ayarlanmasını sağlar.

Write-Debug: $DebugPreferenceDevam veya Durdur olarak ayarlanmışsa doğrudan konsola yazın .

Write-Verbose: $VerbosePreferenceDevam veya Durdur olarak ayarlanmışsa doğrudan konsola yazın .

İkincisi, Write-Debughata ayıklama için ekstra isteğe bağlı bilgiler için tasarlanmıştır (bu durumda bu gibi görünüyor).

Ek : PSH2'de (en azından) cmdlet bağlayıcısını kullanan komut dosyaları , derlenmiş cmdlet'lerin ve sağlayıcıların yaptığı gibi yerel olarak etkinleştiren ve (yani tercih değişkenlerini geçersiz kılan) otomatik olarak -Verboseve -Debuganahtar parametrelerini alır .Write-VerboseWrite-Debug


4
Write-Debug ve Write-Verbose ile ilgili güzel bir şey, hata ayıklama ifadelerinizi kodunuzda bırakabilmeniz ve gerekli tercih değişkenini kullanarak çıktıyı ihtiyacınız olduğunda açabilmenizdir. Zaman kazandırır ve işlevlerinizin diğer kullanıcıları için hoş bir özelliktir.
JasonMArcher

5
Ayrıca, Out-String'i tanımak da istersiniz, çünkü önemsiz olmayan herhangi bir nesneyle, bu üç Write- * cmdlet'ini kullanmadan önce nesneyi görüntülenebilir bir dizeye dönüştürmek için bunu kullanmanız gerekir.
Jaykul

113

Powershell'in takma ad eşleme yankısı vardır Write-Output, bu nedenle:

echo "filesizecounter : $filesizecounter"


7
echoWrite-OutputMicrosoft'un TechNet'e göre bir takma adıdır ve burada
Glenn Lawrence

2
Teşekkürler Glenn, takma ad bu yazıyı yayınladığımdan bu yana geçen 6 yıl içinde yeniden anlaşıldı. Bu iyi, gerçekten boru hattını atladığı için Write-Host kullanmamalısınız. Bunu belirtmek için cevabımı güncelledim. Teşekkürler!
Justin R.7

3
Tek yapmanız gereken bir komut dosyasının yürütülmesini izlemek için konsola "hata ayıklama" çıktısını yankılamaksa neden boru hattını atlamak istemezsiniz? Write-Output, son olarak Write-Output çağrısının içeriğinin yığın üzerinde bırakılacağı ve açıkça bir işlevden döndürmeye çalıştığınız değişkenleri geçersiz kılacağı garip bir yan etkiye sahiptir. Bunun gibi yan etkiler, bir dilin davranması için çok berbat bir yol gibi hissediyor.
Craig

33

PowerShell enterpolasyon yapar, değil mi?

PHP dilinde

echo "filesizecounter: " . $filesizecounter 

ayrıca şu şekilde de yazılabilir:

echo "filesizecounter: $filesizecounter" 

PowerShell'de böyle bir şey ihtiyaçlarınıza uygun olmalıdır:

Write-Host "filesizecounter: $filesizecounter"

9
PHP'nin bu sorudaki hiçbir şeyle ilgisi yok
reggaeguitar


14

Powershell'de yankı yapmanın en kolay yolu, sadece string nesnesini oluşturmak ve boru hattının çıktısını almasına izin vermektir:

$filesizecounter = 8096
"filesizecounter : $filesizecounter"

Tabii ki, Write- * yöntemlerini kullanmadığınızda esneklikten vazgeçersiniz.



8

Write-host gayet iyi çalışıyor.

$Filesize = (Get-Item $filepath).length;
Write-Host "FileSize= $filesize";

5

Bunu yapmak akıllıca mı bilmiyorum, ama sadece

"filesizecounter: " + $filesizecounter

Ve çıktı vermelidir:

dosya boyutu sayacı: değer


1
"filesizecounter: $filesizecounter"daha da kısadır.
jiggunjer

3

PowerShell gibi birkaç yaygın komut için takma ad içerir echo. PowerShell'e aşağıdakileri yazın:

Get-Alias echo

yanıt almak için:

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

Get-Alias'ın bile bir takma adı vardır gal -> Get-Alias. İçin gal echotakma ad almak için yazabilirsiniz echo.

gal echo

Diğer takma adlar burada listelenmiştir: 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

Deneyin Get-Content .\yourScript.PS1ve senaryonuzun içeriğini göreceksiniz.

ayrıca bu satırı komut dosyası kodunuza ekleyebilirsiniz:

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

....


İşlenen gerçek değerleri göstermez (örn. Env var ikamesi), bu nedenle sorulan soruya bir cevap göstermez.
iisystems

0

Ayrıca, Set-PSDebug'un eski okul echo ontoplu komutuna benzer olduğu belirtilmelidir :

Set-PSDebug -Trace 1

Bu komut, yürütme komut dosyasının her satırını gösterecektir:

Zaman Traceparametresi 1 arasında bir değere sahiptir olarak çalışır, her komut dosyası hattı takip edilir. Parametrenin değeri 2 olduğunda, değişken atamaları, işlev çağrıları ve komut dosyası çağrıları da izlenir. Step parametresi belirtilirse, komut dosyasının her satırı çalışmadan önce istenir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.