CMD/BAT - Необходимо сделать два батника,подскажите ошибки

Аватара пользователя
DJ Mogarych

Re: CMD/BAT - Необходимо сделать два батника,подскажите ошибки

Сообщение DJ Mogarych »

Iska, про эту фишку я на прошлой неделе вычитал в книжке "PowerShell in Depth".

Where и foreach умеют быть методом, причём это работает быстрее, чем при передаче через пайп, как мы все привыкли. Сам не проверял быстродействие, но в книжке пользовались Measure-Command, разница в некоторых случаях в разы.



Правильнее, конечно, писать .where({}), но в данном случае можно и без круглых скобок.
Аватара пользователя
Iska

Re: CMD/BAT - Необходимо сделать два батника,подскажите ошибки

Сообщение Iska »

alpap, это-то я знаю. Но точка… Как это понимать? Откуда такой синтаксис вместо:



Код:

Код: Выделить всё

Get-ChildItem -Path "C:\temp" | Where-Object -FilterScript {$_.Length -gt 2MB}

Где об этом можно почитать?



DJ Mogarych, спасибо, ясно. Там были какие-то разъяснения, откуда сие взялось, и в каких случаях это «умеют» работает?



Ага. Нашёл:



Скрытый текст

[spoiler]Цитата:[/spoiler]



7.5.3 The Where method



PowerShell v4 introduced another way to filter a collection of objects. This method

isn’t well documented, nor is it easily discoverable, yet it’s relatively easy to use and

performs well. Basically, you can use Where as a method:



Код:

Код: Выделить всё

(Get-Service m*).Where{$_.status -eq "stopped"}











и т.д.
Аватара пользователя
DJ Mogarych

Re: CMD/BAT - Необходимо сделать два батника,подскажите ошибки

Сообщение DJ Mogarych »

Цитата из книжки:


Цитата:



В Powershell v4 появился новый способ фильтровать набор объектов. Этот способ как следует не задокументирован и его нелегко обнаружить, тем не менее, он относительно прост в использовании и хорошо работает.



Один из примеров:



Код:

Код: Выделить всё

(Get-Process | sort Handles).Where({$_.Handles -gt 1000}, "SkipUntil", 1)
Аватара пользователя
Iska

Re: CMD/BAT - Необходимо сделать два батника,подскажите ошибки

Сообщение Iska »

А вот и разница проклюнулась:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

 Get-ChildItem -Path "C:\Мои проекты\0282" | Where-Object -FilterScript {$_.Length -gt 2MB}
(Get-ChildItem -Path "C:\Мои проекты\0282" | Where-Object -FilterScript {$_.Length -gt 2MB}).GetType().FullName
''
 (Get-ChildItem -Path "C:\Мои проекты\0282").where({$_.Length -gt 2MB})
((Get-ChildItem -Path "C:\Мои проекты\0282").where({$_.Length -gt 2MB})).GetType().FullName


Цитата:





Код:

Код: Выделить всё

    Directory: C:\Мои проекты\0282
Mode                LastWriteTime         Length Name                                                                                                       
----                -------------         ------ ----                                                                                                       
-a----       13.03.2019     12:44        9722769 Sample 02.docx                                                                                             
-a----       13.03.2019     12:44        9722769 Sample.docx                                                                                                
System.Object[]
-a----       13.03.2019     12:44        9722769 Sample 02.docx                                                                                             
-a----       13.03.2019     12:44        9722769 Sample.docx                                                                                                
System.Collections.ObjectModel.Collection`1[[System.Management.Automation.PSObject, System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKey
Token=31bf3856ad364e35]]













DJ Mogarych, да, спасибо, уже читаю. Плюс одна из первых ссылок выдачи (в открытом доступе):
PowerShell V4: Where() and ForEach() Methods | Manning
.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»