powershell - 如何在不使用花括号的情况下运行此powershell命令{}

标签 powershell recycle-bin

enter image description here

$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/

相关文章:

smartgit - 我在哪里可以找到 SmartGit 垃圾桶?

.net - 如何使用 Windows API 代码包检索存储在回收站中的项目的 'Deletion Date' 属性?

excel - 如何使用powershell将行添加到带有公式的excel文档

powershell - 如何确定 Windows 终端是否正在执行我的 PowerShell 脚本?

powershell - IF 语句错误

PowerShell 获取文件夹的已删除文件

c# - 如何从 C# 中的 Windows 服务应用程序清空所有用户的回收站

json - ConvertFrom-Json PowerShell Cmdlet 不解析整个 JSON 对象

powershell - 将 Unix1Liner 转换为 PowerShell

powershell - 如何使用 PowerShell 将文件移至回收站?