使用';'将csv转换为xlsx分隔符

时间:2021-03-10 13:46:54

标签: powershell csv xlsx powershell-5.0

我需要使用 powershell 5 中的 Excel 模块将我的 csv 文件转换为 xlsx 文件。我已经尝试过,下面的代码可以工作,但速度非常慢(csv 中的 4000 行需要大约 3 小时)。我想提高我的速度,但如果我使用任何其他变体将数据发送到 Export-Excel cmdlet,它不起作用(文件已创建但无法打开)。文件中的分隔符只能是 ';'

somecode......
$out = Import-Csv -Path "D:\psstudio\projects\admins_list.csv" -Header "Имя ПК", "Состав группы локальных администраторов", "Пользователь/Группа", "Доменная/Локальная", "DN" -Delimiter ';' -Encoding Default `
| Convertto-Csv -Delimiter ';' | Convertfrom-Csv -Delimiter ';'

$out | ForEach-Object{ Export-Excel -InputObject $_ -Path "D:\resultlocadm($(get-date -Format d)).xlsx" -AutoSize -TableName "localadmins" -Append }

内部文件数据示例:

HOLDING-009-157;Стандартные учетные записи;;;CN=HOLDING-009-157,OU=Компьютеры,DC=mydomain,DC=com
SH-TEL-KYIV-P02;ACCESS_DENIED;;;CN=SH-TEL-KYIV-P02,OU=Компьютеры,DC=mydomain,DC=com
TZ-WMS2018-ESB;ACCESS_DENIED;;;CN=TZ-WMS2018-ESB,OU=Компьютеры,DC=mydomain,DC=com
squid-dnepr-01;ACCESS_DENIED;;;CN=squid-dnepr-01,OU=Компьютеры,DC=mydomain,DC=com
SH-TEL-KYIV-P01;ACCESS_DENIED;;;CN=SH-TEL-KYIV-P01,OU=Компьютеры,DC=mydomain,DC=com
MARKET-204-074;Стандартные учетные записи;;;CN=MARKET-204-074,OU=Компьютеры,DC=mydomain,DC=com
MARKET-28-2-101;Стандартные учетные записи;;;CN=MARKET-28-2-101,OU=АП28А,OU=Компьютеры,DC=mydomain,DC=com
MARKET-28-7-038;Стандартные учетные записи;;;CN=MARKET-28-7-038,OU=АП28А,OU=Компьютеры,DC=mydomain,DC=com
MARKET-N-94144;NO_PING;;;CN=MARKET-N-94144,OU=АП28А,OU=Компьютеры,DC=mydomain,DC=com
MARKET-28-6-054;Стандартные учетные записи;;;CN=MARKET-28-6-054,OU=АП28А,OU=Компьютеры,DC=mydomain,DC=com
MARKET-28-6-161;Стандартные учетные записи;;;CN=MARKET-28-6-161,OU=АП28А,OU=Компьютеры,DC=mydomain,DC=com
MARKET-28-6-161;pro;User;WinNT://mydomain/MARKET-28-6-161/pro;CN=MARKET-28-6-161,OU=АП28А,OU=Компьютеры,DC=mydomain,DC=com
MARKET-28-6-022;Стандартные учетные записи;;;CN=MARKET-28-6-022,OU=АП28А,OU=Компьютеры,DC=mydomain,DC=com
MARKET-28-6-022;odenbah;User;WinNT://mydomain/odenbah;CN=MARKET-28-6-022,OU=АП28А,OU=Компьютеры,DC=mydomain,DC=com

1 个答案:

答案 0 :(得分:0)

这完全没问题,除非你想用 C 或 C++ 编写一些东西来改进它,否则我不知道如何改进它:)

$out = Import-Csv -Path "D:\psstudio\projects\admins_list.csv" -Header "Имя ПК", "Состав группы локальных администраторов", "Пользователь/Группа", "Доменная/Локальная", "DN" -Delimiter ';' -Encoding Default

这两个没有做任何事情:| Convertto-Csv -Delimiter ';' | Convertfrom-Csv -Delimiter ';'

ImportExcel v7+ 开始(如果我没记错的话)你可以像这样使用 -InputObject,这会让事情变得更快:

Export-Excel -InputObject $out -Path "D:\resultlocadm($(get-date -Format d)).xlsx" -AutoSize -TableName "localadmins"

编辑:

PS C:\> $out = Import-Csv -Path "$home\documents\test\input\csv.csv" -Header "Имя ПК", "Состав группы локальных администраторов", "Пользователь/Группа", "Доменная/Локальная", "DN" -Delimiter ';' -Encoding Default

PS C:\> $out|get-random -count 3

Имя ПК                                  : SH-TEL-KYIV-P01
Состав группы локальных администраторов : ACCESS_DENIED
Пользователь/Группа                     : 
Доменная/Локальная                      : 
DN                                      : CN=SH-TEL-KYIV-P01,OU=Компьютеры,DC=mydomain,DC=com

Имя ПК                                  : MARKET-28-7-038
Состав группы локальных администраторов : Стандартные учетные запиÑи
Пользователь/Группа                     : 
Доменная/Локальная                      : 
DN                                      : CN=MARKET-28-7-038,OU=ÐП28Ð,OU=Компьютеры,DC=mydomain,DC=com

Имя ПК                                  : squid-dnepr-01
Состав группы локальных администраторов : ACCESS_DENIED
Пользователь/Группа                     : 
Доменная/Локальная                      : 
DN                                      : CN=squid-dnepr-01,OU=Компьютеры,DC=mydomain,DC=com

PS C:\> Import-Module importexcel

PS C:\> Export-Excel -InputObject $out -Path "$home\documents\test\input\test.xlsx" -AutoSize -TableName "localadmins"

PS C:\> ii "$home\documents\test\input\test.xlsx"

export-excel result

相关问题