.NET uygulamalarında Windows PowerShell barındırma

Womanne

Member
Windows PowerShell genellikle kısa komutlar içerir, örneğin


gps | where { $_.ws -gt 1MB } | sort ws -desc | select -first 15

Bu komut şu anlama gelir: tüm işlemlerin listesini alın, 1MB’den fazla bellek kullananları filtreleyin, listeyi azalan bellek kullanımına göre sıralayın ve listeyi ilk 15 ile sınırlayın.

Pek çok Microsoft sunucusu ve hizmeti de komut uygulamalarını destekler; buna iyi bir örnek, Microsoft Exchange için posta kutuları oluşturmaya yönelik “Yeni Posta Kutusu” komut uygulamasıdır.

Windows PowerShell, .NET tabanlıdır ve bu nedenle PowerShell, .NET uygulamalarında (C#, Visual Basic, C++/CLI, F# ve diğerleri) bir komut dosyası oluşturma ortamı olarak da kullanılabilir.

Liste, bir .NET uygulamasında PowerShell komutunu çalıştırmak için bir yardımcı yöntemi gösterir. Bu bir gerekliliktir System.Management.Automation.dll ea’ya bakın System.Management.Automation kullanarak o da faydalıdır. Yöntem, dönüş değerindeki sonuç nesnelerini ve parametre dışı durum üzerinden oluşan hataları sağlar. Sınıf örneklemesi, yöntemin merkezinde yer alır Güç kalkanı Statik yöntemle yaratmak()komutları ile geçmek AddScript() ve ile koşmak Başvurmak().

public Collection<PSObject> Run(string Command, out string Status)
{
string e = "";
PowerShell ps = PowerShell.Create();
// Befehl hinzufügen
ps.AddScript(Command);


// Befehl ausführen
Collection<PSObject> ErgebnisMenge = ps.Invoke();


// Fehler?
if (ps.Streams.Error.Count == 0)
{ // Nein
Status = "OK";
return ErgebnisMenge;
}
else
{ // Es gab einen Fehler
foreach (var dr in ps.Streams.Error)
{
e += dr.Exception.Message;
}
Status = e;
return null;
}
}

İkinci liste, bir örnekte yardımcı yöntemin çağrılmasını gösterir. Bir PowerShell betik dosyasına komut zincirleri veya bir yol iletebilirsiniz.

string Status = "";
string Demo = (gps | where { $_.ws -gt 1MB } | sort ws -desc
| select -first 15 ");
var ErgebnisMenge = new WPSHostLib.WPSHost().Run(Demo, out Status);

if (Status != "OK")
{
Console.WriteLine("Fehler: " + Status);
}
else
{
// Ergebnismenge darstellen
foreach (System.Management.Automation.PSObject Ergebnis in ErgebnisMenge)
{
Console.WriteLine(
"{0,-24}{1,-10}{2}",
Ergebnis.Members["ProcessName"].Value,
Ergebnis.Members["Id"].Value,
Ergebnis.Members["WorkingSet64"].Value);
}
}

Şu anda bir uygulama sunucusunda powershell komut dosyaları çalıştıran bir müşteri için bir web hizmeti yazıyorum. Yukarıda belirtilen yardımcı rutin, önemli bir yapı taşıdır.


()



Haberin Sonu
 
Üst