我正在编辑一个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盘?
答案 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") }