エンタープライズ環境でPowerShellでショートカット(.lnk)を一括変更する必要があります。 ユーザーのデスクトップに間違ったショートカットがある可能性があります。デスクトップフォルダは、当社の中央ストレージにあります。ショートカットに間違った引数がある場合、それらを修正する必要があります。私は約5.000ユーザーを話している。ショートカットの操作(ReleaseComObject?)
私のコードは正常に動作しています。 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()
について? すべてのオブジェクトの後でこれを行う必要がありますか? これはなくても働いています。私はそれを使用する必要がありますか?
EDIT:
私はそれがこのような正しいことだと思う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)
これは、メモリ、クリーンアップジョブなどからオブジェクト/プロセスを解放することを意味します。常に動作するとは限りません。場合によってはプロセスを強制終了する必要があります。 – Avshalom
はい、あなたは 'com 'オブジェクトはリソースを解放し、メモリリークを回避します。 – TheIncorrigible1
[Documentation](https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.releasecomobject(v = vs.110).aspx) – gms0ulman