如何 运行 这个没有大括号的 powershell 命令{}
how to run this powershell command without curly braces{}
$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,我更喜欢低版本的代码。
提前致谢。
在 PowerShell 4.0 中,Where-Object
支持基于参数的语法,因此您不需要大括号。
由于 $RecBin.Items()
返回的对象已经有一个 Path
属性,您可以将它们直接传递给 Remove-Item
:
$RecBin.Items() |Where-Object Path -like "C:\*" |Remove-Item -Recurse -Confirm:$false
directly answers your question by demonstrating simplified Where-Object
syntax (a PSv3+ feature known as a comparison statement).
但是,在您的情况下,您可以完全绕过 Where-Object
,并将 -like
运算符直接应用于 return 由 $objFolder.items()
编辑的(转换后的)项目枚举:
使用 PSv2+ 语法:
Remove-Item (
@($objFolder.items() | Select-Object -ExpandProperty Path) -like 'C:\*'
) -Recurse -Confirm:$false
请注意,使用 @()
可确保 -like
作用于 数组 值 LHS,因此充当元素 过滤器.
-ExpandProperty
确保 .Path
属性 值 是 returned 而不是带有 [=19= 的自定义对象] 属性.
在PSv3+中你可以通过使用成员访问枚举来简化和加速命令,这意味着访问一个属性 在 集合 级别,以便 return 集合 元素' 属性 值:
Remove-Item (
@(@($objFolder.items()).Path) -like 'C:\*'
) -Recurse -Confirm:$false
请注意,$objFolder.items()
周围的内部 @(...)
是必要的,因为 $objFolder
是一个 COM 对象,其属性不表现得像 PowerShell 中的常规 .NET 集合; @(...)
在这种情况下强制枚举。
$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,我更喜欢低版本的代码。 提前致谢。
在 PowerShell 4.0 中,Where-Object
支持基于参数的语法,因此您不需要大括号。
由于 $RecBin.Items()
返回的对象已经有一个 Path
属性,您可以将它们直接传递给 Remove-Item
:
$RecBin.Items() |Where-Object Path -like "C:\*" |Remove-Item -Recurse -Confirm:$false
Where-Object
syntax (a PSv3+ feature known as a comparison statement).
但是,在您的情况下,您可以完全绕过 Where-Object
,并将 -like
运算符直接应用于 return 由 $objFolder.items()
编辑的(转换后的)项目枚举:
使用 PSv2+ 语法:
Remove-Item (
@($objFolder.items() | Select-Object -ExpandProperty Path) -like 'C:\*'
) -Recurse -Confirm:$false
请注意,使用 @()
可确保 -like
作用于 数组 值 LHS,因此充当元素 过滤器.
-ExpandProperty
确保 .Path
属性 值 是 returned 而不是带有 [=19= 的自定义对象] 属性.
在PSv3+中你可以通过使用成员访问枚举来简化和加速命令,这意味着访问一个属性 在 集合 级别,以便 return 集合 元素' 属性 值:
Remove-Item (
@(@($objFolder.items()).Path) -like 'C:\*'
) -Recurse -Confirm:$false
请注意,$objFolder.items()
周围的内部 @(...)
是必要的,因为 $objFolder
是一个 COM 对象,其属性不表现得像 PowerShell 中的常规 .NET 集合; @(...)
在这种情况下强制枚举。