Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проблема при простом скрипте. (http://forum.oszone.net/showthread.php?t=257752)

User001 03-04-2013 10:58 2124817

Проблема при простом скрипте.
 
Доброго времени суток. Возникла следующая проблема.

Есть простенький скрипт

Код:

$fileName1 = "E:\1.csv"
$fileName2 = "E:\2.csv"

$csv1 = Import-Csv $fileName1
Write-Host "Input1: `n", $csv1
$csv2 = Import-Csv $fileName2
Write-Host "`nInput2: `n", $csv2
$csv1 += $csv2
Write-Host "`nresult: `n", $csv1

# Сохраняем
$csv1  | Export-Csv $fileName1 -NoTypeInformation

И два файла следующего содержания:
1.csv

"VersionId","SnapshotId"
"01/01/2013-05:50","00000000-0000-0000-0000-000000000000"

и
2.csv

"VersionId","SnapshotId"
"01/01/2013-05:50","00000000-0000-0000-0000-000000000000"


При выполнении скрипта получаю ошибку:
Ошибка

Input1:
@{VersionId=01/01/2013-05:50; SnapshotId=00000000-0000-0000-0000-000000000000}

Input2:
@{VersionId=01/01/2013-05:50; SnapshotId=00000000-0000-0000-0000-000000000000}
Произошла ошибка при вызове метода, так как [System.Management.Automation.PSObj
ect] не содержит метод с именем "op_Addition".
C:\PowerShell-FullShit\test3.ps1:8 знак:9
+ $csv1 += <<<< $csv2
+ CategoryInfo : InvalidOperation: (op_Addition:String) [], Runti
meException
+ FullyQualifiedErrorId : MethodNotFound



result:
@{VersionId=01/01/2013-05:50; SnapshotId=00000000-0000-0000-0000-000000000000}


Подскажите что не так. Идей, что придумать не осталось. С PowerShell знаком плохо, поисковик не помог.

P.S. Если файл 1.csv пустой или содержит 2 строки и т.д., то все работает нормально.

Kazun 03-04-2013 11:40 2124844

[array[]]$csv1 = Import-Csv $fileName1

User001 03-04-2013 12:08 2124860

Цитата:

Цитата Kazun
[array[]]$csv1 = Import-Csv $fileName1

Не помогло.

Ошибка

Не удается преобразовать значение "@{VersionId=01/01/2013-05:50; SnapshotId=000
00000-0000-0000-0000-000000000000}" типа "System.Management.Automation.PSCustom
Object" в тип "System.Array[]".
C:\PowerShell-FullShit\test3.ps1:4 знак:15
+ [array[]]$csv1 <<<< = Import-Csv $fileName1
+ CategoryInfo : MetadataError: (:) [], ArgumentTransformationMet
adataException
+ FullyQualifiedErrorId : RuntimeException

Input1:


Input2:
@{VersionId=01/01/2013-05:50; SnapshotId=00000000-0000-0000-0000-000000000000}

result:
@{VersionId=01/01/2013-05:50; SnapshotId=00000000-0000-0000-0000-000000000000}


Да и хотелось бы без преобразований типа обойтись. Поведение ведь странное, т.к. при таком содержании файла скрипт работает нормально.
1.csv

"VersionId","SnapshotId"
"01/01/2013-05:50","00000000-0000-0000-0000-000000000000"
"01/01/2013-05:50","00000000-0000-0000-0000-000000000000"

Kazun 03-04-2013 12:23 2124869

Не в той версии PowerShell проверил,для PowerShell V2:
[psobject[]]$csv1 = Import-Csv $fileName1

User001 03-04-2013 12:33 2124872

Цитата:

Цитата Kazun
Не в той версии PowerShell проверил,для PowerShell V2:
[psobject[]]$csv1 = Import-Csv $fileName1

Ура! Спасибо.

P.S. Если не сложно, подскажите для общего развития, что не так происходило (зачем нужен [psobject[]])

Kazun 03-04-2013 12:51 2124885

Т.к если содержится 1 элемент в файле, то тип объекта будет PSObject, у которого нет метода op_Addition и PowerShell не понимает, как сложить два значения. Здесь мы явно преобразуем скалярное значение в массив типа PSObject[]. PowerShell позволяет складывать массивы используя +.

User001 03-04-2013 12:55 2124892

Цитата:

Цитата Kazun
Т.к если содержится 1 элемент в файле, то тип объекта будет PSObject, у которого нет метода op_Addition и PowerShell не понимает, как сложить два значения. Здесь мы явно преобразуем скалярное значение в массив типа PSObject[]. PowerShell позволяет складывать массивы используя +. »

Спасибо еще раз. Понятно и доходчиво.


Время: 19:59.

Время: 19:59.
© OSzone.net 2001-