Я хочу удалить все после запятой в поле описания, поэтому Текст2 и Текст3. Кто-нибудь знает, как я могу это сделать? Я что-то слышал о регулярном выражении, но не знаю, как его использовать в этом случае.
$time = (Get-Date).Adddays(-(1))
$Result = Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -Properties * | Select-Object Name,Description, @{N='LastLogonTimeStamp'; E = {[DateTime]::FromFileTime($_.LastLogonTimeStamp)}}
$Result | Format-Table
Name Description LastLogonTimeStamp
---- ----------- ------------------
SRV-TEST Text1, Text2, Text3 10-1-2019 09:45:00
Попробуй это:
$time = (Get-Date).Adddays(-(1))
$Result = Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -Properties * | Select-Object Name, @{N='Description'; E = {$_.Description -replace ',.*$','' }}, @{N='LastLogonTimeStamp'; E = {[DateTime]::FromFileTime($_.LastLogonTimeStamp)}}
$Result | Format-Table
Для меня он возвращает:
Name Description LastLogonTimeStamp
---- ----------- ------------------
SRV-TEST Text1 10-1-2019 09:45:00
да, это работает, это решение, которое я искал, спасибо.
Пожалуйста, отметьте мой пост как ответ, если он полезен. Хорошего дня!
Согласно предложению использовать -split в комментариях, это вернет 1-ю строку в массиве после разделения на «,».
$time = (Get-Date).Adddays(-(1))
$Result = Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -Properties * | Select-Object Name, @{N='Description'; E = {($_.Description -split ",")[0]}}, @{N='LastLogonTimeStamp'; E = {[DateTime]::FromFileTime($_.LastLogonTimeStamp)}}
$Result | Format-Table
Почему вы делаете массив из строки, а затем получаете 1-й элемент из массива? Это не лучший способ использовать память и процессор. Вы выполняете 2 действия вместо 1 и используете в 3 раза больше памяти, чем требуется. Я понимаю, что в одной команде не так уж и здорово, но если у ТС 10 000+ ПК в AD - будет медленно. Итак, почему большинство программ слишком медленные на наших ПК :-)
О, верните мои миры! О_о Я протестировал его на своем AD с ~10 000 объектов ПК. И получите кое-что интересное: Measure-Command -Expression { with SPLIT} занимает TotalSeconds : 73,5386477 И Measure-Command -Expression {REPLACE} занимает TotalMilliseconds : 73376,0549 Таким образом, 2 действия занимают то же время, что и регулярное выражение.
И действия: $time = (Get-Date).Adddays(-(1)) $Result = Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -Properties * | Select-Object Name,Description,LastLogonTimeStamp TAKES TotalSeconds: 63,8330494. SO около 10 секунд используется для преобразования данных.
что ты уже испробовал? Какие конкретно ошибки вы получаете?