PDA

Показать полную графическую версию : [решено] Проблема при простом скрипте.


User001
03-04-2013, 10:58
Доброго времени суток. Возникла следующая проблема.

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


$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


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

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

и

"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
[array[]]$csv1 = Import-Csv $fileName1

User001
03-04-2013, 12:08
[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}


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

"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
Не в той версии PowerShell проверил,для PowerShell V2:
[psobject[]]$csv1 = Import-Csv $fileName1

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

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

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

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

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

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




© OSzone.net 2001-2012