데스크탑 애플리케이션 바로가기의 대상을 표시하는 배치 코드

데스크탑 애플리케이션 바로가기의 대상을 표시하는 배치 코드

저는 직장 내 IT 부서와 관련된 기타 정보를 포함하기 위해 IP 정보를 가져오는 기본 배치를 확장하는 작업을 진행해 왔습니다. 우리 부서는 최종 사용자의 Cisco 장비와 서버에 대한 전국적인 문제 해결을 수행합니다. 지금까지 몇 가지 제외 사항이 포함된 ipconfig 세부 정보와 mac 주소를 가져오는 파일이 있습니다. 지금까지 내 코드는 다음과 같습니다.

@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

나는 수정할 수 있는 상대적인 예를 찾기 위해 여기와 다른 사이트를 탐색해 왔지만 Cisco가 아닌 것에는 악취가 나는 것 같습니다. 다음은 현재 자체 배치로 다른 기사에서 가져온 새 코드입니다.

@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

이것을 실행하여 얻은 결과는 다음과 같습니다.

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

***는 내가 잘린 경로입니다.

작동하게 되면 이것들을 모두 결합할 것입니다. 두 번째 배치에서 얻으려는 것은 대상 정보를 가져오기 위해 CDK 드라이브라고 부르는 모든 PC 데스크탑의 특정 파일입니다. 대상에는 완전한 IP 주소(http://*..**.*/) 필요합니다. 바로가기의 대상 유형은 Application 이고, 파일 자체의 유형은 Shortut(.lnk) 입니다. 대상의 예는 다음과 같습니다.

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

이에 대해 가장 정확한 도움을 받을 수 있도록 최대한 구체적인 정보를 제공하려고 노력하고 있습니다.

미리 감사드립니다.

업데이트: 그래서 저는 Powershell을 사용하여 배치별로 실행하도록 하는 데 약간의 진전을 이루었습니다. 이것은 지금까지 내 Powershell 코드이며 의도한 대로 '거의' 작동합니다.

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

배치에서 실행하면 iexplore.exe에 대한 기본 대상 경로를 보여주는 출력이 표시되지만 추가한 IP 주소를 포함한 전체 대상 경로는 제공되지 않습니다. 내가 무엇을 놓치고 있는지 아시나요?

답변1

Powershell 코드는 다음과 같습니다.

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

그거 다 생략함기능그리고PS객체(단순히 수행되는 일회성 스크립트라고 가정)표시하다결과).

  • [system.Uri]::SchemeDelimiter Uri 필드, .NETURI 클래스 참조은(의 주소 부분과 통신 프로토콜 체계를 구분하는 문자를 지정 ) $shortcut.Arguments여부 를 간단히 확인하는 데 사용됩니다 . 현재 작성된 대로 스크립트는 프로토콜과 그 유효성에 관심이 없습니다.URIURI

업데이트됨. 이제 .lnk다음의 모든 파일 폴더가 처리됩니다 .현재 사용자님의 데스크탑그리고~에서공공의데스크탑재귀적으로.

관련 정보