Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Глюк в powershell? (http://forum.oszone.net/showthread.php?t=227978)

TrueAlex 16-02-2012 11:02 1859975

Глюк в powershell?
 
Пишу простенький скрипт, но уже голову сломал, не понимаю откуда берутся нулевые элементы в переменной $paths
Часть кода
Код:

$drives = [system.IO.driveinfo]::GetDrives()
$paths = @()
foreach ($drive in $drives){
        if ($drive.DriveType -eq "Fixed" -and $drive.Name -ne "N:\"){
                $paths += Get-ChildItem $drive -filter zzz
        }
}

Т.е. в $paths должны попасть все файлы и папки на дисках по фильтру zzz - по факту попадает то что попадает под фильтр и какой-то нулевой элемент. В данном примере под фильтр вообще ничего не должно попасть, однако $paths.length возвращает 2. Просто $paths[0] ничего не выводит. Не понимаю в чем дело :(

Код:

PS N:\Ariadna> $paths.length
2

PS N:\Ariadna> $paths[0]

PS N:\Ariadna> $paths[1]

PS N:\Ariadna> $paths[0] -eq $NULL
True

PS N:\Ariadna> $paths[1] -eq $NULL
True

PS N:\Ariadna> $paths[2] -eq $NULL
True


Kazun 16-02-2012 12:27 1860035

Т.е вы со 100% заверяете,что на каждом диске у вас есть файлы,которые попадают под шаблон?

$paths = @()
$paths += Get-ChildItem C:\ -Filter "TakogoFiltraNet"
$paths += Get-ChildItem C:\ -Filter "ITakogoFiltraTogeNEt"

Код:

PS >  $paths.count
2
PS >  $paths[0]
PS >  $paths[0] -eq $null
True

$paths = [system.IO.driveinfo]::GetDrives() | where {$_.DriveType -eq "Fixed" and $_.Name -ne "N:\"} | Get-ChildItem -Filter zzz

TrueAlex 16-02-2012 12:37 1860047

вы не поверите, но
Код:

$paths = @()
$paths += Get-ChildItem C:\ -Filter "TakogoFiltraNet"
$paths += Get-ChildItem C:\ -Filter "ITakogoFiltraTogeNEt"

PS C:\Users\truealex> $paths.length
2

PS C:\Users\truealex> $paths[0]

PS C:\Users\truealex> $paths[1]

PS C:\Users\truealex> $paths.count
2

я в шоке :(

Код:

$paths = @()

$paths +=Get-ChildItem C:\

$paths

    Каталог: C:\


Mode                LastWriteTime    Length Name                                                                                                                                                                               
----                -------------    ------ ----                                                                                                                                                                               
d----        01.02.2011    15:22            app                                                                                                                                                                                 
d----        13.04.2011    13:59            avn_clb                                                                                                                                                                             
d----        09.01.2012    17:36            Intel                                                                                                                                                                               
d----        14.07.2009      7:20            PerfLogs                                                                                                                                                                           
d-r--        30.01.2012    11:49            Program Files                                                                                                                                                                       
d-r--        30.01.2012    11:51            Program Files (x86)                                                                                                                                                                 
d-r--        06.02.2012    17:57            Users                                                                                                                                                                               
d----        13.02.2012    19:03            Windows                                                                                                                                                                             
-a---        10.01.2012    17:06        149 ElsoftOffice.log                                                                                                                                                                   


$paths.count
9


Kazun 16-02-2012 12:46 1860056

В чего не поверю? Здесь нет "глюка" у PowerShell,он выполняет в данном случае ,что Вы ему задали.Сохранить в массив пустой объект и он и сохраняет,проблем здесь не вижу.

TrueAlex 16-02-2012 13:30 1860081

эээ, т.е. хотите сказать, что вот так "$paths += Get-ChildItem C:\ -Filter "TakogoFiltraNet"" он сохранит пустой объект? Да уж.... микрософт впереди планеты всей :) А можно ли этого избежать и, собственно, получить то что хотелось, а именно, список который совпадает с фильтром?

Kazun 16-02-2012 13:50 1860096

Виноват не Microsoft,а всего лишь Ваша некомпетентность и лень.

Выше я уже приводил команду,но вы же не читаете полностью,что Вам пишут.

$paths = [system.IO.driveinfo]::GetDrives() | where {$_.DriveType -eq "Fixed" -and $_.Name -ne "N:\"} | Get-ChildItem -Filter zzz

TrueAlex 16-02-2012 14:16 1860123

Этот код, судя по всему, вы добавили уже позже, редактируя свое сообщение, т.к. я его действительно сначала не заметил.

PS: я сюда за помощью обратился, хотите помочь - помогайте, а не хотите - молчите, ваши рассуждения по поводу моей некомпететности и лени считаю оскорблением.


Время: 11:45.

Время: 11:45.
© OSzone.net 2001-