我已經構建了一個監控應用程式,它將監控的許多事情之一是我們網路中幾個不同服務器上的一些服務,我想顯示這些服務的狀態以及它們是否仍在作業。
所以,假設我想運行這個簡短的 Powershell 腳本;
Get-Service -ComputerName "DESKTOP" -Name "WinDefend"
假設我想使用 Timer 事件每 1 分鐘運行一次。看起來像這樣;
private void InitializeTimer()
{
// Call this procedure when the application starts
timer1.Interval = 60000; // 60 seconds
timer1.Tick = new EventHandler(timer1_Tick);
// Enable timer
timer1.Enabled = true;
}
// Timer tick
private void timer1_Tick(object sender, EventArgs e)
{
// Powershell script here
}
我將如何將這個簡短的 Powershell 腳本實際實施到這個示例中?
我的第二個問題也是,檢索資料后如何正確顯示資料?我可以以某種方式將資料寫入文本框或標簽嗎?
非常感謝您的任何反饋和/或幫助!
uj5u.com熱心網友回復:
如果您嘗試執行單個 PowerShell 命令,那么可能是Run PSCmdLets in C# code (Citrix XenDesktop)和How to execute a powershell script using c# and setting execution policy 的答案?會做你想做的。
我現在在 PowerShell 中做所有事情,所以我更容易創建一個呼叫 C# 的 PowerShell 腳本來呼叫 PowerShell。此 PowerShell 腳本呼叫Run
C# 類的方法,該方法DoPS
呼叫Get-Service -ComputerName "." -Name "WinDefend"
然后使用 WriteLine 陳述句來模擬預期的輸出Get-Service
:
Add-Type -Language 'CSharp' -TypeDefinition @'
using System;
using System.Management.Automation;
public class DoPS {
public void Run(){
//Get-Service -ComputerName "." -Name "WinDefend"
PowerShell ps = PowerShell.Create();
ps.AddCommand("Get-Service").AddParameter("ComputerName", ".").AddParameter("Name", "WinDefend");
Console.WriteLine("Status Name DisplayName");
Console.WriteLine("------ ---- -----------");
foreach (PSObject result in ps.Invoke()) {
Console.WriteLine(
"{0,-9}{1,-19}{2}",
result.Members["Status"].Value,
result.Members["Name"].Value,
result.Members["DisplayName"].Value);
}
}
}
'@
$DoPS = [DoPS]::new()
$DoPS.Run()
輸出此文本:
Status Name DisplayName
------ ---- -----------
Running WinDefend Microsoft Defender Antivirus Service
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524893.html
標籤:C#电源外壳表格