저는 직장 내 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 필드,.NET
URI 클래스 참조은(의 주소 부분과 통신 프로토콜 체계를 구분하는 문자를 지정 )$shortcut.Arguments
여부 를 간단히 확인하는 데 사용됩니다 . 현재 작성된 대로 스크립트는 프로토콜과 그 유효성에 관심이 없습니다.URI
URI
업데이트됨. 이제 .lnk
다음의 모든 파일 폴더가 처리됩니다 .현재 사용자님의 데스크탑그리고~에서공공의데스크탑재귀적으로.