เราสามารถรับรายการจุดเชื่อมต่อได้จากคลาส WMI Win32_MountPoint
. ที่ให้เราทำแผนที่ระหว่างเส้นทางปริมาณและไดเรกทอรีราก จากนั้นเราสามารถหาจุดเมานท์ที่เฉพาะเจาะจงมากที่สุดสำหรับไฟล์ที่กำหนด ในที่สุดเราสามารถใช้ ID ปริมาณจากวัตถุจุดเมานท์เพื่อรับข้อมูลบางอย่างเกี่ยวกับปริมาณ นี่คือสคริปต์เต็มรูปแบบ:
param (
[string]$File
)
$fullPath = [string](Resolve-Path $File)
$bestMatch = ''
$bestMatchObj = $null
gwmi Win32_MountPoint | % {
$_.Directory -match '="(.*)"' | Out-Null
$mountDir = $matches[1].Replace('\\', '\')
If (!$mountDir.EndsWith('\')) { $mountDir = $mountDir + '\' }
If ($fullPath.StartsWith($mountDir, 'InvariantCultureIgnoreCase') -and $bestMatch.Length -lt $mountDir.Length) {
$bestMatch = $mountDir
$bestMatchObj = $_
}
}
$bestMatchObj.Volume -match '="(.*)"' | Out-Null
$volPath = $matches[1].Replace('\\', '\')
Get-Volume | ? { $_.Path -eq $volPath }
-match
-ติดตามโดย- $matches
เคล็ดลับแตกส่วนที่เกี่ยวข้องของสตริงความสัมพันธ์ WMI เราต้อง unescape แบ็กสแลชดังนั้นการแทนที่ จากนั้นเนื่องจากการกำหนดตัวอักษรไดรฟ์อย่างง่ายเท่านั้นจึงมีเครื่องหมายแบ็กสแลชในตอนท้าย Directory
มูลค่าเราต้องเพิ่มหนึ่งรายการหากไม่มีเพื่อหลีกเลี่ยงผลบวกปลอมในจุดเมานท์ที่มีชื่อคล้ายกัน
หากต้องการใช้สคริปต์ให้บันทึกเป็นไฟล์ PS1 เช่น df.ps1
. หากต้องการเปิดใช้งานการเรียกใช้สคริปต์ในระบบของคุณให้ทำตามคำแนะนำในส่วนการเปิดใช้งานสคริปต์ของ แท็ก PowerShell wiki . จากนั้นคุณสามารถเรียกใช้ดังนี้:
.\df.ps1 -File C:\some\mounted\path\doc.txt
ผลลัพธ์เป็นชนิดเดียวกับวัตถุที่ส่งคืนจากการใช้งานอื่น ๆ Get-Volume
:
DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining Size
----------- ------------ -------------- --------- ------------ ----------------- ------------- ----
<redacted> NTFS Fixed Healthy OK 1.93 GB 1.95 GB
สังเกตว่ามันไม่มี DriveLetter
เนื่องจากไฟล์นี้โดยเฉพาะในไดรฟ์ข้อมูลที่แตกต่างจากที่เก็บรากของไดรฟ์ C ของฉัน