Tenho trabalhado na expansão de um lote básico para extrair informações de IP e incluir outras informações relevantes para meu departamento de TI no trabalho. Meu departamento soluciona problemas em todo o país para nossos equipamentos Cisco no usuário final e em nossos servidores. Até agora, tenho o arquivo exibindo detalhes do ipconfig e o endereço MAC com algumas exclusões. Aqui esta o meu codigo ate 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
Tenho navegado aqui e em outros sites semelhantes em busca de exemplos relativos que eu possa modificar, mas, aparentemente, estou fedendo a coisas que não são da Cisco. Aqui está o novo código extraído de outro artigo, atualmente em lote próprio:
@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 obtenho ao executar isso é:
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 funcionar, irei combiná-los completamente. O que estou tentando obter do segundo lote é um arquivo específico em cada desktop de PC que chamamos de CDK Drive para que suas informações de destino sejam extraídas. No destino está um endereço IP completo (http://*..**.*/) que eu preciso. O tipo de destino do atalho é Aplicativo e o tipo de arquivo em si é Shortut(.lnk). Um exemplo de 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 possível para poder obter a assistência mais precisa com isso.
Agradeço antecipadamente.
ATUALIZAÇÃO: Então, fiz alguns progressos usando o Powershell e fazendo com que ele fosse executado em 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 em meu lote, recebo uma saída que mostra o caminho de destino básico, que é iexplore.exe, mas não fornece o caminho de destino completo, incluindo o endereço IP que adicionamos. Alguma ideia do que estou perdendo?
Responder1
Seu código do PowerShell poderia 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)"
"---"
}
}
Omiti tudo issofunçãoePSObjectcoisas (supondo que seja um script único que apenasmostrarum resultado).
[system.Uri]::SchemeDelimiter
Campo Uri, consulte.NET
Classe URIé usado simplesmente para verificar se$shortcut.Arguments
poderia serURI
(especifica os caracteres que separam o esquema do protocolo de comunicação da parte do endereço doURI
); conforme escrito atualmente, o script não se preocupa com o protocolo e sua validade.
Atualizada. Agora são processados todos .lnk
os arquivos da pastausuário atualárea de trabalhoedepúblicoÁrea de Trabalhorecursivamente.