Foreach для CSV PowerShell - PullRequest
       1

Foreach для CSV PowerShell

0 голосов
/ 04 сентября 2018

Сегодня впервые в гневе использовал Exportto-CSV, заставил его работать в другом месте, но когда я делаю следующее, появляются некоторые случайные числа.

Может кто-нибудь посоветовать, что я делаю не так?

    # List all sites, applications and appPools
dir IIS:\AppPools | ForEach-Object {
    # Site's app pool
    $_.name
    $_.managedRuntimeVersion
    $_.enable32BitAppOnWin64 
    $_.managedPipelineMode 
    $_.processModel.username
    $_.processModel.password
    $_.processModel.identityType
    # Any web applications on the site + their app pools
} | exportto-csv C:\bob.csv

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Export-CSV ожидает структурированные данные в качестве свойств объекта. Ваш текущий код, однако, передает массив значений в Export-CSV.

Попробуйте использовать Select-Object для создания объектов «на лету», которые содержат свойства, которые вы хотите в своем CSV, затем перенаправьте их на Export-CSV

Примерно так должно получиться:

Get-ChildItem -path 'IIS:\AppPools' | 
    Select-Object -Property Name, `
        managedRuntimeVersion, `
        enabled32BitAppOnWin64, `
        managedPipelineMode, `
        @{label='processModel_username';     expression={$_.processModel.username}}, `
        @{label='processModel_password';     expression={$_.processModel.password}}, `
        @{label='processModel_identityType'; expression={$_.processModel.identityType}} | 
    Export-CSV -path 'C:\bob.csv'
0 голосов
/ 04 сентября 2018

Посмотрите описание get-help Export-Csv. Это говорит -

DESCRIPTION
    The Export-CSV cmdlet creates a CSV file of the objects that you submit. Each object is represented as a line or
    row of the CSV. The row consists of a comma-separated list of the values of object properties. You can use this
    cmdlet to create spreadsheets and share data with programs that take CSV files as input.

    Do not format objects before sending them to the Export-CSV cmdlet. If you do, the format properties are
    represented in the CSV file, instead of the properties of the original objects. To export only selected properties
    of an object, use the Select-Object cmdlet.

Прочитайте строку, которая говорит - Строка состоит из разделенного запятыми списка значений свойств объекта . Случайные числа, которые вы видите, - это длина свойств, которые вы экспортировали в CSV.

Чтобы преодолеть это, вы можете использовать PSCustomObject вот так -

$array= @()
dir IIS:\AppPools | ForEach-Object {
    $obj = New-Object PSObject

    $Name = Add-Member -MemberType NoteProperty -Name "Name" $_.Name
    $managedRuntimeVersion = Add-Member -MemberType NoteProperty -Name "managedRuntimeVersion" $_.managedRuntimeVersion
    .
    .
    #Rest of your properties
    $array += $obj
    }
$array | Export-Csv C:\bob.csv -NoTypeInformation

Снова к вашему вопросу, что вы делаете не так -

  1. Непонимание правильного типа ввода командлета Export-Csv.
  2. Использование Exportto-Csv вместо Export-Csv. Я очень сомневаюсь, что существует командлет с именем Exportto-Csv. Хотите знать, как вы получили результаты.
  3. Кодирование, когда ты злишься!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...