2013-04-22 11 views
5

Powershell kullanarak bir topshelf servisi yüklemeye çalışıyorum ama yükleyiciyi çalıştırmak için powershell almak için gerçekten çok çabayorum.powershell kullanarak bir topshelf servisi yükleme

Function EnsureTopshelfService([string]$serviceName, [string]$servicePath){ 
    $service = get-service $serviceName -ErrorAction SilentlyContinue 
    if ($service –ne $null){ 
     "$serviceName is already installed on this server"; 
    } 
    else{ 
     Write-Host "Installing $serviceName..."; 

     #the problem is here 
     & "`"$servicepath`" install --sudo" 
    } 
} 

ben bu komutu çalıştırdığınızda i olsun aşağıdaki

takma testi ... &: terimi "c: \ A Testi \ Test.exe" --sudo install 'olduğunu cmdlet, işlev, komut dosyası veya çalıştırılabilir programın adı olarak tanınmaz. Adın yazımını denetleyin veya bir yol içeriyorsa, yolun doğru olduğunu doğrulayın ve tekrar deneyin. C: \ Users \ luke.mcgregor \ Documents \ Test.ps1: 11 char: 11 + & ""$servicepath" install --sudo " + ~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo: ObjectNotFound: ("c: \ A Test \ Test.exe" install --sudo: String) [], CommandNotFoundException + FullyQualifiedErrorId: yanlış burada nereye gidiyorum komut istemine "c:\A Test\Test.exe" install --sudo Running CommandNotFoundException

böylece im varolan bir programa durduruyorum nasıl. onun bir sorun bilen var mı çalışıyor? Ben bu yüzden' PowerShell için oldukça yeni Bunun oldukça basit bir şey olduğunu tahmin ediyorum:

DÜZENLEME: Aşağıdaki yukarıdaki

Bir boşluk ile sınırlayan tarafından tokenize gerekir
Function EnsureTopshelfService([string]$serviceName, [string]$servicePath){ 
    $service = get-service $serviceName -ErrorAction SilentlyContinue 
    if ($service –ne $null){ 
     "$serviceName is already installed on this server"; 
    } 
    else{ 
     Write-Host "Installing $serviceName..."; 

     & "$servicepath" install --sudo 
    } 
} 

cevap

5

bir çalışma örneğidir. Yani -

& $servicepath install --sudo 

ve işareti PowerShell çağrı operatörüdür -

& "`"$servicepath`" install --sudo" 

3 belirteçleri olmalı. Her şey bir CMD.exe penceresinde yazmış olsaydınız aynı şekilde çalışır. Tek bir jetonun içinde boşluk varsa, alıntı yapmanız gerekir.

Çağrı operatörü here hakkında daha fazla bilgi kontrol edin.

+0

Teşekkür, ama neden çok emin değilim:

Öyleyse powershell aşağıdaki çalıştırabilirsiniz Eğer C:\Services\ItJustWorks\ItJustWorks.exe de topshelf ile inşa EXE var varsayarak. Bunun sadece arama operatöründe bir komut içeren bir dizeyi karıştırmasıyla çalıştığını düşündüm. Bu durum böyle değil mi? Çağrı operatörü bir dizi argüman alır mı ve önce komut yolu ve daha sonra belirli argümanlar olmak için çıkarım yapar mı? Bu neden sadece bir ip geçirmekten farklı? –

+0

@Luke aldınız, çağrı operatörü sözdizimi '&" [yol] \ program.exe "[argümanlar]' dır, burada argümanlar boşlukla ayrılmış dizeler veya diziler dizisi olabilir. Ve itme için teşekkürler: D –

0

(Tuhaf/çılgın/al-al-al) sözdizimini sevmiyorsanız, argüman adı ve değeri arasında bir kolon ekleyin. mükemmel çalıştı

PS C:\Services\ItJustWorks> .\ItJustWorks.exe install -servicename:"ItJustWorks"