SORU
4 Kasım 2009, ÇARŞAMBA


Nasıl bir EXE dosyasını çalıştırmak için boşluk ve tırnak ile parametre ilkesi içinde

Nasıl powershell'de aşağıdaki komutu çalıştırın musunuz?

C:\Program \IIS Deploy\msdeploy.exe -fiil:sync kaynak:\Microsoft Web dbfullsql="Veri Kaynağı=mysource;Integrated Security=false;User ID=sa;=sapass! Özürlü;Dosyaları Veritabanı=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Veritabanı=mydb;",=10.10.10.10=kullanıcı adı yönetici bilgisayar adı,=" . şifre adminpass

CEVAP
4 Kasım 2009, ÇARŞAMBA


PowerShell komut sadece dize değerlendirir bir dize ile başlayan gördüğünde, o, genellikle, örneğin: ekrana yankı

PS> "Hello World"
Hello World

Eğer PowerShell komut bir isim olarak dize yorumlamak istiyorsanız, o zaman çağrı operatörü (&) gibi kullanın:

PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'

Bundan sonra muhtemelen sadece boşluk ve/veya tırnak karakter içeren parametre/değişken çiftleri alıntı yapmak istiyorum. Karmaşık komut satırı argümanları ile bu gibi bir EXE dosyası çağırmak genellikle çok yararlı EXE dosyasına değişkenleri gönderir gösteren bir araç var. PowerShell Community Extensions böyle bir aracı var. Echoargs denir. Sadece EXE echoargs ile dosya - tüm argümanları terk değiştir ve EXE dosyasını, örneğin: bağımsız alacak kadar göstereceğim

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>

Sen-ebilmek kullanma echoargs doğru, örneğin elde edene kadar deneyin:

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;>

Çok zor bağlantı dizesini çift tırnak işaretleri içine korumak için önce çalışıyordum çıkıyor. Görünüşe göre o bile cmd.exe o dışarı şerit olacak, çünkü gerekli değil.

BTW, PowerShell takım şapka çıkarırım. Benim tek ve çift tırnak işaretlerinin belirli bir büyü gösteren oldukça yararlı eğer yerde iç çift tırnak tutmak gerekirse istenilen sonucu elde edildi. :-) Onlar da bu acıyı bir alan olduğunu, ancak belirli bir sorundan etkilenen insanların sayısı ile tahrik edilmektedir. Eğer bu senin için acı bir bölge ise, o zaman PowerShell bug submission Bu oy lütfen.

PowerShell ayrıştırır hakkında daha fazla bilgi için, benim Effective PowerShell blog series - item 10 - "Understanding PowerShell Parsing Modes" özellikle göz atın

GÜNCELLEME 4/4/2012: Bu durumun üstesinden gelmek için çok daha kolay PowerShell V3 alır. Bu blog post for details bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Erica Griffin

    Erica Griffi

    8 HAZİRAN 2009
  • Ralph Phillips

    Ralph Philli

    5 Aralık 2006
  • sinumatic

    sinumatic

    19 Aralık 2006