2009-04-18 17 views
21

Hemen şimdi bir Powershell işlevi oluşturdum ve bir ps1 dosyasına kaydettim. Ancak, bunu powershell içinden yürütmeye çalıştığımda, çalışmayacak.Powershell ps1 dosyası "bir cmdlet, işlev, çalıştırılabilir program veya komut dosyası dosyası olarak tanınmadı."

Allready bu komutu girerek imzalanmamış kod çalıştırmak için ayarlara değiştirdik:

set-executionpolicy remotesigned 

işlevi şudur:

Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){ 
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile 
} 

Yaptığı şey bir textfile oluşturmak olduğu tüm yol belirli bir dosyaya listelenir.
Doğrudan c: \ altına koydum ve işlevle aynı olan dosya listesiAllPaths olarak adlandırdım. Ben PowerShell içeride aşağıdaki komutu girdiğinizde

: terimi 'listAllPaths.ps1' bir cmdlet, işlev olarak tanınmayan edilir

:

PS> listAllPaths.ps1 c:\ *.pdf testingPDF.txt 

bir hata söyleyerek olsun çalıştırılabilir program veya komut dosyası. Terimi doğrulayın ve tekrar deneyin.

Bazı şeyleri denedim ve bu işi nasıl yapacağımı bilmiyorum. Beklediğim şey, belirtilen yol üzerinde oluşturulacak bir dosya için, bu örnekte c: \. Bu dosya, testPDF.txt adını ve bu içeriği oluşturan içeriğe sahip.

Birisi bana burada neyi unuttuğumu söyleyebilir mi?

Ve hayır, Google her şeye cevap vermiyor. Bunu zaten denedim. Çevrimiçi arama motorlarını denemediysem buraya gelmezdim.

cevap

10

Bu, çevre yolunuzun geçerli dizininizi içermediği birçok platformda görülen tipik bir hatadır. böylece komut dosyasını çalıştırdığınızda (veya komut veya program vb.), çalışma ortamı geçerli/çalışma dizininiz dışında her yerde görünür.

PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt 

EDIT deneyin: yorumlarınızı okuduktan sonra , bunu denemek önermek için gidiyorum. PS komut dosyanızın mantığını doğrulamamıştım. Ben sadece senaryosunu ilk önce yürütmeye çalışıyorum.

Komut dosyanızı aşağıdaki gibi düzenlemeyi deneyin ve yukarıdaki gibi yürütün.

Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){ 
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile 
} 

listAllPaths 
+0

Teşekkürler, ama işe yaramadı. Bu komuta girdim ve hemen üstünden atladım. Hiçbir hata bildirildi, sadece komutları girmem için powershell'deki yeni bir satır. – KdgDev

+0

Tamam, bu yüzden ps komut dosyası gerçekten çalışıyor, ancak hiçbir çıktı iade edilmiyor. Bunu doğrulamak için bazı baskı ifadeleri koymaya çalışın. Şimdi başka bir önemsiz hata yapmadığına emin misin? Görüyorum ki kodunuzu bir işleve koydunuz, ama aslında betikteki Fonksiyonu mu çağırıyorsunuz? – Chaitan

+0

Komut dizimde işlevi mi çağırıyorum? Ben Powershell'le bu kadar deneyimli değilim, burada yayınladığım şey, senaryonun tam içeriği değil, daha az değil. – KdgDev

7

Burada üsten olabilir, ama bu sizin komut onu idam etmekten ziyade, bir işlev tanımlıyor olduğunu? Belki de şu komutu kullanabilirsiniz:

. .\listallpaths.ps1 

... böylece "listallpaths" fonksiyonunuz tanımlanmıştır.

+0

Evet, şimdi sadece işlevi yazıp parametreleri verebilirim. Yine de, çok fazla hareket ettiğimi ve farklı PC/dizüstü bilgisayarlarla çalıştığımı varsayalım. Hepsinin güçleri olsa bile, her seferinde işlevi yeniden tanımlamak zorundayım. Bu durumda gerçekten yapmak istediğim sadece ps1 dosyasını çağırmak ve argümanlar vermek ve işi yapmak. – KdgDev

+0

Matt - doğru yoldasınız .. WebDevHobo'nun çalışma zamanı davranışını bulmak için betikteki değişiklikleri listeledim. –

4

Eğer param ile "fonksiyonu listallpaths" yerine ve sen gerektiği gibi arayabileceğiniz bir komut dosyası olacak böyle {} çevreleyen ..

param([string]$fromFolder, [string]$filter, [string]$printfile) 
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile 

kurtulmak edin.

PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt 

Matt Senaryoyu aradığında, işlevini bildirerek, bu fonksiyonu ve daha sonra çıkış yaratacak ima edildiği gibi. Bir PowerShell betiği temelde bir dosyanın belleğinde saklanacağı bir dosyada (çevreleyen parantezler olmadan… ima edilir) bir işlevdir.

+0

+1 - Bunu yapmak için daha temiz bir yol gibi görünüyor. –

İlgili konular