Código em lote para exibir o destino de um atalho do aplicativo da área de trabalho

0

Tenho trabalhado na expansão de um lote básico para extrair informações de IP para incluir outras informações relevantes ao meu departamento de TI no trabalho. Meu departamento faz a solução de problemas em todo o país para nossos equipamentos da Cisco no usuário final e em nossos servidores. Até agora eu tenho o arquivo puxando os detalhes do ipconfig e o endereço MAC com algumas exclusões. Aqui está o meu código até agora:

@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

Eu venho navegando aqui e em outros sites desse tipo para exemplos relativos que eu possa ser capaz de modificar, mas aparentemente eu apenas trespasso com coisas que não são da Cisco. Aqui está o novo código extraído de outro artigo, atualmente como seu próprio 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

A saída que recebo dessa execução é:

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

*** são caminhos que trunquei.

Quando eu começar a trabalhar, eu vou estar combinando estes completamente. O que eu estou tentando obter do segundo lote é um arquivo específico em todos os desktops de PCs que chamamos de CDK Drive para obter as informações de destino. O alvo é um endereço IP completo (http: // *. . **. * /) Que eu preciso. O tipo de destino do atalho é Application e o próprio tipo de arquivo é Shortut (.lnk). Um exemplo do alvo é:

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

Estou tentando fornecer o máximo de informações específicas para que eu possa obter a assistência mais precisa com isso.

Obrigado antecipadamente.

ATUALIZAÇÃO: Então, eu fiz um pequeno progresso usando o Powershell e tendo isso sendo executado pelo meu lote. Este é o meu código Powershell até agora, e 'quase' funciona como pretendido.

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

Quando executado a partir do meu lote, recebo uma saída que mostra o caminho de destino básico, que é o iexplore.exe, mas não me fornece o caminho de destino completo, incluindo o endereço IP que adicionamos. Alguma idéia do que eu sinto falta?

    
por Michael Alexander 23.09.2016 / 04:25

1 resposta

0

Seu código do powershell pode ser o seguinte:

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

Omitiu tudo o que função e PSObject coisas (supondo que é um script one-shot que meramente exibir um resultado).

  • [system.Uri]::SchemeDelimiter Campo Uri, consulte .NET classe URI é usado para simplesmente verificar se $shortcut.Arguments pode ser URI (especifica os caracteres que separam o esquema do protocolo de comunicação da parte do endereço URI ); como atualmente escrito, o script não se importa com o protocolo e sua validade.

Atualizado . Agora são processadas todas as pastas .lnk files da área de trabalho usuário atual e da área de trabalho pública recursivamente .

    
por 23.09.2016 / 18:14