2017-02-27 66 views
1

我已經得到了所有的腳本做的,我在Visual Studio企業寫下了整個C#GUI 2015我怎麼PowerShell中融入升C

我只需要獲得按鈕打開一個特定的腳本當它點擊(Control.OnClick方法?)。

我試着找到例子,但它們非常含糊。

enter image description here

的樂觀結果如下:

### Begin Code ### 

## C# psuedo code here ## 

//make C# bunifu Button 1 call script on click of button1 

Invoke.OnClick Method (Or Correct option) 

//Functional Example of an Invoke.OnClick Method Here doing something here. This is so I can learn and understand. 

Place holder 

//powershell equivalent 
$SOCMonkeyDoStuff = Invoke-Item "C:\Powershell\Scripts\BecomeOneWithCodeMonkeys\Script.ps1 


//Button Interaction in Powershell 

$Title = "Task Menu" 
$Caption = @" 
1 - Get Running Services 
2 - Get Top Processes 
3 - Get Disk Utilization 
Q - Quit 

Select a choice: 
"@ 

$coll = @() 


$a = [System.Management.Automation.Host.ChoiceDescription]::new("&1 Services") 
$a.HelpMessage = "Get Running Services" 
$a | Add-Member -MemberType ScriptMethod -Name Invoke -Value {Get-service |  where {$_.status -eq "running"}} -force 

$coll+=$a 

而且我知道,是這個的代碼已經工作的,爲什麼不只是做在PowerShell中?原因在於我打算在不久的將來將其轉變爲平臺不可知論的工具,因此Linux和Windows都可以使用它,並且Id願意儘可能保持供應商中立。此外,我計劃將其導出爲.exe,以便它可以安裝在任何地方。

+1

你可以調用腳本用「的Process.Start(」在這裏完整路徑「)......作爲快速入侵 – BugFinder

+0

https://blogs.msdn.microsoft.co m/kebab/2014/04/28/executable-powershell-scripts-from-c/ – Mhd

+0

@BugFinder好吧,我的故障是這樣的。我第一次碰到Visual Studio ......約14個小時前。 我第一次做了一個真正看起來不錯的UI,當時我安裝了VS Ent。我不知道應該在哪裏放置process.start代碼,儘管我相信正確的代碼是:'code' process.start(「」C:\ Powershell \ Scripts \ BecomeOneWithCodeMonkeys \ Script.ps1「) 'code' 這是否正確? – Fallenour

回答

3

您可以創建一個函數,將PowerShell腳本的路徑作爲其參數,然後執行該腳本。

private void RunPSScript(string path) 
{ 
    using (PowerShell ps = PowerShell.Create()) 
    { 
     // add the script to the PowerShell instance 
     ps.AddScript(path); 

     // run it 
     ps.Invoke(); 
    } 
} 

然後,所有你需要的是對OnClick事件的按鈕來調用功能的事件處理程序:如可能是那樣簡單。我從來沒有與Bunifu庫工作,所以我不知道是否OnClick是正確的事件名稱,但這是它會如何看待與窗體或WPF:

bunifuFlatButton1.OnClick += bunifuFlatButton_OnClick; 

與事件處理程序看起來像:

private void Button1_Click(object sender, EventArgs e) 
{ 
    string scriptPath; 
    // assign value to scriptPath here 

    // then invoke the method from before 
    RunPSScript(scriptPath); 
} 

記住在你的項目添加到​​集的引用(基本的PowerShell API)

+0

林不知道我理解此請參考下面的代碼: 私人無效RunPSSCript(stringpath) { 使用(PowerShell的PS = PowerShell.Create()){ ps.AddScript(路徑); ps.invoke(); } } 命名空間VenatorUI { 公共部分Form1類:形式 { 公共Form1中() { 的InitializeComponent(); } private void bunifuFlatButton1_Click_1(object sender,EventArgs e) string scriptPath(「C:\ Script \ Powershellscript.ps1」); RunPSScript(scriptPath); } } } – Fallenour