将逗号分隔值 (CSV) 文件中的对象属性转换为原始对象的 CSV 版本。

语法

Import-CSV [[-Delimiter] <char>] [-Path] <string[]> [-Header <string[]>] [<CommonParameters>]

Import-CSV -UseCulture [-Path] <string[]> [-Header <string[]>] [<CommonParameters>]

说明

Import-CSV cmdlet 从 Export-CSV cmdlet 生成的 CSV 可变长度文件来创建对象。

可使用 Import-CSV cmdlet 的参数来指定列标题行(该行确定结果对象的属性名称)和项目分隔符,或指示 Import-CSV 使用当前区域性的列表分隔符作为项目分隔符。

Import-CSV 创建的对象是原始对象的 CSV 版本。CSV 对象的属性值是原始对象的属性值的字符串版本。对象的 CSV 版本不含任何方法。

还可使用 ConvertTo-CSV cmdlet 和 ConvertFrom-CSV cmdlet 将对象转换为 CSV 字符串(或将 CSV 字符串转换为对象)。这些 cmdlet 与 Export-CSV 和 Import-CSV cmdlet 一样,只是它们不将 CSV 字符串保存在文件中。

参数

-Delimiter <char>

指定在 CSV 文件中分隔属性值的分隔符。默认值为逗号 (,)。输入字符,例如冒号 (:)。若要指定分号 (;),请将它括在引号内。

如果指定了文件中的实际字符串分隔符之外的字符,则 Import-CSV 无法基于 CSV 字符串创建对象。相反,它将返回字符串。

是否为必需?

false

位置?

2

默认值

,

是否接受管道输入?

false

是否接受通配符?

false

-Header <string[]>

为导入的文件指定备用的列标题行。列标题确定由 Import-CSV 创建的对象的属性名称。

输入以逗号分隔的列标题列表。用引号(单引号或双引号)括起每一项。不要将标题字符串括在引号内。如果您输入的列标题比现有的列数少,其余的列将没有标题。如果您输入的标题比现有的列数多,将忽略多余的标题。

使用 Header 参数时,请从 CSV 文件中删除原始标题行。否则,Import-CSV 将基于标题行中的项创建额外对象。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-Path <string[]>

指定要导入的 CSV 文件的路径。还可以将路径通过管道传递给 Import-CSV。

是否为必需?

true

位置?

1

默认值

是否接受管道输入?

true (ByValue, ByPropertyName)

是否接受通配符?

false

-UseCulture

使用当前区域性的列表分隔符作为项目分隔符。默认值为逗号 (,)。

要查找区域性的列表分隔符,请使用下面的命令:(Get-Culture).TextInfo.ListSeparator。如果指定了除 CSV 字符串中使用的分隔符之外的字符,则 ConvertFrom-CSV 无法基于 CSV 字符串创建对象。相反,它将返回字符串。

是否为必需?

true

位置?

named

默认值

Comma

是否接受管道输入?

false

是否接受通配符?

false

<CommonParameters>

此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入

System.String

可以通过管道将包含路径的字符串传递给 Import-CSV。

输出

对象。

Import-CSV 返回 CSV 文件中的内容所描述的对象。

说明

因为导入的对象是该对象类型的 CSV 版本,所以 Windows PowerShell 类型格式化条目无法对其进行识别和格式化,而只能对该对象类型的非 CSV 版本进行格式化。

在 CSV 文件中,通过以逗号分隔的对象属性值列表来表示每个对象。将属性值转换为字符串(通过使用对象的 ToString() 方法),这样它们通常就可由属性值的名称来表示。Export-CSV 无法导出对象的方法。

示例 1

C:\PS>get-process | export-csv processes.csv

C:\PS> $p = import-CSV processes.csv

C:\PS> $p | get-member

   TypeName: CSV:System.Diagnostics.Process

Name                       MemberType   Definition
----                       ----------   ----------
Equals                     Method       System.Boolean Equals(Object obj)
GetHashCode                Method       System.Int32 GetHashCode()
GetType                    Method       System.Type GetType()
ToString                   Method       System.String ToString()
BasePriority               NoteProperty System.String BasePriority=8
Company                    NoteProperty System.String Company=Microsoft Corporation
...

C:\PS> $p | out-gridview

说明
-----------
此示例演示如何导出然后导入 Microsoft .NET Framework 对象的 CSV 文件。

第一个命令使用 Get-Process cmdlet 来获取本地计算机上的进程。它使用管道运算符 (|) 将进程对象发送到 Export-CSV cmdlet,其将进程对象导出到当前目录中的 Processes.csv 文件。

第二个命令使用 Import-CSV cmdlet 导入 Import-CSV 文件中的进程。然后它将生成的进程对象保存在 $p 变量中。

第三个命令使用管道运算符通过管道将导入的对象传递到 Get-Member cmdlet。结果显示它们是 CSV:System.Diagnostic.Process 对象,而不是 Get-Process 返回的 System.Diagnostic.Process 对象。

另外,因为格式化文件中没有对应于进程对象的 CSV 版本的条目类型,所以这些对象的格式化方法与标准进程对象的格式化方法不同。

若要显示这些对象,请使用格式化 cmdlet,如 Format-Table 和 Format-List,或通过管道将对象传递到 Out-GridView。






示例 2

C:\PS>get-process | export-csv processes.csv -Delimiter :

C:\PS> $p = import-csv processes.csv -Delimiter :

说明
-----------
此示例演示了如何使用 Import-CSV 的 Delimiter 参数。在此示例中,进程将导出到使用冒号 (:) 作为分隔符的文件。

导入时,Import-CSV 文件使用 Delimiter 参数来指示该文件中使用的分隔符。






示例 3

C:\PS>$p = import-csv processes.csv -UseCulture

C:\PS> (get-culture).textinfo.listseparator

,

说明
-----------
此示例说明如何使用 Import-CSV 的 UseCulture 参数。

第一个命令将 Processes.csv 文件中的对象导入 $p 变量中。它使用 UseCulture 参数来指示 Import-CSV 使用为当前区域性定义的列表分隔符。

第二个命令显示当前区域性的列表分隔符。它使用 Get-Culture cmdlet 来获取当前区域性。它使用点 (.)方法获取当前区域性的 TextInfo 属性以及 TextInfo 中的对象的 ListSeparator 属性。在此示例中,该命令返回逗号。






示例 4

C:\PS>start-job -scriptblock { get-process } | export-csv jobs.csv

C:\PS> $header = "MoreData","StatusMessage","Location","Command","State","Finished","InstanceId","SessionId","Name","ChildJobs","Output","Error","Progress","Verbose","Debug","Warning","StateChanged"

# Delete header from file
C:\PS> $a = (get-content jobs.csv)
C:\PS> $a = $a[0], $a[2..($a.count - 1)]
C:\PS> $a > jobs.csv

C:\PS> $j = import-csv jobs.csv -header $header

C:\PS> $j

MoreData      : True
StatusMessage :
Location      : localhost
Command       : get-process
State         : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 135bdd25-40d6-4a20-bd68-05282a59abd6
SessionId     : 1
Name          : Job1
ChildJobs     : System.Collections.Generic.List`1[System.Management.Automation.Job]
Output        : System.Management.Automation.PSDataCollection`1[System.Management.Automation.PSObject]
Error         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ErrorRecord]
Progress      : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ProgressRecord]
Verbose       : System.Management.Automation.PSDataCollection`1[System.String]
Debug         : System.Management.Automation.PSDataCollection`1[System.String]
Warning       : System.Management.Automation.PSDataCollection`1[System.String]
StateChanged  :

说明
-----------
此示例演示如何使用 Import-CSV 的 Header 参数来更改所得到的导入对象中的属性名称。

第一条命令使用 Start-Job cmdlet 启动一个后台作业,该作业在本地计算机上运行 Get-Process 命令。管道运算符 (|) 将生成的作业对象发送至 Export-CSV cmdlet,该 cmdlet 将作业对象转换为 CSV 格式。赋值运算符 (=) 将生成的 CSV 保存在 Jobs.csv 文件中。

第二条命令将标题保存在 $header 变量中。与默认标题不同,该标题使用“MoreData”和“State”,而不是“HasMoreData”和“JobStateInfo”。

接下来的三个命令从 Jobs.csv 文件中删除原始标题(第二行)。

第六个命令使用 Import-CSV cmdlet 导入 Jobs.csv 文件并将 CSV 字符串转换为作业对象的 CSV 版本。该命令使用 Header 参数提交备用标题。结果存储在 $j 变量中。

第七个命令显示 $j 变量中的对象。所得到的对象具有“MoreData”和“State”属性,如命令输出中所示。






示例 5

C:\PS>".\processes.csv" | import-csv

说明
-----------
此命令从 Processes.csv 文件导入对象。






另请参阅




目录