Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Function to check if a partition is ext4
- function Check-Ext4 {
- param (
- [string]$Device
- )
- # Try to read the superblock to determine if it's ext4
- try {
- $output = wsl -e sh -c "file -s $Device"
- if ($output -match "ext4") {
- return $true
- }
- } catch {
- # Handle any errors silently
- }
- return $false
- }
- # Get available drives
- $drives = Get-CimInstance -Query "SELECT * FROM Win32_DiskDrive"
- # Display drive information with index numbers
- $driveInfo = @()
- for ($i = 0; $i -lt $drives.Count; $i++) {
- $drive = $drives[$i]
- $partitions = Get-CimInstance -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='$($drive.DeviceID)'} WHERE AssocClass=Win32_DiskDriveToDiskPartition"
- $partitionCount = $partitions.Count
- $partitionTypes = @()
- foreach ($partition in $partitions) {
- $logicalDisks = Get-CimInstance -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} WHERE AssocClass=Win32_LogicalDiskToPartition"
- if ($logicalDisks) {
- foreach ($logicalDisk in $logicalDisks) {
- $fsType = $logicalDisk.FileSystem
- $driveLetter = $logicalDisk.DeviceID
- $partitionTypes += "$driveLetter ($fsType)"
- }
- } else {
- $partitionTypes += "Unknown"
- }
- # Check if the partition is ext4
- $devicePath = "\\.\PHYSICALDRIVE$($partition.DeviceID -replace 'Disk #', '')"
- if (Check-Ext4 $devicePath) {
- $partitionTypes[-1] = "ext4 (Linux)"
- }
- }
- # Create a string to show partition types
- $fsTypeString = ($partitionTypes -join ", ")
- # Append drive info to the list with index number
- $driveInfo += "$($i): Drive \\.\PHYSICALDRIVE$($drive.DeviceID -replace 'Disk #', ''): $($drive.Model), Partitions: $partitionCount, Filesystem Types: $fsTypeString"
- }
- # Display all drives with index numbers and their partition types
- foreach ($info in $driveInfo) {
- if ($info -match "ext4") {
- Write-Host $info -ForegroundColor Red # Highlight ext4 drives in red
- } else {
- Write-Host $info # Default color for other drives
- }
- }
- # Prompt user to select a drive
- $driveIndex = Read-Host "Enter the drive index of the disk you want to mount (e.g., 0)"
- $driveToMount = $drives[$driveIndex]
- # Mount the selected drive
- if ($driveToMount) {
- $drivePath = "\\.\PHYSICALDRIVE$($driveIndex)"
- wsl.exe --mount $drivePath --bare
- Write-Host "Mounted $drivePath in WSL. Check with 'lsblk' in WSL."
- # Check for additional partitions
- $partitions = Get-CimInstance -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='$($driveToMount.DeviceID)'} WHERE AssocClass=Win32_DiskDriveToDiskPartition"
- if ($partitions.Count -gt 1) {
- for ($j = 1; $j -lt $partitions.Count; $j++) {
- $partitionDevice = "\\.\PHYSICALDRIVE$($driveIndex)$j"
- wsl.exe --mount $partitionDevice --bare
- Write-Host "Mounted additional partition $partitionDevice in WSL."
- }
- }
- # Note for unmounting
- Write-Host "To unmount, run: wsl --unmount $drivePath"
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement