在单个PC上名为powershell脚本的进程中创建New-Object -ComObject的问题

时间:2013-10-15 12:43:15

标签: powershell

我所拥有的简化版本是三个powershell脚本。一个使用凭据调用其他powershell脚本。第二个调用存储在第三个脚本中的函数。所以基本上我的第一个脚本的主要功能看起来像这样:

Invoke-Command -ScriptBlock { param($script,$param) &$script $param} -ArgumentList $scriptToRun,$param) -ComputerName $computerName -Credential $cred

此函数成功调用第二个脚本,该脚本采用传入的参数,如下所示:

param($path) . ./functions.ps1 addToiTunes $path

第三个脚本包含一个名为addToiTunes的函数,其基本函数通过为iTunes创建COM对象来启动:

function addToiTunes($path) { $iTunes = New-Object -ComObject iTunes.application Write-Host "Completed" }

问题是,它永远不会进入Write-Host语句。它只是挂在New-Object语句上,然后最终停止并声明“脚本执行完成”。

知道为什么会这样吗?是因为它试图在后台进程中创建一个新的com对象吗?或者它可能是我的凭据呼叫实际上没有工作?

有谁知道调用New-Object的更好方法?或者我应该检查该应用程序的现有对象?我不确定问题是什么。

2 个答案:

答案 0 :(得分:1)

这似乎与凭据有关。如果我从调用中删除了computername和creds,我没有得到CO_E_SERVER_EXEC_FAILURE消息,当不需要凭证时,这一切都很好......

<强>更新 我在这里创建了一个与问题更直接相关的新问题:Using credentials on ScriptBlock causing COM errors connecting to application

答案 1 :(得分:0)

这不是Powershell着名的旧第二跳问题吗?您需要使用 Enable-WSManCredSSP 设置客户端凭据委派,请参阅此处的脚本专家:http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/14/enable-powershell-quot-second-hop-quot-functionality-with-credssp.aspx

否则第二个'n第三个powershell脚本不会继承您的凭据并作为本地系统运行。