Runspace凭据 Powershell

9 浏览
0 Comments

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日
0
0 Comments

您可以使用以下方法将凭据变量存储在 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

0