我正在开发一个新系统,用于自动安装 Windows 10/11 中的驱动程序。前段时间,我从 driverpack 下载了一个驱动程序集合(驱动程序集合很好,但我认为用于管理安装的软件可能有病毒……)因此,我可以安装几乎任何 Windows 驱动程序,但它会持续很长时间。我的服务器中的 SAMBA 共享中有一个驱动程序集合(免費BNT从现在开始。它是 Ubuntu 22.04.1)。因此,当我想安装任何驱动程序时,它必须在集合中搜索正确的 .inf 文件,这可能需要 20 分钟或更长时间。然后我最近想出了一个想法,做一个驱动程序数据库(MySQL) 以及硬件 ID 和文件路径(针对.inf
文件),然后执行电源外壳脚本使用数据库自动安装驱动程序并通过下载驱动程序桑巴。我问ChatGPT帮我写代码,它帮了我很多忙,但它提出的解决方案有一些错误。该项目由两个主要部分组成:
- 生成一个 MySQL 数据库,其中的表包含两列:
hwid
和path
,包含每个.inf
文件及其硬件 ID 的条目。 - 使用以前的数据库生成安装驱动程序所需的不同的 powershell 脚本。
现在我正处于第一步 - 生成数据库。但是ChatGPT并不完美。这是脚本。注意:免費BNT是具有大量存储空间的服务器。它充当桑巴服务器和其他功能,但就这一点而言,重要的是它充当MySQL服务器和桑巴服务器,并且它将运行bash shell 脚本这将生成包含所有 .inf 文件及其硬件 ID 的 MySQL 数据库。以下是脚本。
#!/bin/bash
# Set up MySQL database connection parameters
db_user="mymysqluser"
db_pass="mymysqlpass"
db_name="drivers"
db_host="127.0.0.1"
# Set up the path to your drivers collection
drivers_path="/free/fr/drivers/"
# Loop through all INF files in the drivers collection
for inf_file in $(find "$drivers_path" -type f -name "*.inf"); do
# Extract hardware IDs from INF file
hwids=$(grep -iE "^driverver|^pci|usb\\\\" "$inf_file" | awk -F ",|=" '{print $2}' | tr -d ' ' | sort -u)
#convert the inf file path to a path readable by Windows systems through SAMBA (added by borhacker)
inf_file2=$(echo $inf_file | sed 's/\/free\/fr\/drivers\//\\\\192.168.1.2\\Fr-drivers\\/')
inf_file3=$(echo $inf_file2 | sed 's/\//\\/g')
# Loop through all hardware IDs and insert them into the database
for hwid in $hwids; do
echo "Inserting $hwid for $inf_file3 into database..."
mysql -u $db_user -p$db_pass -h $db_host $db_name -e "INSERT INTO drivers (hwid, path) VALUES ('$hwid', '$inf_file3');"
done
done
标记为“由 borhacker 添加' 是我做的,因为文件路径与免費BNT或从 Windows 10 访问桑巴共享。因此,当变量inf_file
包含例如:
/free/fr/drivers/bluetooth/DP_Bluetooth_22094/MediaTek/FORCED/10x64/7921_1.3.14.133_tequila/mtkbtfilter.inf
该变量inf_file3
包含:
\\192.168.1.2\Fr-drivers\bluetooth\DP_Bluetooth_22094\MediaTek\FORCED\10x64\7921_1.3.14.133_tequila\mtkbtfilter.inf
脚本的其余部分,我全部理解(不是全部!)。我已经研究过它以了解其行为。我唯一不明白的是这一部分:
# Extract hardware IDs from INF file
hwids=$(grep -iE "^driverver|^pci|usb\\\\" "$inf_file" | awk -F ",|=" '{print $2}' | tr -d ' ' | sort -u)
我想问题就在这里。我理解,这应该会提取硬件 ID从每个.inf
文件中。但是当我运行脚本时,它并没有提取硬件 ID。这就是我研究这个脚本的原因。它通常提取日期,例如(运行脚本一段时间后的输出):
root@freebnt:/home/borhacker# ./indexdrivers-edit.sh
Inserting 07/10/2016 for \\192.168.1.2\Fr-drivers\video\DP_Video_nVIDIA-XP_22080\nVidia\FORCED\5x86\368.81\nvmmi.inf into database...
mysql: [Warning] Using a password on the command line interface can be insecure.
Inserting 07/10/2016 for \\192.168.1.2\Fr-drivers\video\DP_Video_nVIDIA-XP_22080\nVidia\FORCED\5x86\368.81\nvbli.inf into database...
mysql: [Warning] Using a password on the command line interface can be insecure.
Inserting 07/10/2016 for \\192.168.1.2\Fr-drivers\video\DP_Video_nVIDIA-XP_22080\nVidia\FORCED\5x86\368.81\nvlei.inf into database...
mysql: [Warning] Using a password on the command line interface can be insecure.
Inserting 07/10/2016 for \\192.168.1.2\Fr-drivers\video\DP_Video_nVIDIA-XP_22080\nVidia\FORCED\5x86\368.81\nvami.inf into database...
mysql: [Warning] Using a password on the command line interface can be insecure.
现在,我希望有人能指出我正确的方向,以创建正确的脚本,从而生成MySQL数据库。我不太了解 Linux 中处理文本的工具,也不太了解 Windows 的信息文件的内容。