Código por lotes para mostrar el destino de un acceso directo a una aplicación de escritorio

Código por lotes para mostrar el destino de un acceso directo a una aplicación de escritorio

He estado trabajando para expandir un lote básico para extraer información de IP para incluir otra información relevante para mi departamento de TI en el trabajo. Mi departamento soluciona problemas a nivel nacional para nuestros equipos Cisco en el usuario final y nuestros servidores. Hasta ahora tengo el archivo que muestra los detalles de ipconfig y la dirección mac con algunas exclusiones. Aquí está mi código hasta ahora:

@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

He estado navegando aquí y en otros sitios similares en busca de ejemplos relativos que podría modificar, pero aparentemente apesto a cosas que no son de Cisco. Aquí está el nuevo código extraído de otro artículo, actualmente como su propio lote:

@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

El resultado que obtengo al ejecutar esto es:

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 . . .

*** son caminos que he truncado.

Cuando lo haga funcionar, los combinaré por completo. Lo que estoy tratando de obtener del segundo lote es un archivo específico en el escritorio de cada PC al que hemos llamado CDK Drive para extraer la información de destino. En el objetivo hay una dirección IP completa (http://*..**.*/) Que yo necesito. El tipo de destino del acceso directo es Aplicación y el tipo de archivo en sí es Acceso directo (.lnk). Un ejemplo del objetivo es:

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

Estoy tratando de brindar la mayor cantidad de información específica posible para poder obtener la asistencia más precisa con esto.

Gracias de antemano.

ACTUALIZACIÓN: He avanzado un poco usando Powershell y haciendo que mi lote lo ejecute. Este es mi código de Powershell hasta ahora y "casi" funciona según lo previsto.

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

Cuando lo ejecuto desde mi lote, obtengo un resultado que me muestra la ruta de destino básica, que resulta ser iexplore.exe, pero no me da la ruta de destino completa, incluida la dirección IP que agregamos. ¿Alguna idea de lo que me estoy perdiendo?

Respuesta1

Su código de PowerShell podría ser el siguiente:

$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)"
            "---"
        }
    }

Omitió todo esofunciónyPSObjetocosas (suponiendo que sea un guión de una sola vez que simplementemostrarun resultado).

  • [system.Uri]::SchemeDelimiter Campo Uri, consulte .NETClase URIse utiliza simplemente para comprobar si $shortcut.Argumentspodría ser URI(especifica los caracteres que separan el esquema del protocolo de comunicación de la parte de la dirección del URI); Tal como está escrito actualmente, al guión no le importa el protocolo y su validez.

Actualizado. Ahora se procesan todas .lnklas carpetas de archivos deusuario actualescritorio deydepúblicoescritoriorecursivamente.

información relacionada