ตรวจจับการติดตั้งไดรฟ์ข้อมูลเสมือน (TrueCrypt) ในสคริปต์ PowerShell ของ Windows


3

ฉันใช้สคริปต์ PowerShell ต่อไปนี้เพื่อตรวจสอบเมื่อมีการติดตั้งไดรฟ์ข้อมูลเฉพาะเพื่อให้ฉันสามารถเรียกใช้สคริปต์ที่จะย้ายไฟล์จากเครื่องของฉันไปยังอุปกรณ์ (ฉันไม่ทราบมากเกี่ยวกับสคริปต์ PowerShell ฉันพบออนไลน์)

#Requires -version 2.0
Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange
write-host (get-date -format s) "     Beginning script..."
do{
  $newEvent = Wait-Event -SourceIdentifier volumeChange
  $eventType = $newEvent.SourceEventArgs.NewEvent.EventType
  $eventTypeName = switch($eventType)
    {
    1 {"Configuration changed"}
    2 {"Device arrival"}
    3 {"Device removal"}
    4 {"docking"}
    }
  write-host (get-date -format s) "     Event detected = " $eventTypeName
  if ($eventType -eq 2)
  {
    $driveLetter = $newEvent.SourceEventArgs.NewEvent.DriveName
    $driveLabel = ([wmi]"Win32_LogicalDisk='$driveLetter'").VolumeName
    write-host (get-date -format s) "     Drive name = " $driveLetter
    write-host (get-date -format s) "     Drive label = " $driveLabel
    # Execute process if drive matches specified condition(s)
    if ($driveLetter -eq 'G:' -and $driveLabel -eq 'My Book')
    {
        write-host (get-date -format s) "     Starting task in 5 seconds..."
     start-sleep -seconds 5
        start-process "F:\copy_backups.bat"
    }
  }
  Remove-Event -SourceIdentifier volumeChange
} while (1-eq1) #Loop until next event
Unregister-Event -SourceIdentifier volumeChange

G เป็นฟิสิคัลภายนอก hdd และ F เป็นคอนเทนเนอร์ truecrypt ภายใน G เมื่อสคริปต์ตรวจพบว่าอุปกรณ์ถูกต้องถูกเมาท์เป็น G มันจะหลับ 5 วินาทีเพื่อให้เวลา truecrypt ในการเมานต์ F แล้วรันสคริปต์ที่พบใน F กิจกรรมการเปลี่ยนแปลงปริมาณนั้นจะถูกสร้างขึ้นเฉพาะเมื่อมีการเชื่อมต่อ / ยกเลิกการเชื่อมต่อไดรฟ์ทางกายภาพ (อย่างน้อยนั่นเป็นเพียงครั้งเดียวที่สคริปต์ได้รับเหตุการณ์) เนื่องจากการเชื่อมต่อ G และการติดตั้ง / ยกเลิกการติดตั้ง F ฉันต้องการที่จะตรวจสอบเมื่อมีการติดตั้งคอนเทนเนอร์ truecrypt โดยไม่มีอะไรเปลี่ยนแปลง สิ่งนี้จะต้องเป็นไปได้ในระดับหนึ่งเพราะ windows explorer จะอัพเดตไดรฟ์ของมันจะปรากฏขึ้นเมื่อคอนเทนเนอร์ถูกเมาท์หรือถอดออก ขอบคุณสำหรับความช่วยเหลือ


คุณกำลังพยายามที่จะรู้เมื่อมีการติดตั้งไดรฟ์ใด ๆ หรือปริมาณ TrueCrypt โดยเฉพาะ?
Robert Kerr

ฉันคิดว่าคุณน่าจะมีโชคที่ดีกว่านี้ใน stackoverflow
Robert Kerr

พฤติกรรมที่ต้องการคือการเรียกใช้สคริปต์เมื่อมีการติดตั้งไดรฟ์ข้อมูล truecrypt ที่เฉพาะเจาะจง
Matthew Patey

คำตอบ:


0

ฉันไม่เข้าใจสคริปต์ที่คุณให้มา แต่ฉันคิดว่าบิตนี้อาจเป็นประโยชน์กับคุณ ไม่เรียบร้อยเท่าการใช้ทริกเกอร์ WMI แต่ควรใช้งานได้

# The while loop in this script will naturally generate errors until F is mounted.
# This line shuts PowerShell up for awhile.
$ErrorActionPreference = 'SilentlyContinue'

# Loop the script until F is mounted.
while ($FMounted -eq $null)
{
    $FMounted = Get-PSDrive F
}

# Reset $ErrorActionPreference to default.
$ErrorActionPreference = 'Continue'

ทดสอบใน PS 3.0 บน Windows 7 Ultimate x64 ควรเข้ากันได้ค่อนข้างย้อนหลังแม้ว่า

แก้ไข: ดีการทดสอบของฉันข้างต้นเป็นบิตพื้นฐานมากขึ้นและไม่ได้ทำงาน แต่ดูเหมือนว่าสคริปต์แบบเต็มจะแตกเล็กน้อยอย่างน้อยก็ใน ISE นี่คือสิ่งที่ได้รับการทำงานสำหรับฉันในคอนโซล PowerShell

$ErrorActionPreference = 'SilentlyContinue'
$x = Get-PSDrive X
while ($x -eq $null) {$x = Get-PSDrive X};echo 'X is mounted'

คำสั่งจะหยุดทำงานอย่างถูกต้องจนกว่าฉันจะติดตั้งไดรฟ์ TrueCrypt เป็น X จากนั้นก็รันคำสั่ง echo และยกเลิก

ฉันทำให้สคริปท์ใน ISE เพิ่มขึ้นอีกเล็กน้อยและพยายามทำให้เต็ม ... ในขณะที่คุณวนลูปเหมือนคุณเพิ่มอีกหนึ่งขณะที่วนรอบเพื่อแขวนสคริปต์จนกระทั่ง X ถูกถอดออก มันทำงานครั้งเดียวเพื่อรันคำสั่ง echo เมื่อไดรฟ์ถูกติดตั้งและอีกครั้งเมื่อไม่ได้เมานท์ อย่างไรก็ตามตั้งแต่นั้นมา Get-PSDrive จากภายใน ISE จะไม่แสดง X โดยไม่คำนึงถึงสถานะที่แท้จริง

ฉันเริ่มคอนโซล PowerShell ใหม่ใน ISE และรันสคริปต์เต็มรูปแบบอีกครั้งคราวนี้เริ่มต้นด้วย X ที่ติดตั้งแล้ว ออกในขณะที่ลูปแรกสำเร็จ แต่ในขณะที่ลูปปรับอากาศ$x -ne $nullอยู่ติดแม้หลังจากไดรฟ์ของฉันถูกถอดออก การฆ่าสคริปต์และตรวจสอบGet-PSDriveพบว่าอินสแตนซ์ PowerShell ยังคงแสดง X พร้อมใช้งานแม้ว่าจะไม่ได้อยู่ที่นั่นจริงๆ

บางทีคุณอาจจะโชคดีกว่าหรือหาวิธีแก้ปัญหา โปรดแจ้งให้เราทราบหากสิ่งนี้ช่วยได้และหากคุณสามารถแก้ไขปัญหาได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.