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.NET
Clase URIse utiliza simplemente para comprobar si$shortcut.Arguments
podría serURI
(especifica los caracteres que separan el esquema del protocolo de comunicación de la parte de la dirección delURI
); Tal como está escrito actualmente, al guión no le importa el protocolo y su validez.
Actualizado. Ahora se procesan todas .lnk
las carpetas de archivos deusuario actualescritorio deydepúblicoescritoriorecursivamente.