2009-11-12 27 views
5

Temel arka plan işlerini PowerShell 2.0'da yapmaya çalışıyorum ve başlangıç ​​işiyle ve invoke-command -asjob ile farklı şeyler görüyorum.Start-job vs. Invoke-command -asjob

ben yaparsanız bu:

start-job -scriptblock {get-process}

Bir iş nesnesi olsun, ama (start-iş tarafından otomatik olarak oluşturulur) çocuk işi hep "NotStarted" bir JobStateInfo sahiptir.

invoke-command -scriptblock {get-process} -computer localhost -asjob

etkinleştirip-psremoting .... Ben çalışma arka plan işlerini almak için yapmanız gereken başka bir şey karşılaştık:

bu, ancak, beklendiği gibi çalışır?

cevap

4

Başlangıç ​​işini kullanan ilk örnek, arama için HTTP kullanmaz ve bunun yerine çalışmak için WinRM ile bir IPC kanalı kullanır; Bu şekilde yönetimsel ayrıcalık gerektirmez. Invoke-komutu ile ikinci örnek yönetici hakları gerektirir (varsayılan olarak) ve HTTP ve WinRM üzerinden bağlanacaktır. Dürüst olmak gerekirse, ikincisinin çoğu insan için başarısız olmasını beklerdim. Çalıştırırsanız: İşe başlangıç ​​çağrısının kimliğine karşı Alış-İş, herhangi bir hata iletisi alıyor musunuz?

+0

Hayır, yalnızca bir şey döndürmez (çocuk işinin hala başlatılmamış olması durumunda beklerim). –

+0

BTW ... içeriden farklı çalıştıklarını bilmek güzel. Hala başlangıç ​​işinin neden işe yaramadığını açıklamıyor ama en azından çıldırmıyorum. –

0

-Oisin Get-İş ve Start-Job yarattığı işi kullanmanız gerekir güncelleştirilmiş JobStateInfo almak için. Gerçi, işin ne zaman biteceğini görmek için bu bilgiyi kullanırsanız, Bekle-İş veya Al-İş bekletme, ihtiyaçlarınız için daha uygun olabilir.

Bekleme İşi, devam etmeden önce belirtilen işin veya iş listesinin tamamlanmasını bekler. Alma-İş bekletme aynı şeyi yapar, ancak aynı zamanda işin sonuçlarını/çıktısını da toplar.