1. ホーム
  2. arrays

[解決済み] Powershellで配列の値をソートする

2022-03-03 06:40:47

質問

MDMコンソールに接続するために使用しているAPIから取得した項目のリストを出力しようとしています。2つの関数があり、両方とも一緒に動作し、スクリプトの出力ですべてのデータを見ることができますが、このデータを列ヘッダーとして関数の1つからの変数名を使用して.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 

コンソールの各デバイスに対して、このようなデータが出力されます(会社のデータを隠すために、情報を汎用的にしています)。

<ブロッククオート

2018年9月5日水曜日 8時33分21秒 法人所有のユーザー名 - assetnumber Apple iPad Pro with Wi-Fi + Cellular (128 GB Space Gray) 資産番号 シリアル nubmer ユーザー名 macアドレス phonenumber 在籍 非対応

A. コンソールの各デバイスの出力の最初に"true"が出て、その後にスペース(が付くようです)が出るのが理解できません。 [datetime] )

B. このデータをすべて.csvファイルに格納する方法がわかりません。関数の前にパスを定義し、export-csvの使い方を知っていますが、ファイルに送信されるデータは、単に次のように表示されます。 #TYPE System.Boolean ということで、最後の変数に何か問題があるのではと推測しています。ふー。

どのように解決するのですか?

でソートすることができます。 Sort-Object .

$ArrayOfStrings = 's', 't', 'a', 'c', 'k'
$ArrayOfStrings | Sort-Object