如何在 c# 中运行 New-ADComputer powershell

本文关键字:运行 New-ADComputer powershell | 更新日期: 2023-09-27 17:55:22

我正在尝试从 C# 的 powershell 中预留 AD 帐户,但这段代码不断给我内部错误。有人可以看看我做错了什么。

PowerShell ps = PowerShell.Create();
ps.Commands.AddCommand("Import-Module").AddArgument("ActiveDirectory");
ps.Invoke();
ps.Commands.Clear();
ps.Commands.AddCommand("New-ADComputer");
ps.AddParameter("-Name", "'TESTESTS'");
ps.AddParameter("-SamAccountName", "'TESTESTS'");
ps.AddParameter("-Path", "'OU=Computers,OC=YRMC,DC=myorginization,DC=local'");
try
{
    ps.Invoke();
    Console.ReadKey();
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
    Console.Read();
}

例外

System.Management.Automation.CmdletInvocationException: The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs. ---> Microsoft.ActiveDirectory.Management.ADException: The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs. ---> System.ServiceModel.FaultException: The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.
   --- End of inner exception stack trace ---
   at Microsoft.ActiveDirectory.Management.AdwsConnection.ThrowException(AdwsFault adwsFault, FaultException faultException)
   at Microsoft.ActiveDirectory.Management.AdwsConnection.Create(ADAddRequest request)
   at Microsoft.ActiveDirectory.Management.ADWebServiceStoreAccess.Microsoft.ActiveDirectory.Management.IADSyncOperations.Add(ADSessionHandle handle, ADAddRequest request)
   at Microsoft.ActiveDirectory.Management.ADActiveObject.Create()
   at Microsoft.ActiveDirectory.Management.Commands.ADNewCmdletBase`3.ADNewCmdletBaseProcessCSRoutine()
   at Microsoft.ActiveDirectory.Management.CmdletSubroutinePipeline.Invoke()
   at Microsoft.ActiveDirectory.Management.Commands.ADCmdletBase`1.ProcessRecord()
   --- End of inner exception stack trace ---
   at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
   at System.Management.Automation.PowerShell.Worker.ConstructPipelineAndDoWork(Runspace rs, Boolean performSyncInvoke)
   at System.Management.Automation.PowerShell.Worker.CreateRunspaceIfNeededAndDoWork(Runspace rsToUse, Boolean isSync)
   at System.Management.Automation.PowerShell.CoreInvokeHelper[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings)
   at System.Management.Automation.PowerShell.CoreInvoke[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings)
   at System.Management.Automation.PowerShell.CoreInvoke[TOutput](IEnumerable input, PSDataCollection`1 output, PSInvocationSettings settings)
   at System.Management.Automation.PowerShell.Invoke(IEnumerable input, PSInvocationSettings settings)
   at System.Management.Automation.PowerShell.Invoke()
   at Test_Methods.Program.Main(String[] args) in C:'Users'rubotha'documents'visual studio 2015'Projects'Test Methods'Test Methods'Program.cs:line 45

如何在 c# 中运行 New-ADComputer powershell

该消息很明显,如果您想获得有关异常的更多详细信息,则需要在 .config 文件中设置:

<serviceDebug includeExceptionDetailInFaults="true" />

有关详细信息,请参阅:在服务器上打开 IncludeExceptionDetailInFaults(来自 ServiceBehaviorAttribute 或从 配置行为)

要确保 PS 代码正常工作,请尝试直接从 PS 执行它(从命令提示符运行powershell命令)

New-ADComputer -Name 'TESTESTS' -SamAccountName 'TESTESTS' -Path 'OU=Computers,OC=YRMC,DC=myorginization,DC=local'

看看它是否有效。有关更多详细信息,请参阅:https://technet.microsoft.com/en-us/library/ee617245.aspx

最后但并非最不重要的一点是,要创建一个帐户,您不需要从 c# 调用 PS。请参阅将启用的计算机添加到活动目录 OU