PowerShell betiği, çalıştırılan komutları gösterir


36

PowerShell scriptleri ile oynuyorum ve harika çalışıyorlar. Bununla birlikte, çalıştırılan tüm komutları, sanki kendinize manuel olarak yazıyormuşsunuz gibi göstermenin bir yolu olup olmadığını merak ediyorum. Bu toplu iş dosyalarında "echo on" ile benzer olacaktır. PowerShell komut satırı argümanlarına, cmdlet'lere baktım ama açık bir şey bulamadım. Teşekkürler!

Yanıtlar:


44

Aşağıdaki komut her bir komut satırı satırını Write-Debug-

Set-PSDebug -Trace 1

itibaren man Set-PSDebug

İzleme parametresi 1 olarak ayarlandığında, komut dosyasının her satırı yürütüldüğü sırada izlenir. Parametre 2 olarak ayarlandığında 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ından önce çalıştırmanız istenir.


Bunu kullanan bir komut dosyasına eklerseniz Param, bu satırı param tanımlayan bloğun altına yerleştirdiğinizden emin olun, aksi halde hatalara neden olabilir.
kayleeFrye_onDeck

4

Kullandığım Nerede echo onCMD, şimdi kullanmak Write-Verboseve Set-PSDebug -Stepbunun yerine. Onlar aynı değillerdir, ama ustaca kullanılırlarsa daha güçlüdürler.


2

Çirkin:

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 >

Yukarıdaki sorun, bunun gibi çok satırlı komutlarınız varsa:

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

Yukarıdaki, benim örneğimde başarısız olacak, eğer bu yapıyla foo.ps1 içine yerleştirilmişse ...


Evet, bunun gibi yarım çözümler bulmaya devam ediyorum. Gerçekten istediğim şey için bir "gümüş kurşun" olmadığını düşünüyorum. Bu çözümlerle yaratıcı olduğunuz için teşekkür ederiz. Şimdi birkaç seçeneğim var ve buradan nereye gideceğime karar vermem gerekecek.
Nelson Rothermel

2
help about_History 

Size tüm komutları anlatacağım ve

Get-History [options]  

\ display vs. komutunu kullanmanız için tam listeyi döndürür.


2
Komutları gösterecek olan "set-psdebug -trace 1" i buldum, fakat pek fazla "gürültü" istemiyorum. get-history bir komut dosyasında hiçbir şey çıkarmaz. Olsaydı, bir betiğin sonuna yapıştırabilirdim, ancak o zaman komutlar (komut çıktısından önce) satır içi olmazdı ve istisnalar bunu atlardı (elbette yakalayamazsam). Akılda tutulması gereken hala iyi bir ... Başka bir fikrin var mı?
Nelson Rothermel,

Ah - giriş ve çıkışı yakalamak istediğinizi mi, yoksa en azından giriş komutlarını hemen ardından gelen çıkışı takip etmek istediğinizi mi kastediyorsunuz? Bunu yapmanın bir yolu, sonuçları bir dizinin içine itmek ve ardından komutun çıktısını takiben çıktısını alan get-history sonuçları arasında dolaşmaktır.
Helvick

start-transcript ayrıca aradığınızı da yapabilir, ancak yalnızca eylemin konsol metni bölümü ile sınırlı olacaktır.
Helvick

Anladınız - aynı toplu iş dosyası çalışır. Şimdi bir sürü toplu iş dosyamız var ve bunları PowerShell scriptleri ile değiştirmenin fizibilitesine bakıyorum. Çizelgeleme, çıktı geçmişini sürdürme vb. İçin yazılımımız var. Tahmin ediyorum ki sonuçları zorlamanız her komutta yapmanız, istisnalar vs. yakaladığınızdan emin olmanızı gerektirir; Başka bir seçenek, ama tam olarak aradığım şey değil. Sadece bir seçenek seçip onunla koşmamız gerekebilir.
Nelson Rothermel

Start-transcript'i denedim, ancak yalnızca başlatıldığını / durdurulduğunu ancak aralarında hiçbir şey olmadığını kaydetti. Etkileşimli komutlar için yazılmış bir yerde okudum.
Nelson Rothermel
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.