Пакетный код для отображения цели ярлыка приложения на рабочем столе

Пакетный код для отображения цели ярлыка приложения на рабочем столе

Я работаю над расширением базового пакета для извлечения информации об IP, чтобы включить другую информацию, относящуюся к моему ИТ-отделу на работе. Мой отдел занимается устранением неполадок по всей стране для нашего оборудования Cisco на конечном пользователе и наших серверах. Пока что у меня есть файл, извлекающий данные ipconfig и mac-адрес с некоторыми исключениями. Вот мой код на данный момент:

@echo off
echo Listed below is your network IP information and physical MAC address.
echo\
echo I am logged as %UserName%.
echo My computer's name is %ComputerName%.
echo My IP settings are
ipconfig | find "." | find /i /v ""
echo\
echo My Mac address is
getmac | find /i /v "disconnected" | find /i /v "not present"
echo\
echo Provide this information to the IT team. 
echo Press the Space bar to close this window.
echo\
pause > nul

Я просматривал этот и другие подобные сайты в поисках относительных примеров, которые я мог бы модифицировать, но, по-видимому, я просто не люблю вещи, не относящиеся к Cisco. Вот новый код, взятый из другой статьи, в настоящее время как отдельный пакет:

@echo off

Setlocal Enableextensions
Setlocal Enabledelayedexpansion

for /r %%X in (*.URL) do (
  set shortcut="%%X"
  echo SHORTCUT: !shortcut!


     for /f "tokens=2 delims==" %%i in ('findstr URL !shortcut!') do (
     set URL=%%i
 echo.
 echo URL PATH: !URL!
 )

echo ----------------------------------------------------------------
echo.
)

:end
Pause

Результат, который я получаю после запуска этого, следующий:

SHORTCUT: "C:\Users\***\Desktop\Application Catalog, IE only.url"

URL PATH: http://***/cmapplicationcatalog/#/SoftwareLibrary/AppListPageView.xaml
----------------------------------------------------------------

SHORTCUT: "C:\Users\***\Desktop\Test Yahoo.url"

URL PATH: http://www.yahoo.com/
----------------------------------------------------------------

Press any key to continue . . .

*** — это пути, которые я обрезал.

Когда я заставлю это работать, я буду объединять их вместе. То, что я пытаюсь получить из 2-й партии, это определенный файл на каждом рабочем столе ПК, который мы называем CDK Drive, чтобы получить его целевую информацию. В цели есть полный IP-адрес (http://*..**.*/), который мне нужен. Целевой тип ярлыка — Application, а тип самого файла — Shortut(.lnk). Пример цели:

"C:\Program Files (x86)\Internet Explorer\iexplore.exe" http://***.**.209.42/bin/start/wsStart.application

Я стараюсь предоставить как можно больше конкретной информации, чтобы получить максимально точную помощь по этому вопросу.

Заранее спасибо.

ОБНОВЛЕНИЕ: Итак, я немного продвинулся вперед, используя Powershell и запустив его в своей партии. Это мой код Powershell на данный момент, и он «почти» работает так, как задумано.

function Get-StartMenuShortcuts
{
$Shortcuts = Get-ChildItem -Recurse "$Env:C:\Users\alexandm\Desktop\Batching" -Include *.lnk
$Shell = New-Object -ComObject WScript.Shell

foreach ($Shortcut in $Shortcuts)
{
$Properties = @{
ShortcutName = $Shortcut.Name
Target = $Shell.CreateShortcut($Shortcut).targetpath
}

New-Object PSObject -Property $Properties
}

[Runtime.InteropServices.Marshal]::ReleaseComObject($Shell) | Out-Null
}

$Output = Get-StartMenuShortcuts
$Output

При запуске из моего пакета я получаю вывод, который показывает мне базовый целевой путь, который, как оказалось, ведет к iexplore.exe, но он не дает мне весь целевой путь, включая добавляемый нами IP-адрес. Есть идеи, что я упускаю?

решение1

Ваш код PowerShell может быть следующим:

$shell = New-Object -COM WScript.Shell
Get-ChildItem -Recurse "$env:UserProfile\Desktop\*.lnk","$env:PUBLIC\Desktop\*.lnk" | 
    ForEach-Object {
        $shortcut = $shell.CreateShortcut($_.FullName)
        $Args = $shortcut.Arguments
        if ( $Args -match [system.Uri]::SchemeDelimiter) {
            "shortcut: $($_.Name)"
            "exe path: $($shortcut.TargetPath)"
            "link URL: $($Args)"
            "---"
        }
    }

Опустил все этофункцияиPSОбъект(предположим, что это одноразовый сценарий, который простоотображатьрезультат).

  • [system.Uri]::SchemeDelimiter Поле URI, см. .NETКласс URIиспользуется для простой проверки того, $shortcut.Argumentsможет ли быть URI(указывает символы, которые отделяют схему протокола связи от адресной части URI); в текущей версии скрипт не заботится о протоколе и его действительности.

Обновлено. Сейчас обрабатываются все .lnkфайлы папки изтекущий пользовательрабочий столиотпубличныйрабочий столрекурсивно.

Связанный контент