Runspace凭据 Powershell
Runspace凭据 Powershell
我有一个Powershell脚本,我想用C#作为另一个用户运行它。
这是从当前会话调用ps脚本的代码:
using (PowerShell PowerShellInstance = PowerShell.Create()) { PowerShellInstance.AddScript(RemoveUser); PowerShellInstance.AddParameter("GID", GID); try { PowerShellInstance.Invoke(); return true; } catch (Exception e) { Debug.WriteLine(e.StackTrace); } return false; }
这段代码完美地工作。但现在我想执行它作为另一个用户。我看到了很多关于WSManConnectionInfo的代码示例,所以我尝试了在另一个问题中找到的这段代码:
var password = new SecureString(); Array.ForEach("myStup1dPa$$w0rd".ToCharArray(), password.AppendChar); PSCredential credential = new PSCredential("anotherUser", password); WSManConnectionInfo connectionInfo = new WSManConnectionInfo() { Credential = credential }; using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo)) { runspace.Open(); using (PowerShell PowerShellInstance = PowerShell.Create()) { PowerShellInstance.Runspace = runspace; PowerShellInstance.AddScript(RemoveUser); PowerShellInstance.AddParameter("GID", GID); try { PowerShellInstance.Invoke(); return true; } catch (Exception e) { Debug.WriteLine(e.StackTrace); } return false; } }
但是,当我添加WSManConnectionInfo时,我会收到一个“PSRemotingTransportException”,说连接到远程服务器localhost失败。
这似乎是正常的,因为没有任何东西等待我的localhost连接,我也不想添加一个。当我像这样实现时,运行空间是工作的:
using (Runspace runspace = RunspaceFactory.CreateRunspace()) { runspace.Open(); using (PowerShell PowerShellInstance = PowerShell.Create()) { PowerShellInstance.Runspace = runspace; PowerShellInstance.AddScript(RemoveUser); PowerShellInstance.AddParameter("GID", GID); try { PowerShellInstance.Invoke(); return true; } catch (Exception e) { Debug.WriteLine(e.StackTrace); } return false; } }
似乎没有任何远程连接实现,即使我们是在本地主机。所以我可以只添加一些凭据来执行此代码并避免远程连接吗?
admin 更改状态以发布 2023年5月21日
您可以使用以下方法将凭据变量存储在 XML 文件中:
$credential = Get-Credential $credential | Export-Clixml -Path C:\path\to\credential.xml
以 normal account
执行此命令。只有 normal account
才能使用以下命令加载凭据:
$credential = Import-Clixml -Path C:\path\to\credential.xml
加载后,您可以执行 Cmdlet,如下所示:
Remove-ADUser -Identity GlenJohn -Credential $credential -Confirm:$false
如果另一个用户尝试导入文件,则会显示以下错误:
Import-Clixml : Key not valid for use in specified state.
我建议您观看视频https://www.youtube.com/watch?v=Ta2hQHVKauo,它将为您提供存储凭据的深入见解。
KR
Guenther