PowerShell bir dize ile başlayan bir komut gördüğünde, sadece dizeyi değerlendirir, yani genellikle ekrana yansıtır, örneğin:
PS> "Hello World"
Hello World
PowerShell'in dizeyi komut adı olarak yorumlamasını istiyorsanız, çağrı operatörünü (&) şu şekilde kullanın:
PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'
Bundan sonra muhtemelen sadece boşluklar ve / veya tırnak karakterleri içeren parametre / argüman çiftleri vermeniz gerekir. Karmaşık komut satırı argümanlarıyla böyle bir EXE dosyasını çağırdığınızda, PowerShell'in bağımsız değişkenleri EXE dosyasına nasıl gönderdiğini gösteren bir araca sahip olmak genellikle çok yararlıdır. PowerShell Topluluk Uzantıları böyle bir araç vardır. Buna yankılar denir. Sadece EXE dosyasını echoargs ile değiştirirsiniz - tüm argümanları yerinde bırakır ve EXE dosyasının argümanları nasıl alacağını gösterir, örneğin:
PS> echoargs -verb:sync -source:dbfullsql="Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data>
Arg 2 is <Source=mysource;Integrated>
Arg 3 is <Security=false;User>
Arg 4 is <ID=sa;Pwd=sapass!;Database=mydb;>
Arg 5 is <-dest:dbfullsql=Data>
Arg 6 is <Source=.\mydestsource;Integrated>
Arg 7 is <Security=false;User>
Arg 8 is <ID=sa;Pwd=sapass!;Database=mydb; computername=10.10.10.10 username=administrator password=adminpass>
Yankıları kullanarak doğru olana kadar deney yapabilirsiniz, örneğin:
PS> echoargs -verb:sync "-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;"
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;>
Daha önce bağlantı dizesi etrafında çift tırnak korumak için çok çalışıyordum çıkıyor. Görünüşe göre bu gerekli değildir, çünkü cmd.exe bile bunları çıkaracaktır.
BTW, PowerShell ekibine şapka çıkarıyor. Eğer iç çift tırnak yerinde tutmak gerekirse - bana istenen sonucu elde etmek için tek ve çift tırnak özel büyüsünü gösteren oldukça yararlı. :-) Ayrıca bunun bir acı alanı olduğunu anlıyorlar, ancak belirli bir sorundan etkilenen kişi sayısından etkilendiler. Bu sizin için bir acı alanı ise, lütfen bu PowerShell hata sunumunu oylayın .
PowerShell'in ayrıştırma yöntemi hakkında daha fazla bilgi için, Etkili PowerShell blog serime bakın - özellikle madde 10 - "PowerShell Ayrıştırma Modlarını Anlama"
GÜNCELLEME 4/4/2012: Bu durumun PowerShell V3'te ele alınması çok daha kolay hale geliyor. Ayrıntılar için bu blog yayınına bakın .