2017-10-17 187 views
0

假設我使用C#執行PowerShell腳本。腳本執行的結果是請求憑證以繼續。執行C#交互式PowerShell腳本

例子:

Pipeline pipeline = runspace.CreatePipeline(); 
pipeline.Commands.AddScript(scriptText); 
... = pipeline.Invoke(); 
// i must enter credentials in order to continue the script execution 

是否有可能實現這種交互的程序?

+0

什麼樣的交互作用?你的意思是證書提示?當*不填充commandlet的'-Credentials'屬性時會發生這種情況。 –

回答

3

IMO最簡單的方法是用有效憑證連接到目標計算機,然後您可以在沒有任何憑證提示的情況下執行任何代碼。爲此,您需要創建一個PSCredential對象,它是一個用戶名和一個SecureString密碼。

爲純文本轉換爲SecureString的,你可以使用此功能:

private SecureString GetSecurePassword(string password) 
     { 
      var securePassword = new SecureString(); 
      foreach (var c in password) 
      { 
       securePassword.AppendChar(c); 
      } 

      return securePassword; 
     } 

那麼你的下一步是創建目標計算機WSManConnectionInfo對象,並添加憑據,你可以再次使用此功能:

WSManConnectionInfo GetConnectionInfo(string computerName) 
     { 
      PSCredential creds = new PSCredential("UserName", 
       GetSecurePassword("Password")); 

      Uri remoteComputerUri = new Uri(string.Format("http://{0}:5985/wsman", computerName)); 
      WSManConnectionInfo connection = new WSManConnectionInfo(remoteComputerUri, 
       "http://schemas.microsoft.com/powershell/Microsoft.PowerShell", 
       creds); 

      return connection; 
     } 

最後,連接到目標計算機,並創建一個運行空間:

WSManConnectionInfo connectionInfo = GetConnectionInfo("computerName"); 
Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo); 

回到你的代碼:

Pipeline pipeline = runspace.CreatePipeline(); 
[...] 
+0

謝謝,這非常有用! :) – user3075478