Почему ярлыки не создаются? - PullRequest
0 голосов
/ 03 апреля 2019

у меня проблема в powershell (Windows 10 1809) Я хочу, чтобы этот скрипт выполнял поиск всех файлов .exe в моем каталоге D: \ Test в рекурсивном режиме и делал ярлыки в D: \. Но мой код просто создает link.lnk в D: \. Почему?

$1 = get-childitem "D:\Test" -recurse | where {$_.extension -eq ".exe"} | % {
Write-Host $_.FullName
}
ForEach ($item in $1)  {
$Shell = New-Object -ComObject ("WScript.Shell")
$ShortCut = $Shell.CreateShortcut("D:\link.lnk")
$ShortCut.TargetPath= $1
$Shortcut.Save()
}

1 Ответ

1 голос
/ 03 апреля 2019

Похоже, вы называете все ярлыки D:\link.lnk, и цикл просто будет перезаписывать одно и то же имя снова и снова. Указание уникального имени ссылки на ярлык с помощью свойства BaseName (имя минус расширение) должно решить вашу проблему. Также вам нужно использовать цикл $item, чтобы указать TargetPath.

Кроме того, с помощью цикла Write-Host вы фактически ничего не назначаете своей переменной $1. Удаляя % { Write-Host $_.FullName } $1, вы получите правильный вывод. Таким образом, правильный код должен быть:

$1 = get-childitem "D:\Test" -recurse | where {$_.extension -eq ".exe"}

ForEach ($item in $1)  {
    Write-Host "Creating Shortcut: D:\$($item.BaseName).lnk  Pointing to: $($item.FullName)"
    $Shell = New-Object -ComObject ("WScript.Shell")
    $ShortCut = $Shell.CreateShortcut("D:\$($item.BaseName).lnk")
    $ShortCut.TargetPath= $item.FullName
    $Shortcut.Save()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...