トップ回答者
特定のリンク先に向いているショートカットの削除

質問
回答
-
チャブーンです。
何か条件があるようでしたので、それに合わせて作ってみました。Get-ChildItemで取得したオブジェクトだとShortCutのTargetPathが呼び出せないようなので、Get-Itemとして呼び出して代入しています。
$Items=Get-ChildItem $Env:USERPROFILE\Desktop|Where {$_.extension -eq ".lnk"} Foreach ($Item in $Items) {
$objItem=Get-Item $Item.Fullname $Shell=New-Object -comobject Wscript.Shell IF (($Shell.CreateShortcut($objItem)).TargetPath -match "C:\\Test\\.+\.exe") { Write-Host $Item.Fullname "を削除します。" Remove-Item $Item.Fullname -force } Else { Write-Host $Item.Fullname "は削除しません。" } }追記:任意のフォルダで実行できるよう、スクリプトの一部を修正しておきます。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 回答としてマーク KAZU-DENSAN 2015年12月1日 5:32
- 回答としてマークされていない KAZU-DENSAN 2015年12月1日 5:44
- 回答としてマーク KAZU-DENSAN 2015年12月1日 5:44
- 編集済み チャブーンMVP 2015年12月1日 6:36 スクリプトを修正
すべての返信
-
チャブーンです。
同じことを考えられる方はおられるようで、答えが載っていましたよ。
http://d.hatena.ne.jp/Wacky/20090308/1236496903
$Item=Get-Item .\notepad.exe.lnk $Shell=New-Object -comobject Wscript.Shell IF (($Shell.CreateShortcut($Item)).TargetPath -match "notepad.exe") { Write-Host $Item.Fullname "を削除します。" Remove-Item $Item -force } Else { Write-Host $Item.Fullname "は削除しません。" }
要は、取り込んだショートカット情報を基に新しいショートカットを擬似的に作成して、そのプロパティ情報を読んだ、ということですね。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP 2015年12月1日 3:49
-
チャブーンです。
何か条件があるようでしたので、それに合わせて作ってみました。Get-ChildItemで取得したオブジェクトだとShortCutのTargetPathが呼び出せないようなので、Get-Itemとして呼び出して代入しています。
$Items=Get-ChildItem $Env:USERPROFILE\Desktop|Where {$_.extension -eq ".lnk"} Foreach ($Item in $Items) {
$objItem=Get-Item $Item.Fullname $Shell=New-Object -comobject Wscript.Shell IF (($Shell.CreateShortcut($objItem)).TargetPath -match "C:\\Test\\.+\.exe") { Write-Host $Item.Fullname "を削除します。" Remove-Item $Item.Fullname -force } Else { Write-Host $Item.Fullname "は削除しません。" } }追記:任意のフォルダで実行できるよう、スクリプトの一部を修正しておきます。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 回答としてマーク KAZU-DENSAN 2015年12月1日 5:32
- 回答としてマークされていない KAZU-DENSAN 2015年12月1日 5:44
- 回答としてマーク KAZU-DENSAN 2015年12月1日 5:44
- 編集済み チャブーンMVP 2015年12月1日 6:36 スクリプトを修正
-
ありがとう御座いました。
同じサイトを見ていたのですが、今の知識では書き換えできないため
もっと近いサンプルが無いかと思い、質問させて頂きました。
ほぼそのまま利用出来る形でのコードを教えて頂き、感謝致します。
Remove-Item $Item -force ↓ Remove-Item $Item.Fullname -force
とする事で、想定通りの動きになりました。
- 編集済み KAZU-DENSAN 2015年12月1日 5:44
-
チャブーンです。
Remove-Item $Item -force ↓ Remove-Item $Item.Fullname -force
とする事で、想定通りの動きになりました。
私の方でも動作は確かめましたが、私のスクリプトは%USERPROFILE%\Desktopにおいて実行していたので、(削除対象がカレントディレクトリにあるので)問題がなかった、ということでしょう。
任意のフォルダで実行いただく場合は、FullNameプロパティでフルパスを拾ってもらう必要がありますね。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
-
チャブーンです。
前のコードは、わざわざGet-Itemでオブジェクトのとり直しを行っていてイケていないな、と思い見直したところ、Shell.CreateShortCut()の引数は単に実行ファイルのフルパスが入ればよい、と気づきました。それをふまえて直したコードを一応張っておきます。
$Items=Get-ChildItem $Env:USERPROFILE\Desktop|Where {$_.extension -eq ".lnk"} Foreach ($Item in $Items) { $Shell=New-Object -comobject Wscript.Shell IF (($Shell.CreateShortcut($Item.Fullname)).TargetPath -match "C:\\Test\\.+\.exe") { Write-Host $Item.Fullname "を削除します。" Remove-Item $Item.Fullname -force } Else { Write-Host $Item.Fullname "は削除しません。" } }
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。