Скрипт Powershell для извлечения имен и дат устройств из API старше указанной даты - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь создать скрипт Powershell, используя Cylance API, который:

  1. Найти все устройства старше 45 дней
  2. Сохранить эти устройства как Имя: Дата вФайл .csv
  3. Удалите все эти устройства

У меня есть фон Perl, но я новичок в Powershell, и поэтому я решил, что могу сделать это следующим образом:

Найдите каждое устройство старше 45 дней, сохраните его как Имя -> Дата в хеш-таблице, напечатайте хеш-таблицу в файл .csv, а затем удалите устройства, хранящиеся в хеш-таблице.

Однако,Я получаю только несколько устройств, и файл CSV пуст.Это то, что хранится в HashTable (я точно знаю, что в этой HashTable должно быть ПУТЬ больше устройств).

Name                           Value
----                           -----
MPB8NTVR                       2018-12-11T17:25:38.259
FENAPPTESTNICK                 2018-12-11T15:50:31.924
SERSENM2                       2018-12-11T14:57:50.109
FENWAPNMSP40                   2018-12-07T20:26:04.005
FENXENAPPD01                   2018-12-13T16:42:34.517
FENXENAPPD02                   2018-12-13T16:43:54.908
M5CG7193HR4                    2018-12-14T17:10:20.588


param (
    [string]$AccessTokenPath = "Documents\Cylance\",
    [string]$CylanceGenerator = "CylanceGeneratorTest.exe",
    [int]$PageNumber = 1,
    [int]$PageSize = 200,
    [string]$CylanceURI = "https://protectapi.cylance.com/devices/v2?page=$PageNumber&page_size=$PageSize",
    [string]$CylanceDeviceURI = "https://protectapi.cylance.com/devices/v2/",
    [string]$OutFile = "$PWD\testfile.txt",
    $TodaysDate = (Get-Date -Format 'yyyy-MM-ddTHH:mm:ss.fff'),
    $date = 45
)

$AccessToken = & $AccessTokenPath\$CylanceGenerator
$CSVHash = @{}

do {
    [string]$CylanceURI = "https://protectapi.cylance.com/devices/v2?page=$PageNumber&page_size=$PageSize"

    try {
        $CylanceRequest = Invoke-RestMethod -Method Get -Uri $CylanceURI -Header @{"Authorization" = "Bearer $AccessToken"}
    }
    catch {
        $CylanceError = $_ 
    }

    $response = $CylanceRequest | Select-object -ExpandProperty page_items | Select-Object -Property id, name, date_first_registered, date_offline

    $response | ForEach-Object {
        try {
            $uri = $CylanceDeviceURI + $_.id
            $CylanceDeviceReq = Invoke-RestMethod -Method Get -Uri $uri -Header @{"Authorization" = "Bearer $AccessToken"}
            $DaysOffline = $CylanceDeviceReq.date_offline

            if ($DaysOffline) {
                "Days offline = " + $DaysOffline
                $TimeDiff = New-TimeSpan -Start $TodaysDate -End $DaysOffline
                "TimeDiff.Days = " + $TimeDiff.Days
            }

            if ($DaysOffline -and ($TimeDiff.Days -le -$date)) {
                "Adding " + $_.name + " " + $DaysOffline
                $CSVHash.Add($_.name, $DaysOffline)
            }

            $temp = $_ | ForEach-Object {
                if ($_.date_offline) {
                    New-Object psobject -Property @{
                        "Name"         = $_.name
                        "ID"           = $_.id
                        "Date Offline" = $CylanceDeviceReq.date_offline
                    }
                }
                $temp | Export-csv -Append $PWD\raw.csv -NoTypeInformation
            }

        }
        catch {
            $CylanceError = $_
        }
        $PageNumber++
    }
} while ($PageNumber -le $PageSize)

#$CompHash
$CSVHash

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Что мне кажется странным, так это строка, в которой вы присваиваете значение $ response.Я не знаком с объектом, с которым вы имеете дело, но на первый взгляд я подозреваю неправильное использование -ExpandProperty в этой строке.Это вернет свойство в виде строки.Затем вы направляетесь ко второму Select-Object, тоже необычно.Попробуйте что-то вроде $ CylanceRequest.page_items |Select-Object ....

Я могу ошибаться, но это то, что бросается в глаза как сомнительная.

0 голосов
/ 02 февраля 2019

Что касается…

У меня есть опыт работы с Perl, но я новичок в Powershell

Вы говорите, что вы уже немного расширили PowerShell раньше?вы пошли по этому пути и уже использовали модули / скрипты Cylance из MS PowerShellGallery, GitHub и не могли использовать их напрямую или подстраивать под свои нужды, прежде чем пытаться опубликовать то, что вы опубликовали?

Cylance-API-PS
https://github.com/Maliek/Cylance-API-PS

CylanceDSCScript.ps1
GetNewThreatsAndDeviceLastDay.ps1
GetOldDevices.ps1
GetOldDevicesAndRemove.ps1
GetCansings..ps1
GetThreatsAndDevice.ps1
README.md
SendMailLatestThreatsAndDevices.ps1
UploadMultipleHashes.ps1
hashes.txt

Cylance-API-Powershell-example

* 27 *1026* 1027*
https://github.com/regexninja826/Cylance-API-Powershell-example

https://www.powershellgallery.com/packages/CyCLI/0.5.6/Content/CyAPI.ps1

https://github.com/jan-tee/cycli

Хеш-таблицы не ограничивают объем возвращаемых данных.

Итак, вытащить сырой набор данных nativelсначала, чтобы убедиться, что вы получили ожидаемое количество, которое отформатирует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...