В powershell $ x.FullName не возвращается полный путь - PullRequest
5 голосов
/ 18 марта 2011

У меня есть скрипт powershell, который берет файл конфигурации и удаляет файлы старше x дней, соответствующие регулярному выражению.

Файл конфигурации:

path,pattern,days,testrun
C:\logs\,^data_access_listener.log,7,false

Однако вот что выводится:

Would have deleted 000a19f6-a982-4f77-88be-ca9cc51a2bcbuu_data_access_listener.log
Would have deleted 00189746-2d46-4cdd-a5bb-6fed4bee25a7uu_data_access_listener.log

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

Would have deleted C:\logs\000a19f6-a982-4f77-88be-ca9cc51a2bcbuu_data_access_listener.log
Would have deleted C:\logs\00189746-2d46-4cdd-a5bb-6fed4bee25a7uu_data_access_listener.log

Если я использую $ x.FullName, почему я не получаю полное имя с путем (C: \ logs)?

Спасибо, Брэд

$LogFile = "C:\deletefiles.log"
$Config = import-csv -path C:\config.txt

function DeleteFiles ([string]$path, [string]$pattern, [int]$days, [string]$testrun){
    $a =  Get-ChildItem $path -recurse | where-object {$_.Name -notmatch $pattern}    
    foreach($x in $a) {
    $y = ((Get-Date) - $x.LastWriteTime).Days
        if ($y -gt $days -and $x.PsISContainer -ne $True) {

            if ($testrun -eq "false") {
                write-output “Deleted" $x.FullName >>$LogFile 
            } else {
                write-output “Would have deleted $x” >>$LogFile 
            }


        }
    }
}

foreach ($line in $Config) {
    $path = $line.path
    $pattern = $line.pattern
    $days = $line.days
    $testrun = $line.testrun

    DeleteFiles $path $pattern $days
}

1 Ответ

8 голосов
/ 18 марта 2011

Похоже на опечатку.Вы не используете FullName в условии, которое приводит к «Удален».Измените:

write-output “Would have deleted $x” >>$LogFile

на:

write-output “Would have deleted " $x.FullName >>$LogFile

Чтобы ответить на ваш комментарий, если вы хотите вызвать свойство для переменной, раскрытой в строке, вы должны заключить его в$(), чтобы синтаксический анализатор мог вызывать все выражение.Как это:

write-output “Would have deleted $($x.FullName)" >>$LogFile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...