2016-12-01 2 views
2

Я использую пару переменных, но обычно я использую объект, возвращаемый из командлета Get-ChildItem, чтобы найти файлы и использовать измененную форму оператора if.Найти определенный файл и удалить его, если существует

Но как я могу найти конкретный файл в каталогах, и если он его найдет, то удалите его? Это код, который я сделал:

$VM_NAME="Test" 
$search=Get-ChildItem -Path B:\Virtualservers\Disks\Users\* -include $VM_NAME.vhdx -filter *.vhdx -Recurse 

if ($search.Name -contains "$VM_NAME.vhdx") {remove-item ??? } 
else {write-host "Continue.."} 

ответ

3

Просто трубы ваш Get-ChildItem результат к Remove-Item командлета:

Get-ChildItem -Path B:\Virtualservers\Disks\Users\* -include $VM_NAME.vhdx -filter *.vhdx -Recurse | 
    Remove-Item -Force 

В случае, если нет файла найден, это также будет работать.

+0

Спасибо, действительно! –

1

Таким образом, вместо того, чтобы использовать оператор, если вы хотите использовать Where-Object нижнюю часть вашего кода будет что-то вроде

$search.Name | Where-Object {$_ -like "*$VM_NAME.vhdx*"} | Remove-Item 

Вы можете использовать -eq и падение «*», а не -как если $ VM_NAME.vhdx будет точно соответствовать вашим именам файлов.

+0

Разве это не так, потому что он использует командлет Get-ChildItem' с параметром '-filter' и' -include'? –

+1

Да, правильно, ответ Мартина лучше. –

0

удалить-пункт есть эти опции, просто сделать это

$VM_NAME="Test" 
remove-item B:\Virtualservers\Disks\Users\* -Recurse -include "$VM_NAME.vhdx" 
Смежные вопросы