$objShell = New-Object -Com Shell.Application
$objFolder = $objShell.Namespace(0xA)
Remove-Item ($objFolder.items() | select path | where-object { $_.path -like "C:\*" }).path -Recurse -Confirm:$false
我只想使用C:\路径,并将其从回收站中删除。但是我想不使用{}来做。因为您会知道对象需要大括号。如果还有其他方法,请告诉我。
我使用Powershell版本4,并且我只喜欢较低版本的代码。
提前致谢。
最佳答案
Mathias R. Jessen's helpful answer通过演示简化的Where-Object
语法(一种称为comparison statement的PSv3 +功能)来直接回答您的问题。
但是,在您的情况下,您可以完全绕过Where-Object
,并将-like
运算符直接应用于$objFolder.items()
返回的项的(已转换)枚举:
使用 PSv2 + 语法:
Remove-Item (
@($objFolder.items() | Select-Object -ExpandProperty Path) -like 'C:\*'
) -Recurse -Confirm:$false
请注意,
@()
的使用可确保-like
作用于数组值的LHS,因此充当元素过滤器。-ExpandProperty
确保返回.Path
属性值,而不是具有.Path
属性的自定义对象。在 PSv3 + 中,您可以使用成员枚举简化和加快命令的执行速度,这意味着在集合级别访问属性以返回集合元素的属性值:
Remove-Item (
@(@($objFolder.items()).Path) -like 'C:\*'
) -Recurse -Confirm:$false
请注意,仅在
@(...)
周围需要内部$objFolder.items()
,因为$objFolder
是一个COM对象,其属性与PowerShell中的常规.NET集合不同。在这种情况下,@(...)
强制枚举。
关于powershell - 如何在不使用花括号的情况下运行此powershell命令{},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50125068/