私は、職場の 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 . . .
*** は切り捨てたパスです。
動作するようになったら、これらをすべて組み合わせます。2 番目のバッチから取得しようとしているのは、CDK Drive と呼ばれるすべての PC デスクトップ上の特定のファイルで、そのターゲット情報を取得するものです。ターゲットには完全な IP アドレス (http://*.必要なショートカット (.**.*/) を作成します。ショートカットのターゲット タイプはアプリケーションで、ファイル自体のタイプは 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
ファイルフォルダが処理されています現在の使用者のデスクトップそしてから公共デスクトップ再帰的に。