Я пытаюсь создать скрипт Powershell, используя Cylance API, который:
- Найти все устройства старше 45 дней
- Сохранить эти устройства как Имя: Дата вФайл .csv
- Удалите все эти устройства
У меня есть фон 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