commit 9046c88cca50241068f172ae85f0c8746fb11203 Author: Vergil Wong Date: Wed Feb 21 10:39:58 2024 +0800 Add .gitignore, config_template.json, readme.md, and reload_xmos_device.ps1 files diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..869f2a8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +device_list.csv +config.json \ No newline at end of file diff --git a/config_template.json b/config_template.json new file mode 100644 index 0000000..acebce2 --- /dev/null +++ b/config_template.json @@ -0,0 +1,7 @@ +{ + "devManViewPath": "D:\\MyWorkspace\\tools\\devmanview-x64\\DevManView.exe", + "deviceListFile": ".\\device_list.csv", + "pattern": "USB Audio", + "auditionPath": "D:\\Program Files\\Adobe Audition 2020\\Adobe Audition.exe", + "audacityPath": "D:\\Program Files\\Audacity\\Audacity.exe" +} \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..06a3616 --- /dev/null +++ b/readme.md @@ -0,0 +1,30 @@ +# 重新加载XMOS设备 + +这个脚本,`reload_xmos_device.ps1`,用于通过卸载和重新安装来重新加载XMOS设备。它还会重启Adobe Audition和Audacity。 + +## 前提条件 + +- [DevManView](https://www.nirsoft.net/utils/usb_devices_view.html) - Windows标准设备管理器的免费替代品。 + +## 配置 + +脚本从`config.json`文件读取其配置。以下是可用的配置选项: + +- `devManViewPath` (字符串): DevManView可执行文件的路径。 +- `deviceListFile` (字符串): 设备列表文件的路径。 +- `pattern` (字符串): 用于过滤设备的模式。 +- `auditionPath` (字符串): Adobe Audition可执行文件的路径。 +- `audacityPath` (字符串): Audacity可执行文件的路径。 + +## 使用方法 + +1. 确保你已经安装了前提条件。 +2. 根据你的路径和需要在根目录下新建`config.json`文件。 +3. 以管理员身份运行`reload_xmos_device.ps1`脚本。 +4. 脚本将生成一个设备列表文件,根据指定的模式过滤设备,卸载过滤后的设备,并重启Adobe Audition和Audacity。 + +注意:脚本需要管理员权限才能卸载设备。 + +## 示例配置 + +参见`config_template.json`文件。 \ No newline at end of file diff --git a/reload_xmos_device.ps1 b/reload_xmos_device.ps1 new file mode 100644 index 0000000..6b19fdd --- /dev/null +++ b/reload_xmos_device.ps1 @@ -0,0 +1,49 @@ +function RunAsAdmin($scriptPath) { + $identity = [Security.Principal.WindowsIdentity]::GetCurrent() + $principal = New-Object Security.Principal.WindowsPrincipal($identity) + $admin = [Security.Principal.WindowsBuiltInRole]::Administrator + if (!$principal.IsInRole($admin)) { + $arguments = "& '" + $scriptPath + "'" + Start-Process powershell -Verb runAs -ArgumentList $arguments + exit + } +} + +function GenerateDeviceList($devManViewPath, $outputFile) { + & $devManViewPath /scomma $outputFile + Write-Host "Created $outputFile" +} + +function FilterDevices($deviceListFile, $pattern) { + $deviceList = Import-Csv -Path $deviceListFile -Encoding UTF8 -Header "Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27" + $deviceList | Select-Object -ExpandProperty Column1 | Where-Object { $_ -match $pattern } | Sort-Object | Get-Unique +} + +function UninstallDevices($devManViewPath, $devices) { + foreach ($device in $devices) { + Write-Host "Uninstalling $device" + & $devManViewPath /uninstall "$device" + } +} + +# 读取配置文件 +$config = Get-Content -Path .\config.json | ConvertFrom-Json + +# 配置选项,当选项不起作用时,检查DevManView.cfg中是否配置了filter +$scriptPath = $myinvocation.mycommand.definition +$devManViewPath = $config.devManViewPath +$deviceListFile = $config.deviceListFile +$pattern = $config.pattern + +# 执行 +RunAsAdmin $scriptPath +GenerateDeviceList $devManViewPath $deviceListFile +$devices = FilterDevices $deviceListFile $pattern +UninstallDevices $devManViewPath $devices +Remove-Item $deviceListFile + +# 重启 Adobe Audition and Audacity +Stop-Process -Name "Audition" -Force -ErrorAction SilentlyContinue +Start-Process -FilePath $config.auditionPath +Stop-Process -Name "Audacity" -Force -ErrorAction SilentlyContinue +Start-Process -FilePath $config.audacityPath