使用快捷方式(ReleaseComObject?)

问题描述 投票:-1回答:1

我必须在企业环境中使用PowerShell批量更改快捷方式(.lnk)。用户的桌面上可能有错误的快捷方式。桌面文件夹位于我们的中央存储中。如果快捷方式有错误的参数,我需要纠正它们。我说的是5000个用户。

我的代码准备就绪,工作正常。它基于我在Google上找到的一些例子。

在一些例子中我确实看到了类似的东西:

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ShortcutObject)

我不知道这是为了什么?

细分我的代码的相关部分看起来像这样:

$UserShortcuts = Get-ChildItem -Path "MyFolder" -ChildPath "SmithJ\Desktop") -Filter *.lnk |
                 Where-Object Name -Match "MyShortcut"

foreach ($UserShortcut in $UserShortcuts) {
    $sh = New-Object -ComObject WScript.Shell
    $ShortcutObject = $sh.CreateShortcut($($UserShortcut.FullName))

    $ShortcutObject.Arguments
    # ...
}

ReleaseComObject()怎么样?每个物体后我都必须这样做吗?它没有工作。我必须使用它吗?

编辑: 有了Bill_Stewart的信息,我认为这样是正确的:

$UserShortcuts = Get-ChildItem -Path "MyFolder" -ChildPath "SmithJ\Desktop") -Filter *.lnk |
                 Where-Object Name -Match "MyShortcut"

$sh = New-Object -ComObject WScript.Shell

foreach ($UserShortcut in $UserShortcuts) {
    $ShortcutObject = $sh.CreateShortcut($($UserShortcut.FullName))
    $ShortcutObject.Arguments
    # ...
}

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sh)
powershell com
1个回答
0
投票

the documentation说:

因此,仅在绝对需要时才使用[sic] ReleaseComObject。

这句话隐含的是,您了解托管代码(在本例中为PowerShell,使用.NET)如何使用COM对象的技术细节。

对于调用脚本运行时COM对象(例如WshShellWshShortcutWshUrlShortcut等)的PowerShell脚本,不需要使用ReleaseComObject,因为.NET运行时(CLR)将在不再使用时自动释放它们。

从PowerShell自动化时,所有COM对象的情况不一定如此,但对于脚本运行时,不需要释放运行时对象。

© www.soinside.com 2019 - 2024. All rights reserved.