Сортировка значений массива с помощью Powershell - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь вывести список элементов, извлеченных из API, который мы используем для подключения к нашей консоли MDM.У меня есть две функции, обе из которых работают вместе, и я могу видеть все данные в выводе скрипта, однако я хотел бы отсортировать эти данные в файл .csv, используя имена переменных из одной из функций в качестве столбцазаголовки.Я новичок в PS и выдернул свои волосы.Я вижу, что переменная - это массив и все значения в нем, но они не имеют ни малейшего представления, как сортировать, если есть или есть лучший способ получить нужные мне данные.

    #Current MDM Environment
    $ev = "Q"

    #Define MDM credentials to match environment from above
    if($ev -eq "Q")
    {
    $Code = 'VbvmMGOV0Pd2lF4GurpBqnwD/R6mFmUKI6z3CKAY5tw='
    $ui = 'MDMqualserver'
    }
    else{$Code = 'Pe8w/3jDREgse2gUu3UYZ28FHeafg0xcheu/AYwJ6PE='
    $ui = 'MDMprodserver'}#>


    #API Auth for MDM Console
    $Auth = Get-Content -path 'C:\ProgramData\ScriptAuth\mobilityapi.txt'

    $Contenttype = 'application/json'

    $CurrentDate = Get-Date
    $CurrentDate = $CurrentDate.ToString('MM-dd-yyyy')

    $path = "C:\users\username\desktop\$currentDate.csv"

    Function get_all
    {
    $array =@()

    #Define URL
    $url = "https://$ui.company.gov/api/mdm/devices/extensivesearch? 
    pagesize=10000"

    #Define Headers
    $headers = New-Object "System.Collections.Generic.Dictionary[[String], 
    [String]]"
    $headers.Add("aw-tenant-code", $Code)
    $headers.Add("Authorization", $Auth)

    #Send Rest Request
    try{
    $response = Invoke-RestMethod -uri $url -Headers $headers}
    catch{
    $error = "BDevice Info Not Found"}

    #Close Connection
    $ServicePoint = [System.Net.ServicePointManager]::FindServicePoint($url)
    $SSP = $ServicePoint.CloseConnectionGroup("")
    #Parse Device Info
    $data = $response.DeviceExtensiveSearchResult.Devices.DeviceDetailsExt

    $data | foreach {
    $serial = $_.SerialNumber
    $array += $serial
    }
    return $array
    }

    Function get_devattrib
    {
    Param([string]$serial)

    $array = @()

    #Define URL
    $url = "https://$ui.company.gov/api/mdm/devices? 
    searchby=Serialnumber&id=$serial"

    #Define Headers
    $headers = New-Object "System.Collections.Generic.Dictionary[[String], 
    [String]]"
    $headers.Add("aw-tenant-code", $Code)
    $headers.Add("Authorization", $Auth)
    $headers.Add("Content-Type", $Contenttype)

    #Send Rest Request
    try{
    $response = Invoke-RestMethod -uri $url -Headers $headers}
    catch{
    return $false}

    #Close Connection
    $ServicePoint = [System.Net.ServicePointManager]::FindServicePoint($url)
    $ServicePoint.CloseConnectionGroup("")

    #Parse Device Info (#removed .Device from $data = $response.Device)
    $data = $response

    $data | foreach {
    $ownership = $_.Ownership 
    $friendlyname = $_.DeviceFriendlyName
    $platform = $_.Platform 
    $model = $_.Model 
    $snumber = $_.AssetNumber
    $username = $_.UserName
    $mac = $_.MacAddress
    $phone = $_.PhoneNumber
    $lastseen = $_.LastSeen
    $enrollstatus = $_.EnrollmentStatus
    $compliance = $_.ComplianceStatus 


    return [datetime]$lastseen, $ownership, $friendlyname, $platform, $model, 
    $snumber, $serial, $username, $mac, $phone, $enrollstatus, $compliance
    }
    }

    $devices = @()
    $getdevices = @()

    $devices = get_all 

    foreach ($device in $devices){

       $getdevices += get_devattrib $device  
    }

    $getdevices 

Выводданные выглядят так для каждого устройства в нашей консоли (я сделал общую информацию, чтобы скрыть данные компании):

True

Среда, 5 сентября 2018 г. 8:33:21 PM Корпоративное имя пользователя - номер актива Apple iPad Pro с Wi-Fi + сотовый (128 ГБ Space Grey) номер актива серийный номер пользователя имя MAC-адрес номер телефона Зарегистрированный NonCompliant

A.Я не понимаю, почему я получаю "true" в начале вывода для каждого устройства в консоли и после пробела (который, кажется, идет с [datetime])

B.Я не понимаю, как поместить все эти данные в файл .csv.У меня есть путь, определенный перед функциями, и я знаю, как использовать export-csv, но данные, которые он отправляет в файл, отображаются как #TYPE System.Boolean, поэтому я предполагаю, что с моей последней переменной что-то не так.Уф.

1 Ответ

0 голосов
/ 29 ноября 2018

Вы можете сортировать с Sort-Object.

$ArrayOfStrings = 's', 't', 'a', 'c', 'k'
$ArrayOfStrings | Sort-Object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...