Как запустить эту команду powershell без фигурных скобок {}

Как запустить эту команду powershell без фигурных скобок {}

$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 и предпочитаю код только для более низких версий. Заранее спасибо.

Where-Object path -like "C:\*" работает.
S. Dev 02.05.2018 01:22

Спасибо за быстрый ответ. но я получаю эту ошибку. Невозможно преобразовать значение "пути" типа 'System.String' в тип "System.Management.Automation.ScriptBlock"

Siva Thilak 02.05.2018 01:25

@SivaThilak: Совет С.Дева должен работать в PSv3 +. Ваше сообщение об ошибке предполагает, что вы используете v2, а не v4.

mklement0 02.05.2018 14:31

Совет для пользователей PSv5 +: Clear-RecycleBin -Drive C:

mklement0 02.05.2018 14:31
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
280
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В PowerShell 4.0 Where-Object поддерживает синтаксис на основе параметров, поэтому фигурные скобки не нужны.

Поскольку объекты, возвращаемые $RecBin.Items(), уже имеют свойство Path, вы можете передать их напрямую в Remove-Item:

$RecBin.Items() |Where-Object Path -like "C:\*" |Remove-Item -Recurse -Confirm:$false
Ответ принят как подходящий

Полезный ответ Матиаса Р. Джессена напрямую отвечает на ваш вопрос, демонстрируя упрощенный синтаксис Where-Object (функция 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, свойства которого не похожи на обычные коллекции .NET в PowerShell; @(...) в этом случае принудительно выполняет перечисление.

Другие вопросы по теме