2016-03-28 28 views
0

iletilen dizeye exisiting aktarılıyorsa, bir string argümanı olan bir ps1 dosyası çalıştırıyorum. Dize argümanı kendisi içinde $ içerir. Hangi belirli bir alfabe ile birleştirdikten sonra onu bir değişken olarak düşünüyor.Invoke-Expression komutu,

Açıklama:

$variableWithDolar = 'Test$Var' 
$inputString = "Testing with " + "`'$variableWithDolar`'" 
$inputString = '"' + $inputString + '"' 
$scriptPath="C:\test\PrintArg.ps1" 
Invoke-Expression -Command "& `"$scriptPath`" $inputString" 

İşte PrintArg.ps1 sadece dize argüman alıp yazdırmak bir powershell komut dosyasıdır.

Beklenen Çıktı: "Test $ Var Test Etme" Gerçek Çıktı: "Testi ile Test"

boş değişken olarak $ Var düşünüyor gibi.

Herkes, Invoke-Expression ile beklenen çıktımı nasıl alabilirim yardım edebilir.

+2

NEDEN: Tam bir açıklama belgelerine kontrol Poweshell içinde

$variableWithDolar = 'Test$Var' $inputString = "Testing with " + $variableWithDolar $scriptPath="C:\temp\PrintArg.ps1" Invoke-Expression -Command "& '"$scriptPath'" '$inputString'" 

alıntılar yanıltıcı olabilir: ilk satırda tek tırnak çift tırnak değiştirin ve son satırında $ inputString tek tırnak eklemek En başta 'Invoke-İfade' kullanıyor musunuz? – PetSerAl

+0

@PetSerAl Bu argüman –

+1

'& $ scriptPath $ inputString' ile bazı komut dosyalarını çalıştırmam gerektiğinden. NEDEN “İfade Et” ifadesi? – PetSerAl

cevap

1

Powershell'in $ Var için yerini almaya çalışmasını engellemek için tek tırnak eklemektir. Çift tırnaklı dizgilerde, Powershell değişken değiştirme gerçekleştirir. https://technet.microsoft.com/en-us/library/hh847740.aspx

+0

içinde çift tek tırnaklı dizeleri hakkında okuyabileceğim bazı linkleri paylaşabilirsiniz. Aslında zaten tek tırnak içinde. Soru, Invoke-İfade sırasında değiştirilmesidir. Kodumu düzenledim lütfen şimdi bakabilirsiniz. –

+0

İstenen değişiklik, Invoke-Expression'daki $ inputString çevresindeki tek tırnak işaretleridir. –

+0

$ inputString etrafında tek bir fiyat bile $ inputString değerini bile koymayacaktır –