Import-Csv
берет CSV и выводит PSCustomObject
s. Он предназначен для случаев, когда в файле есть строка заголовка, и он считывает ее как свойства объектов. например
FirstName,LastName
James,Cameron
Kirk,Cobain
# ->
@{FirstName='James';LastName='Cameron'}
@{FirstName='Kirk';LastName='Cobain'}
etc.
Если в вашем файле нет строки заголовка, он займет первую строку, а затем испортит все остальное. Вам нужно указать параметр -Header 'h1','h2',...
, чтобы исправить это. Таким образом, вы могли бы использовать -Header Name
, но ваши данные имеют только одно свойство, так что особой пользы от этого нет.
ConvertFrom-Csv
предназначен для того же, но из данных CSV в переменной, а не в файле. Они не соединяются вместе с пользой. Он попытается, но в итоге вы получите...
Один объект со свойством '@{James=Kirk}'
и значением '@{James=Linda}'
, где «Джеймс» был взят из строки 1 в качестве заголовка столбца, а странный синтаксис связан с принудительным повторным преобразованием этих объектов.
Совершенно непонятно, почему вы читаете с file.txt
и добавляете к file.txt
. Но поскольку у вас нет CSV, нет никакой пользы от использования CSV-командлетов.
$lines = Get-Content file.txt
$master = Get-Content master.txt
foreach ($line in $lines)
{
if ($master -contains $line)
{
Add-Content file2.txt $line
}
}
или просто
gc file.txt |? { sls $_ master.txt -quiet } | set-content file2.txt
Автоматически сгенерированные ссылки справки PS из моего блока кода (если есть):
gc
— это псевдоним для Get-Content
(в модуле Microsoft.PowerShell.Management
)
?
— это псевдоним для Where-Object
.
sls
— это псевдоним для Select-String
(в модуле Microsoft.PowerShell.Utility
)
Set-Content
(в модуле Microsoft.PowerShell.Management
)
person
TessellatingHeckler
schedule
07.11.2016