Import-CSV
将逗号分隔值 (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 |
默认值 |
逗号 |
是否接受管道输入? |
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 文件导入对象。