Читая, что вы получаете в сообщении об ошибке, я думаю, что ваш CSV-файл - правильный csv с заголовками, и поле, которое вы ищете, - это имя пользователя SamAccountName, указанное в заголовке USER
. Примерно так:
"USER","MaybeThereIsMoreInfo"
"jdough","Nothing worth mentioning here"
"huzzle","Interesting info"
Если изменить верхнюю строку вашего кода на
$csv = Import-Csv "\\Server\Name\User_Base_test.csv" | Select-Object -ExpandProperty USER
, вы получите $csv
переменную, содержащую строковый массив только пользователя SamAccountNames вместо объектовсо свойством USER
.
Что касается остальной части кода, вы, вероятно, захотите проверить файлы на наличие LastWriteTime старше 30 дней (полуночи) назад, поэтому я бы посоветовал создать ссылкупоставьте дату над циклом foreach
и сравните с этим вместо того, чтобы вычислять это для каждого файла снова и снова:
# test for files older than 30 days midnight
$refDate = (Get-Date).AddDays(-30).Date
foreach ($user in $csv) {
Get-ChildItem "C:\Users\$user\AppData\Roaming\Zultys\MX Settings\$user.vm\Voice Messages\Deleted" -File -Recurse |
Where-Object {($_.LastWriteTime -lt $refDate)} |
Remove-Item -WhatIf
}
Как вы можете видеть, я добавил переключатель -File
к Get-ChildItem
Командлет, чтобы функция возвращала только объекты FileInfo, а не DirectoryInfo.
A также добавил переключатель -WhatIf
к окончательному Remove-Item
, чтобы вы могли сначала протестировать и, если вас устраивает информация, отображаемая в WhatIf. консоли, удалите этот переключатель, чтобы фактически начать удаление файлов.