Я пытаюсь заставить Powershell перечислять файлы в каталоге, которые старше определенной даты и соответствуют определенному пользователю. На данный момент у меня есть скрипт ниже, который дает мне все файлы старше определенной даты, перечисляет каталог и кому он принадлежит:

$date=get-date

$age=$date.AddDays(-30)

ls '\\server\share\folder' -File -Recurse | `
where {$_.lastwritetime -lt "$age"} | `
select-object $_.fullname,{(Get-ACL $_.FullName).Owner} | `
ft -AutoSize

Тем не менее, когда я пытаюсь использовать дополнительный параметр where для выбора только файлов, принадлежащих определенному пользователю, я не получаю никаких результатов, хотя знаю, что должен, исходя из соответствия, которое пытаюсь получить (как показано ниже):

$date=get-date

$age=$date.AddDays(-30)

ls '\\server\share\folder' -File -Recurse | `
where ({$_.lastwritetime -lt "$age"} -and {{(get-acl $_.FullName).owner} -eq "domain\user"}) | `
select-object $_.fullname,{(Get-ACL $_.FullName).Owner} | `
ft -AutoSize

Я что-то пропустил? Могу ли я не использовать команду get-acl в условии where, как я пытался?

Любая помощь будет оценена.

Спасибо

1 ответ1

0

Это похоже на работу.

# Get the full list of files
ls '\\server\share\folder' -File -Recurse |
# Limit to files with the right age and owner
where {($_.lastwritetime -lt "$age") -and ((get-acl $_.FullName).owner -eq "domain\user")} |
# Add an Owner column to the object
ForEach-Object {$_ | Add-Member -type NoteProperty -name Owner -value (Get-ACL $_.FullName).Owner -PassThru} |
# Get just the filename and the owner
select-object fullname, owner |
# Format the output
ft -AutoSize

Также пара советов.

  • Вы использовали escape-символ в конце каждой строки. Символ «труба» позволит вам перенести на следующую строку, поэтому не было необходимости в побеге.
  • Кроме того, Where-Object использует { и } для определения блока скрипта. Группировка условий внутри блока скрипта может быть выполнена с помощью ( и ) .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .