我正在尝试在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上找不到它。在这里我看到了一些关于如何为邮件功能修复它的例子,但我无法弄清楚如何在我的代码上使用这些解决方案。如果这个问题已经得到解答,请原谅。
答案 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必须是最后一个 命令中的参数,因为后面输入的任何字符 命令被解释为命令参数。