Я пытаюсь создать сценарий, который создает несколько ярлыков для исполняемых файлов на рабочем столе.Поскольку код, который отвечает за создание ярлыков, будет использоваться несколько раз, и в других сценариях я решил поместить его в функцию.
Логика довольно проста:
- Определить функцию
- Определение целевых файлов ярлыков в отдельных массивах (в моем примере я использую
notepad.exe
и cmd.exe
) - Определение намеченного пути для ярлыков
Я пытаюсь использовать вложенные циклы foreach для итерации по целевому файлу и массивам путей ярлыков, но он не создает ярлыки правильно.Возможно, есть лучший способ перебрать программы, которых я не вижу (вполне возможно, потому что я болен и у меня плохой туман).
Скрипт может обрабатывать хотя бы один ярлык.
Я попытался запустить код функции вне функции.Когда я удаляю командную строку из массивов, ярлык для «Блокнота» создается правильно.
function CreateShortcuts {
[CmdletBinding()]
Param(
[Parameter(Mandatory = $true, Position = 0)]
[System.String]$ShortcutPath,
[Parameter(Mandatory = $true, Position = 1)]
[System.String]$TargetFile,
[Parameter(Mandatory = $false, Position = 2)]
[System.String]$ShortcutArgs
)
$objShell = New-Object -ComObject WScript.Shell
$objShortcut = $objShell.CreateShortcut($ShortcutPath)
$objShortcut.TargetPath = $TargetFile
$objShortcut.Save()
}
$TargetFiles = "$env:SystemRoot\System32\notepad.exe", "$env:SystemRoot\System32\cmd.exe"
$ShortcutPaths = "$env:Public\Desktop\Notepad.lnk", "$env:Public\Desktop\Command Prompt.lnk"
foreach ($ShortcutPath in $ShortcutPaths) {
foreach ($TargetFile in $TargetFiles) {
CreateShortcuts -ShortcutPath $ShortcutPath -TargetFile $TargetFile
}
}
Ожидаемый вывод - ярлыки для «Блокнота» и «Командная строка» отображаются на рабочем столе и ссылаются на нужную программу.Вместо этого обе ссылки быстрого доступа к cmd.exe
.