Powershell选择扩展属性和自定义表达式

时间:2019-06-26 17:09:00

标签: powershell

我想使用Import-Csv输出作为文件名称旁边的表格来获取特定列的第一个值的内容。

我可以做到:

$File = '\\webserver\Data_20190626.csv'

Import-Csv -Path $File -Delimiter ',' | select 'Effective Date' -First 1

这给了我我期望的输出:

Effective Date
--------------
25-May-2019

我想看的是:

Effective Date     FileName
--------------     ---------
25-May-2019        Data_20190626.csv

我已经尝试过了:

$File = '\\webserver\Data_20190626.csv'

Import-Csv -Path $File -Delimiter ',' | select 'Effective Date', @{N='FileName';E={$_.Name}} -First 1

导致的结果:

Effective Date     FileName
--------------     ---------
25-May-2019        

我应该如何进行?

3 个答案:

答案 0 :(得分:1)

您可以使用Select-Object的属性哈希表,并使用\方法将文件路径按.Split()进行拆分。 [-1]表示分割结果中的最后一项。

$File = '\\webserver\Data_20190626.csv'

Import-Csv -Path $File |
    Select-Object 'Effective Date',@{n='FileName';e={$File.Split('\')[-1]}} -First 1

答案 1 :(得分:0)

我很惊讶没有PSPath之类的东西。

import-csv $file -delimiter ',' | 
select 'Effective Date', @{n='Filename';e={split-path -leaf $file}} -first 1

答案 2 :(得分:0)

这是一种稍微不同的处理方式。 [ grin ] #region >>> create a file to work with部分可以忽略-它是提供您未提供的数据文件的地方。

它使用PoSh可以点寻址整个集合的一个属性,然后从结果数组中获取第一项的方式来获取EffectiveDate信息。

通过使用EffectiveDate而不是Effective Date,还避免了在属性名称中允许使用空格或其他特殊字符的通常令人困惑的副作用。如果您需要继续使用贫乏的嵌入式空间,请根据需要更改该字符串。

$File = "$env:TEMP\Data_20190626.csv"

#region >>> create a file to work with
@'
EffectiveDate
2019-06-25
2006-06-06
2005-05-05
'@ |
    ConvertFrom-Csv |
    Export-Csv -LiteralPath $File -NoTypeInformation
#endregion >>> create a file to work with

$Results = [PSCustomObject]@{
    EffectiveDate = (Import-Csv -LiteralPath $File).EffectiveDate[0]
    FileName = $File
    }

$Results

输出...

EffectiveDate FileName
------------- --------
2019-06-25    C:\Temp\Data_20190626.csv