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 關注
- 117 瀏覽
添加回答
舉報