2014-02-14 230 views
0

我正在編寫一個腳本來自動將文件備份到USB閃存。並非所有記憶棒都具有相同的驅動器ID。該腳本搜索驅動器E :, F :, G:和H:的路徑,並報告如果沒有連接閃存驅動器,則無法找到驅動器。如果隨後連接了閃存驅動器,則測試仍會返回False。即使驅動器存在,powershell test-path也會返回false

試試這個。插入一個USB記憶棒,稱爲驅動器E:,從Powershell控制檯進出,並測試到E:的路徑。它返回True。現在移除記憶棒並測試驅動器E的路徑,並按預期返回False。現在重新插入USB記憶棒並重複測試路徑E:cmdlet並返回False。爲什麼?

回答

0

對於我來說它的工作原理,

Test-Path d:\ 

返回true,它只是需要一些時間。

當卷出現您可以使用它來接收事件:

$query = "SELECT * FROM Win32_VolumeChangeEvent" 
Register-WMIEvent -Query $query -Action {$global:a=$Args[0];$global:b=$Args[1];$global:c=$event;write-host "done"} 
# Now plug your stick 
# Then have a look to : 
$b.NewEvent 
__GENUS    : 2 
__CLASS    : Win32_VolumeChangeEvent 
__SUPERCLASS  : Win32_DeviceChangeEvent 
__DYNASTY   : __SystemClass 
__RELPATH   : 
__PROPERTY_COUNT : 4 
__DERIVATION  : {Win32_DeviceChangeEvent, __ExtrinsicEvent, __Event, __IndicationRelated...} 
__SERVER   : 
__NAMESPACE   : 
__PATH    : 
DriveName   : D: 
EventType   : 2 
SECURITY_DESCRIPTOR : 
TIME_CREATED  : 130368370362465996 
PSComputerName  : 

# Now unplug your stick 
# Then have a look to : 
$b.NewEvent 
__GENUS    : 2 
__CLASS    : Win32_VolumeChangeEvent 
__SUPERCLASS  : Win32_DeviceChangeEvent 
__DYNASTY   : __SystemClass 
__RELPATH   : 
__PROPERTY_COUNT : 4 
__DERIVATION  : {Win32_DeviceChangeEvent, __ExtrinsicEvent, __Event, __IndicationRelated...} 
__SERVER   : 
__NAMESPACE   : 
__PATH    : 
DriveName   : D: 
EventType   : 3 
SECURITY_DESCRIPTOR : 
TIME_CREATED  : 130368373636563263 
PSComputerName  : 
+0

謝謝您的答覆。我必須在我使用的PowerShell版本(3.5)和操作系統(Windows 7)之間有一些不兼容性。你使用的是什麼版本的Powershell和Windows? – user3309111

+0

我在PowerShell 3.0和PowerShell 4.0上測試它(不知道PowerShell 3.5)。你的麻煩可能來自電腦的USB驅動程序,你可以嘗試另一個。 – JPBlanc

相關問題