从CMD启动Powershell会返回“无法将System.Object []'转换为'System.String'类型”

时间:2017-04-03 13:04:07

标签: php windows powershell cmd

我正在尝试在PHP中使用PowerShell.exe -command $command,其中该命令是为新用户创建的。

我注意到它没有运行,并试图直接从CMD启动它(我相信这就是exec();确实如此)。

我正在尝试运行的代码:

powershell.exe -command New-ADUser -SAMAccountName "jajaap" -Instance "Get_ADUser -Identity UserTemplate" -Name "Jan Jaap" -DisplayName "Jan" -Path "OU=Users-NL,OU=Users,OU=Domain-Test,DC=Domain-controller,DC=com" -GivenName "Jan" -Surname "Jaap" -userPrincipalName "jan.jaap@example.com"

我得到的错误是:

  

New-ADUser:无法将'System.Object []'转换为该类型   参数'Path'需要'System.String'。指定的方法不是   支撑。

我的猜测是我必须逃避路径字符串中的某些字符,但我不知道如何或哪个。或者可能是CMD中有converttostring种函数?我在Google上找不到它。在这里我看到了一些关于如何为邮件功能修复它的例子,但我无法弄清楚如何在我的代码上使用这些解决方案。如果这个问题已经得到解答,请原谅。

1 个答案:

答案 0 :(得分:0)

我认为您可能需要用大括号和引号包装整个命令,使其成为一个字符串和一个scriptblock,并在脚本块前面添加一个&符号,如下所示:

powershell.exe -command "& {New-ADUser -SAMAccountName 'jajaap' -Instance 'Get_ADUser -Identity UserTemplate' -Name 'Jan Jaap' -DisplayName 'Jan' -Path 'OU=Users-NL,OU=Users,OU=Domain-Test,DC=Domain-controller,DC=com' -GivenName 'Jan' -Surname 'Jaap' -userPrincipalName 'jan.jaap@example.com'}"

每个MSDN:

  

Command的值可以是" - ",一个字符串。或脚本块。如果   Command的值是" - ",从标准输入读取命令文本。

     

脚本块必须用大括号({})括起来。你可以指定一个   仅在Windows PowerShell中运行PowerShell.exe时的脚本块。   脚本的结果将返回到父shell   反序列化的XML对象,而不是活动对象。

     

如果Command的值是字符串,则Command必须是最后一个   命令中的参数,因为后面输入的任何字符   命令被解释为命令参数。

     

来源:https://msdn.microsoft.com/en-us/powershell/scripting/core-powershell/console/powershell.exe-command-line-help