c # Могут ли зарегистрированные учетные данные (не явные) использоваться с wsmanconnectioninfo? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть функция ниже с несколькими потоками, что было хорошо с явными учетными данными, когда я был единственным, кто использовал ее, но меня попросили поместить ее в скрипт powershell, где это будет простой текст для использования многопоточности возможность.

Можно ли использовать подразумеваемые учетные данные учетной записи, выполняющей сценарий с wsmanconnectioninfo? Если нет, существует ли другой способ создания подключения оболочки Exchange без явных учетных данных?

    private Collection<PSObject> runPowerShellScript(object server)
    {
        Collection<PSObject> psobjs = new Collection<PSObject>();
        string result = "";
        string serverName = server.ToString();

        string loginPassword = "xxx";
        System.Security.SecureString secpassword = new SecureString();
        foreach (char c in loginPassword)
        {
            secpassword.AppendChar(c);
        }

        PSCredential credential = new PSCredential(@"domain/samaccount", secpassword);
        WSManConnectionInfo connectionInfo = new WSManConnectionInfo(new Uri("https://xxxxx/powershell"), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential);
        connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;

        using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
        {
            PowerShell powershell = PowerShell.Create();

            if (runspace.RunspaceStateInfo.State == RunspaceState.Opened)
            {
                // do nothing
            }
            else
            {
                runspace.Open();
                powershell.Runspace = runspace;
            }

            try
            {
                PSCommand command = new PSCommand();
                command.AddScript($@"get-mailboxdatabase -Server " + server + " -Status");
                powershell.Commands = command;                    
                psobjs = powershell.Invoke();

                if (powershell.HadErrors == true)
                {
                    result = "Failed - " + powershell.Streams.Error[0].ToString();
                    result = result.Replace("\"", "*");
                }
            }
            catch (Exception ex)
            {
                string fail = ex.Message;
            }
        }
        object serverNameO = server;
        PSObject serverNameObj = new PSObject(serverNameO);
        psobjs.Insert(0, serverNameObj);

        return psobjs;
    }

1 Ответ

0 голосов
/ 30 августа 2018

Это работает

WSManConnectionInfo wmc = new WSManConnectionInfo(new Uri(`"http://xxx/powershell`"));
wmc.AuthenticationMechanism = AuthenticationMechanism.Kerberos;
wmc.ShellUri = `"http://schemas.microsoft.com/powershell/Microsoft.Exchange`";

using (Runspace runspace = RunspaceFactory.CreateRunspace(wmc))
{

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...