怎么用脚本获取映像路径

wen 实用脚本 1

本文目录导读:

怎么用脚本获取映像路径

  1. Windows - PowerShell(获取已挂载ISO/VHD路径)
  2. Linux - 查找已挂载的ISO/镜像路径
  3. macOS - 获取DMG/ISO路径
  4. 通用跨平台方法(Python)
  5. 批处理文件(Windows)
  6. 注意事项

Windows - PowerShell(获取已挂载ISO/VHD路径)

# 获取所有已挂载的磁盘映像
Get-DiskImage | Where-Object {$_.Attached -eq $true} | Select-Object DevicePath, ImagePath
# 仅获取ISO文件路径
Get-DiskImage | Where-Object {$_.ImagePath -like '*.iso' -and $_.Attached} | ForEach-Object {
    Write-Host "ISO文件: $($_.ImagePath)"
}
# 获取所有vhd/vhdx文件路径
Get-DiskImage | Where-Object {$_.ImagePath -like '*.vhd*' -and $_.Attached} | 
    Select-Object ImagePath, Size, Attached, StorageType

Linux - 查找已挂载的ISO/镜像路径

# 方法1:查看mount输出
mount | grep -E '\.iso|\.img|\.vhd' | awk '{print $1}'
# 方法2:查找loop设备关联的镜像
losetup -a | awk -F'[():]' '{print $1}'
# 方法3:使用findmnt(更详细)
findmnt -t iso9660,udf,squashfs -o TARGET,SOURCE -l | grep -E '\.iso|\.img'

macOS - 获取DMG/ISO路径

# 获取所有挂载的磁盘映像
hdiutil info | grep 'image-path' | awk -F': ' '{print $2}'
# 更详细的输出(含设备映射)
hdiutil info -plist | grep -A1 'image-path' | grep string | sed 's/<[^>]*>//g' | xargs

通用跨平台方法(Python)

import os
import platform
import subprocess
def get_image_paths():
    """获取当前挂载的磁盘映像路径"""
    system = platform.system()
    if system == 'Windows':
        import win32com.client
        wmi = win32com.client.GetObject("winmgmts:")
        images = []
        for img in wmi.ExecQuery("SELECT * FROM Win32_DiskImage"):
            if img.Attached:
                images.append(img.ImagePath)
        return images
    elif system == 'Linux':
        result = subprocess.run(['losetup', '-a'], capture_output=True, text=True)
        paths = []
        for line in result.stdout.strip().split('\n'):
            if line:
                path = line.split('(')[1].split(')')[0]
                paths.append(path)
        return paths
    elif system == 'Darwin':  # macOS
        result = subprocess.run(['hdiutil', 'info', '-plist'], 
                              capture_output=True, text=True)
        import plistlib
        data = plistlib.loads(result.stdout.encode())
        return [img.get('image-path') for img in data.get('images', []) 
                if img.get('image-path')]
# 使用示例
for path in get_image_paths():
    print(f"映像路径: {path}")

批处理文件(Windows)

@echo off
:: 获取ISO/VHD文件路径(需要管理员权限)
echo 已挂载的磁盘映像:
wmic diskimage where "attached=TRUE" get imagepath /format:list
:: 或者使用diskpart(更底层)
echo list image > %temp%\dp.txt
diskpart /s %temp%\dp.txt
del %temp%\dp.txt

注意事项

  1. 管理员/root权限:某些操作(如Windows的WMI查询)需要管理员权限
  2. 实时性:只能获取当前已挂载的映像,不包括未挂载的映像文件
  3. 路径格式:Windows路径通常包含盘符,Linux/macOS为绝对路径
  4. 性能考虑:Linux下如果有很多loop设备,建议添加过滤条件

选择哪种方法取决于你的操作系统和具体需求,如果需要实时监控映像挂载状态,建议使用事件驱动的API(如Windows的WMI事件或Linux的inotify)。

抱歉,评论功能暂时关闭!