как добавить вывод в файл CSV - PullRequest
0 голосов
/ 29 апреля 2020
foreach ( $newfile in $file ) 
{ 
   $b =  Get-CMDeploymentStatus -PackageId $newfile -StatusType Any | select PackageID
 Write-Output $b | Export-Csv -Path "C:\Users\PSM-6A1A000000000000\Documents\list.csv"
}

Я даю входные данные для этого с помощью входного файла, в котором указано число имен пакетов, и затем я хочу обработать его таким образом, чтобы вывод выводился один за другим прямо сейчас. Я получаю сообщение об ошибке как

Export-Csv: Невозможно привязать аргумент к параметру 'InputObject', поскольку он имеет значение null. В строке: 16 символов: 20 + запись-вывод $ b | Export-Csv -Path "C: \ Users \ PSM-6A1A000000000000 \ Documents \ lis ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidData: (:) [Export-Csv], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationErrorNullNotAllowed, Microsoft.PowerShell.Commands.ExportCsvCommand

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Поскольку вы говорите "Я даю входные данные для этого с помощью входного файла с номером пакета имен в списке" , но ваш код использует PackageId ..

Мне кажется, что этот файл содержит идентификатор пакета, каждый в одной строке.

В любом случае, я не вижу кода, когда-либо читающего этот файл ..

Если мое предположение о текстовом файле правильно, попробуйте:

# read the content of the text file and loop through the lines
# collect the output from Get-CMDeploymentStatus in variable $result
$result = Get-Content -Path 'X:\TheFileWithPackageIds.txt' | ForEach-Object {
    # inside the ForEach-Object, the $_ automatic variable represents a single line from the text file
    Get-CMDeploymentStatus -PackageId $_ -StatusType Any | select PackageID
}

# output on screen
$result

# write to new CSV file
$result | Export-Csv -Path "C:\Users\PSM-6A1A000000000000\Documents\list.csv" -NoTypeInformation
0 голосов
/ 29 апреля 2020

Ваш код предполагает, что у вас будет результат, возвращающийся с $b, но если этого не произойдет, вы получите ошибку, потому что вы вводите $b, который является нулевым, в Export-CSV.

$null |export-csv c:\temp\1.csv
Export-Csv : Cannot bind argument to parameter 'InputObject' because it is null.
At line:1 char:8
+ $null |export-csv c:\temp\1.csv
+        ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Export-Csv], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ExportCs

Перед попыткой экспорта вы должны добавить «Охранную оговорку».

if ($null -ne $b){
   Export-csv -Append -InputObject $b
}

По крайней мере это будет продолжаться. Теперь ваша следующая задача - определить, почему $b будет пустым ... из моего опыта работы с CM, я уверен, вам нужно указать, какое свойство в вашем $file вам нужно. Возможно, эта строка должна выглядеть следующим образом:

$b = Get-CMDeploymentStatus -PackageId $newfile.PackageId -StatusType Any | select PackageID

...