Batchcode zum Anzeigen des Ziels einer Desktop-Anwendungsverknüpfung

Batchcode zum Anzeigen des Ziels einer Desktop-Anwendungsverknüpfung

Ich habe daran gearbeitet, einen einfachen Batch zum Abrufen von IP-Informationen zu erweitern, um weitere Informationen einzuschließen, die für meine IT-Abteilung bei der Arbeit relevant sind. Meine Abteilung führt landesweit Fehlerbehebungen für unsere Cisco-Geräte beim Endbenutzer und auf unseren Servern durch. Bisher habe ich die Datei, die IPconfig-Details und die Mac-Adresse mit einigen Ausnahmen abruft. Hier ist mein Code bisher:

@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

Ich habe hier und auf anderen Websites nach entsprechenden Beispielen gesucht, die ich vielleicht ändern könnte, aber anscheinend bin ich bei Dingen, die nichts mit Cisco zu tun haben, einfach nicht gut. Hier ist der neue Code, der aus einem anderen Artikel stammt und derzeit als eigener Batch vorliegt:

@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

Die Ausgabe, die ich beim Ausführen erhalte, ist:

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

*** sind Pfade, die ich gekürzt habe.

Wenn ich es zum Laufen bekomme, werde ich diese zusammenführen. Was ich aus dem zweiten Stapel zu bekommen versuche, ist eine bestimmte Datei auf jedem PC-Desktop, die wir CDK Drive genannt haben, um ihre Zielinformationen abzurufen. Im Ziel befindet sich eine vollständige IP-Adresse (http://*..**.*/), die ich brauche. Der Zieltyp der Verknüpfung ist Anwendung und der Dateityp selbst ist Shortut(.lnk). Ein Beispiel für das Ziel ist:

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

Ich versuche, möglichst viele konkrete Angaben zu machen, um Ihnen dabei möglichst präzise Hilfestellung leisten zu können.

Vielen Dank im Voraus.

UPDATE: Ich habe also ein paar Fortschritte gemacht, indem ich Powershell verwendet und es von meinem Batch ausführen ließ. Dies ist mein Powershell-Code bisher und er funktioniert „fast“ wie vorgesehen.

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

Wenn ich es von meinem Batch aus ausführe, erhalte ich eine Ausgabe, die mir den grundlegenden Zielpfad anzeigt, der zufällig zu iexplore.exe führt, aber es zeigt mir nicht den gesamten Zielpfad einschließlich der IP-Adresse, die wir hinzufügen. Irgendeine Idee, was mir fehlt?

Antwort1

Ihr Powershell-Code könnte wie folgt aussehen:

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

Das alles weggelassenFunktionUndPSObject(vorausgesetzt, es handelt sich um ein einmaliges Skript, das lediglichAnzeigeein Ergebnis).

  • [system.Uri]::SchemeDelimiter URI-Feld, siehe .NETURI-Klassewird einfach verwendet, um zu prüfen, ob $shortcut.Argumentses sein könnte URI(gibt die Zeichen an, die das Kommunikationsprotokollschema vom Adressteil des trennen URI); in der aktuellen Fassung kümmert sich das Skript nicht um das Protokoll und dessen Gültigkeit.

Aktualisiert. Nun werden alle .lnkDateien aus dem Ordner verarbeitetaktueller Benutzer's-Desktop-BildschirmUndausöffentlichDesktop-Computerrekursiv.

verwandte Informationen