Não é possível obter o powershell para retornar onde os resultados do GCI usam o ACL

0

Estou tentando fazer com que o Powershell liste os arquivos em um diretório que seja mais antigo que uma determinada data e corresponda a um determinado usuário. Eu tenho o script abaixo até agora que me dá todos os arquivos mais antigos que uma determinada data e lista o diretório e quem os possui:

$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

No entanto, quando tento usar um parâmetro where adicional para selecionar apenas arquivos pertencentes a um determinado usuário, não obtenho resultados, mesmo sabendo que devo, com base na correspondência que estou tentando obter (como abaixo):

$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

Estou faltando alguma coisa? Não posso usar o comando get-acl em uma condição where como tentei?

Qualquer ajuda seria apreciada.

Obrigado

    
por Rossaluss 05.06.2014 / 10:51

1 resposta

0

Isso parece funcionar.

# 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

Além disso, algumas dicas.

  • Você usou o caractere de escape no final de cada linha. O caractere de pipe permite que você passe para a próxima linha, então não havia necessidade da fuga.
  • Além disso, Where-Object usa { e } para definir o bloco de script. As condições de agrupamento dentro do bloco de script podem ser feitas usando ( e ) .
por 05.06.2014 / 15:41