#string #powershell #string-parsing
#строка #powershell #синтаксический анализ строк
Вопрос:
Я пытаюсь преобразовать данные из cli в объект powershell с помощью ConvertFrom-String, однако, когда я делаю это, десятичные числа автоматически анализируются как даты (как показано в столбце P4 ниже). Как мне это предотвратить?
plesk bin php_handler --list | ConvertFrom-String | select P2,P4,P11 | where{$_.P11 -like 'enabled'}
P2 P4 P11
-- -- ---
fastcgi-5 5/2/2017 12:00:00 AM enabled
fastcgi-5.3 5/3/2029 12:00:00 AM enabled
fastcgi-5.4 5/4/1945 12:00:00 AM enabled
fastcgi-5.5 5/5/1938 12:00:00 AM enabled
fastcgi-5.6 5/6/1940 12:00:00 AM enabled
fastcgi-7.0 7.0.33 enabled
fastcgi-7.1 7/1/1930 12:00:00 AM enabled
isapi-5 5/2/2017 12:00:00 AM enabled
Комментарии:
1. Трудно быть точным, не зная, как выглядит ввод, но вы можете использовать шаблон с аннотациями, чтобы указать, к какому типу данных относится каждое свойство: learn.microsoft.com/en-us/powershell/module /…
Ответ №1:
Вам нужно будет либо использовать шаблон, либо манипулировать свойством с помощью вычисляемого свойства, если вы собираетесь использовать ConvertFrom-String
:
Использование вычисляемого свойства:
plesk bin php_handler --list | ConvertFrom-String |
Select-Object P2,@{n='P4';e={if ($_.P4 -is [datetime]) { $_.P4.ToString('M.d.yyyy')} else {$_.P4}}},P11 |
Where P11 -eq 'enabled'
Вы можете использовать другой подход и вместо этого использовать Foreach-Object
с пользовательскими свойствами:
plesk bin php_handler --list | Where {$data = -split $_; $data[10] -eq 'enabled'} |
Foreach-Object { [pscustomobject]@{P1=$data[0];P4=$data[3];P11=$data[10]} }
Вы могли бы создать свою собственную функцию, которая предоставила бы вам практически неограниченные возможности настройки:
function ConvertTo-MyObject {
param([parameter(ValueFromPipeline)]$InputObject)
process {
$i = 1
$hash = [ordered]@{}
-split $input | Foreach-Object { $hash[$("P" $i )] = $_ }
[pscustomobject]$hash
}
}
plesk bin php_handler --list | ConvertTo-MyObject |
Where P11 -eq 'enabled' | Select P2,P4,P11