我有一些PowerShell Cmdlet的输出,如下所示
0 server-1 Content Damaged client 12/06/2013 08:00:41
123 server-1 Content Damaged client 12/07/2013 08:00:33
0 server-1 Content Damaged client 12/08/2013 08:00:32
234 server-1 Content Damaged client 12/09/2013 08:00:34
0 server-1 Content Damaged client 12/09/2013 16:09:41
70 server-1 Content Damaged client 12/10/2013 08:00:33
0 server-1 Content Damaged client 12/11/2013 08:00:31
我可以将上面的输出附加到文本文件中。
当我尝试在新的CSV文件中导入以上输出时(使用Import-Csv
),所有信息都在每行的单个单元格下,但我需要每行7个单元格!请有人在这里指导我。
还请告诉我,如何使用PowerShell来解决从 0
开始的行?
答案 0 :(得分:2)
Import-CSV
假设每个记录(或行)数据都以逗号分隔(因此名称为逗号分隔值)。如果您有其他一些用作字段之间的分隔符(例如制表符或空格)的内容,则可以使用cmdlet的-Delimiter
参数指定该字段并使其正确解析。
但是,Import-CSV
也假设您有一个标题记录,但您没有。因此,您需要使用Get-Content
来解析数据,或者添加标题记录(最好)。
一旦将数据解析为对象集合(或实际上是集合集合),只需查看每个对象的第一个值,看它是否等于0.
答案 1 :(得分:2)
数据不是CSV格式,因此Import-CSV无效。您需要将每一行拆分为单独的值,并使用这些值创建PS对象。每个值都需要分配给对象的属性,因此您还需要为每个值分配属性名称。
在Powershell中有很多方法可以实现这一目标。这是一个。属性名称只是Prop1-Prop7。你需要用有意义的东西替换那些,并用你的文件规范替换testfile.txt文件名。
#Create an array of property names
$Props = &{$args} Prop1 Prop2 Prop3 Prop4 Prop5 Prop6 Prop7
Get-Content testfile.txt |
ForEach-Object {
$Parts = $_ -split '\s+' #Split the line at the spaces to create an array of values
$PropHash = [ordered]@{} #Create an empty hash table for the property hash (the [ordered] is optional, but keeps the properties in the same order as the property list)
for ($i=0; $i -le 6; $i++)
{$PropHash[$Props[$i]] = $Parts[$i]} #Assign the split values to the property names by their respective array indexes
[PSCustomObject]$PropHash #Output a PSCustomObject built from the hash table
}