Войти

Показать полную графическую версию : Глюк в powershell?


TrueAlex
16-02-2012, 11:02
Пишу простенький скрипт, но уже голову сломал, не понимаю откуда берутся нулевые элементы в переменной $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
Т.е вы со 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
вы не поверите, но

$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
В чего не поверю? Здесь нет "глюка" у PowerShell,он выполняет в данном случае ,что Вы ему задали.Сохранить в массив пустой объект и он и сохраняет,проблем здесь не вижу.

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

Kazun
16-02-2012, 13:50
Виноват не Microsoft,а всего лишь Ваша некомпетентность и лень.

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

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

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

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




© OSzone.net 2001-2012