2017-06-10 69 views
0

我有.ps1腳本應該返回當前用戶(或管理員)的SID。但我不知道如何從腳本中獲取這個值到我的C#代碼中。請有人幫助我嗎?如何從powershell腳本獲取值到C#變量?

目前我以這種方式調用一個腳本:

ProcessStartInfo newProcessInfo = new ProcessStartInfo(); 
newProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"; 
newProcessInfo.Verb = "runas"; 
newProcessInfo.Arguments = @"sfc /scannow"; 
Process.Start(newProcessInfo); 

newProcessInfo.Arguments = @"-Command ""sfc /scannow"""; 
newProcessInfo.Arguments = @"–ExecutionPolicy Bypass -File ""c:\\Users\\HP\\Desktop\\HotelMode-PB\\HotelMode.ps1"""; 

,我需要從其他的.ps1腳本獲得用戶的SID,然後在這個cmd命令使用它:

HotelMode名爲.ps1 -UserSid 「」[-debug]

+1

你打電話給ps1腳本怎麼樣?請顯示代碼。一種典型的方法是讓腳本回顯結果,如果腳本成功,調用程序將字符串解析爲變量。請參閱[問]和[mcve]瞭解如何編輯您的問題。 –

+0

我已更新我的問題,請看一下。 – user7968180

+0

在StackOverflow搜索框中輸入以下內容:「C#PowerShell」 - 我看到很多示例 –

回答

0

直接使用,而不是推出powershell.exe的​​API:

using System; 
using System.Collections.ObjectModel; 
using System.Management.Automation; 
// ... 
using(PowerShell ps = PowerShell.Create()) 
{ 
    ps.AddCommand("Set-ExecutionPolicy") 
     .AddParameter("ExecutionPolicy","Bypass") 
     .AddParameter("Scope","Process") 
     .AddParameter("Force"); 

    ps.AddScript(@"C:\Users\HP\Desktop\HotelMode-PB\HotelMode.ps1"); 

    Collection<PSObject> result = ps.Invoke(); 
    foreach(var outputObject in result) 
    { 
     // outputObject contains the result of the powershell script 
    } 
} 
+0

非常棒!.... – user7968180

相關問題