【问题标题】:Issue with creating a New-Object -ComObject in a process called powershell script on single PC在单个 PC 上称为 powershell 脚本的进程中创建 New-Object -ComObject 的问题
【发布时间】:2013-10-17 08:17:09
【问题描述】:

我所拥有的简化版本是三个 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 语句之前添加一个 Write-Host 语句,它将打印它。
  • 我的另一个问题是,它是否可能与 Powershell 本身有关?
  • 说“远程”powershell 脚本可能并不准确,因为它们都在同一台机器上运行。

标签: powershell


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这不是 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脚本不会继承您的凭据并作为本地系统运行。

    【讨论】:

    • 如果所有三个脚本都在同一台机器上运行,这是否也是如此?因为我不确定是否可以在一台 PC 上设置 Enable-WSManCredSSP -role Server & Enable-WSManCredSSP -role Client -delegate BLAH?
    • 在尝试设置上述内容并运行后:winrm set winrm/config/service '@{CertificateThumbprint="<thumbprint>"}' 我收到以下错误消息:New-PSSession : [<PCNAME>] Connecting to remote server <PCNAME> failed with the following error message : The WinRM client received an HTTP server error status (500), but the remote service did not include any other information about the cause of the failure.
    • 供参考:WinRM Quickconfig WinRM service is already running on this machine. WinRM is already set up for remote management on this computer.
    • 如果它有任何用处,这就是我得到的错误:检索具有 CLSID {DC0C2640-1415-4644-875C-6F4D769839BA} 的组件的 COM 类工厂因以下错误而失败: 80080005 服务器执行失败(来自 HRESULT 的异常:0x80080005 (CO_E_SERVER_EXEC_FAILURE))。 + CategoryInfo : ResourceUnavailable: (:) [New-Object], COMException + FullyQualifiedErrorId : NoCOMClassIdentified,Microsoft.PowerShell.Commands.NewObjectCommand
    猜你喜欢
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多