2 回答
TA貢獻1886條經驗 獲得超2個贊
這可以在不調用 powershell 的情況下完成。這是否有用取決于您要做什么。
var user = "username";
var pass = new System.Security.SecureString();
foreach (char c in "password")
{
pass.AppendChar(c);
}
var cred = new System.Management.Automation.PSCredential(user, pass);
TA貢獻2019條經驗 獲得超9個贊
至于你嘗試過的:
您沒有將 PowerShell 命令正確轉換為 PowerShell SDK 調用。具體來說,您添加參數的方式不正確:
ps.AddArgument("System.Management.Automation.PSCredential ("+user+", (ConvertTo-SecureString "+pass+" –ASPlainText –Force))");
您必須通過逐一添加參數
.AddArgument(<val>),或者最好通過) 作為命名參數.AddParameter(<name>, <val>)。您不能使用嵌入式 PowerShell 命令作為參數。
如果我們將獲取實例的問題SecureString放在一邊并僅使用虛擬實例,則您的語句將如下所示:
ps.AddCommand("New-Object")
??.AddParameter("TypeName",?"System.Management.Automation.PSCredential")
??.AddParameter("ArgumentList",?new?object[]?{?user,?new?System.Security.SecureString()?});請注意參數名稱的使用以及參數-ArgumentList必須如何作為數組傳遞。
如果您確實需要通過 SDK執行PowerShell 代碼,請改用該.AddScript()方法,但請注意,您只能傳遞包含要執行的代碼的單個字符串(請注意使用插值 C# 字符串$"..."來嵌入 C# 變量值):
ps.AddScript(
??$"New-Object?PSCredential?\"{user}\",?(ConvertTo-SecureString?\"{pass}\"?–AsPlainText?–Force)"
??);警告:與使用 - 添加的命令不同.AddCommand(),.AddScript()使用 - 添加的命令在執行時總是默默失敗.Invoke(),不會發生異常;你必須檢查ps.HadErrors并ps.Streams.Error檢查錯誤。相比之下,.AddCommand()如果目標命令報告(語句)終止錯誤,則會拋出異常(盡管這種情況很少見;一個示例是傳遞無效的參數名稱)。
- 2 回答
- 0 關注
- 131 瀏覽
添加回答
舉報
