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 关注
- 87 浏览
添加回答
举报