Powershell Выбрать расширенное свойство и пользовательское выражение - PullRequest
0 голосов
/ 26 июня 2019

Я хочу получить содержимое первого значения определенного столбца, используя вывод 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 ]

1 голос
/ 26 июня 2019

Этого можно добиться с помощью хеш-таблицы свойств 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
0 голосов
/ 26 июня 2019

это немного другой способ делать вещи.[ ухмылка ] раздел #region >>> create a file to work with можно игнорировать - он предназначен для предоставления файла данных, который вы не предоставили.

он получает информацию EffectiveDate, используя способ, которым PoSh может адресовать одно свойство всей коллекции, а затем извлекать 1-й элемент из полученного массива.

это также позволяет избежать часто вводящих в заблуждение побочных эффектов, допускающих использование пробелов или других специальных разделов в именах свойств с использованием 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
0 голосов
/ 26 июня 2019

Я удивлен, что нет PSPath или чего-то еще.

import-csv $file -delimiter ',' | 
select 'Effective Date', @{n='Filename';e={split-path -leaf $file}} -first 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...