1

我所拥有的简化版本是三个 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 对象吗?或者可能是我的凭据调用实际上不起作用?

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

4

2 回答 2

1

这似乎与凭据有关。如果我从通话中删除计算机名和凭据,我不会收到 CO_E_SERVER_EXEC_FAILURE 消息,当不需要凭据时,这一切都很好......

更新 我创建了一个新问题,它与这里的问题更直接相关:在 ScriptBlock 上使用凭据导致连接到应用程序的 COM 错误

于 2013-10-16T12:23:42.057 回答
0

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

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

于 2013-10-15T13:44:31.440 回答