【问题标题】:Powershell convertfrom-string automatically parses decimal to dates. How do I prevent this?Powershell convertfrom-string 自动将十进制解析为日期。我该如何防止这种情况?
【发布时间】:2020-09-17 11:27:11
【问题描述】:

我尝试使用 ConvertFrom-String 将数据从 cli 转换为 powershell 对象,但是当我这样做时,十进制数字会自动解析为日期(如下面的 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

【问题讨论】:

标签: string powershell string-parsing


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多