使用PowerShell打开D盘

时间:2016-02-29 18:31:59

标签: powershell

我正在编辑一个PowerShell脚本(我相信2.0),它具有以下代码来打开CD驱动器:

$sh = New-Object -ComObject "Shell.Application"
$sh.Namespace(17).Items() | 
Where-Object { $_.Type -eq "CD Drive" } | 
foreach { $_.InvokeVerb("Eject") }

问题是此脚本现在在具有多个光驱的计算机上运行,​​因此它们都打开 - 我只想打开D盘。我认为将脚本更改为以下内容会起作用:

$sh = New-Object -ComObject "Shell.Application"
$sh.Namespace(17).Items() | 
Where-Object { $_.DriveID -eq "D:" } | 
foreach { $_.InvokeVerb("Eject") }

但它没有(没有打开任何驱动器)。我怎样才能打开D盘?

3 个答案:

答案 0 :(得分:1)

尝试过滤Path属性。

$sh = New-Object -ComObject "Shell.Application"
$sh.Namespace(17).Items() | Where-Object { $_.Path -eq "D:\" } | ForEach-Object { $_.InvokeVerb("Eject") }

答案 1 :(得分:1)

你遇到的问题是$ sh.Namespace(17).Items()的结果 - 至少对我而言 - 不包括名为DriveID的属性。它确实包括“路径”。试试下面的内容。

$sh = New-Object -ComObject "Shell.Application"
$sh.Namespace(17).Items() | ? {$_.Path -eq "D:\"} | % { $_.InvokeVerb("Eject") }

答案 2 :(得分:0)

我没有看到'DriveID'属性,因此Where-Object正在过滤所有对象(即没有任何内容传递给ForEach)。请尝试使用“路径”属性吗?

$sh = New-Object -ComObject "Shell.Application"
$sh.Namespace(17).Items() | 
Where-Object { $_.Path -eq "D:\" } | 
foreach { $_.InvokeVerb("Eject") }