Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Вопрос по времени

Ответить
Настройки темы
PowerShell - [решено] Вопрос по времени

Пользователь


Сообщения: 93
Благодарности: 1

Профиль | Отправить PM | Цитировать


Я чего-то не понял. Почему вот это работает (не выходит ничего):
Код: Выделить весь код
ls|where lastwritetime -gt 01.01.2016
а вот это нет (выходит все):
Код: Выделить весь код
ls|where {$_.lastwritetime -gt 01.01.2016}

Отправлено: 15:10, 06-11-2015

 

Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


AstalaWinda, На календаре пока еще 2015... Машина времени в действии. Плюс ко всему в первом примере синтаксис, который не будет работать в версиях ниже 4.0:
Код: Выделить весь код
gci | where { $_.lastwritetime -gt [datetime]::parseexact('01.01.2016',"dd.MM.yyyy",$null) }
gci | where { $_.lastwritetime -gt (get-date '01.01.2016') }

Последний раз редактировалось Foreigner, 06-11-2015 в 15:52.


Отправлено: 15:40, 06-11-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


PSv2 :
Код: Выделить весь код
PS > ls|where lastwritetime -gt 01.01.2016
where : Cannot bind parameter 'FilterScript'. Cannot convert the "lastwritetime" value of type "System.String" to type
"System.Management.Automation.ScriptBlock".
At line:1 char:9
+ ls|where <<<<  lastwritetime -gt 01.01.2016
    + CategoryInfo          : InvalidArgument: (:) [Where-Object], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.WhereObjectCommand

PS > ls|where {$_.lastwritetime -gt 01.01.2016}
.2016 : Unexpected token '.2016' in expression or statement.
    + CategoryInfo          : ParserError: (.2016:String) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

PS > 01.01.2016
.2016 : Unexpected token '.2016' in expression or statement.
    + CategoryInfo          : ParserError: (.2016:String) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken
PSv3+:

ls|where lastwritetime -gt 01.01.2016 парсится как:

BIND arg [lastwritetime] to param [Property] SUCCESSFUL
BIND arg [True] to parameter [GT]
BIND arg [01.01.2016] to param [Value] SUCCESSFUL
Parse result: 01.01.2016 0:00:00

Значение 01.01.2016 преобразуется в тип [datetime], т.е. в тип объекта, который находится Property.

Код: Выделить весь код
PS > [datetime]"01.01.2016"

1 января 2016 г. 0:00:00
Теперь, что получается если ввести:

Код: Выделить весь код
PS > 01.01.2016
PS >
PS > 01.01.2016 -eq $null
True
Поэтому код отрабатывает без проблем, т.к. gt всегда больше $null. Добавим к типу double,чтобы при вызове свойства 2016 выводил сообщение:

Код: Выделить весь код
PS C> Update-TypeData -TypeName system.double -MemberName 2016 -MemberType scriptproperty -Value {"CHECK IT"}
PS > 01.01.2016
CHECK IT
Установим StrictMode:

Код: Выделить весь код
PS > Set-StrictMode -Version Latest
PS > 01.01.2016
Не удается найти свойство "2016" для этого объекта. Убедитесь, что оно существует.

PS > ls|where {$_.lastwritetime -gt 01.01.2016}
Не удается найти свойство "2016" для этого объекта. Убедитесь, что оно существует.
строка:1 знак:11
+ ls|where {$_.lastwritetime -gt 01.01.2016}
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], PropertyNotFoundException
    + FullyQualifiedErrorId : PropertyNotFoundStrict

Последний раз редактировалось Kazun, 06-11-2015 в 15:53.


Отправлено: 15:43, 06-11-2015 | #3


Пользователь


Сообщения: 93
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Kazun:
Поэтому код отрабатывает без проблем »
Ошибаетесь. Если заменить, например, 2016 на 2015, то можно получить кое-какой список файлов, и они все будут удовлетворять условию. Если это важно, то у меня вин 8,1 апдейт 1.
Foreigner,
правильно ли я понял, что чтобы пшел всегда нормально воспринимал тип дата-время, нужно выбрать один из вариантов?
Код: Выделить весь код
get-date 10.02.2014
[datetime]"01.01.2015"

Отправлено: 16:12, 06-11-2015 | #4


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


AstalaWinda, Или
Код: Выделить весь код
get-date '10.02.2014'
или
Код: Выделить весь код
[datetime]::parseexact('10.02.2014','dd.MM.yyyy',$null)
или
Код: Выделить весь код
[datetime] '02/10/2014'
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:24, 06-11-2015 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Вопрос по времени

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Система - Один из компов сети не синхронизируется по времени с сервером времени goodhash72 Программное обеспечение Windows 3 29-10-2013 16:14
2008 R2 - Домен, синхронизация времени с раб. станциями и вопрос по принтерам santey007 Windows Server 2008/2008 R2 5 11-06-2013 11:29
VBS/WSH/JS - Отправка по почте последнего файла .log, созданного по дате и времени alex_frog Скриптовые языки администрирования Windows 0 03-02-2013 17:32
[решено] Ограничение использования "горячих кнопок" по времени... Очень интересный вопрос... sashadeg AutoIt 3 24-03-2009 10:38
Ограничение доступа по времени Guest Microsoft Windows 95/98/Me (архив) 2 22-01-2003 17:02




 
Переход