Add assets.ps1
This commit is contained in:
147
assets.ps1
Normal file
147
assets.ps1
Normal file
@@ -0,0 +1,147 @@
|
||||
# POLISH LANGUAGE
|
||||
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
||||
chcp 65001 | Out-Null
|
||||
|
||||
# LOAD CONFIG
|
||||
$configPath = ".\config.json"
|
||||
$config = Get-Content $configPath -Raw | ConvertFrom-Json
|
||||
|
||||
$apiUrl = $config."snipe-it".url.TrimEnd('/')
|
||||
$apiKey = $config."snipe-it".apikey
|
||||
$verifySSL = $config."snipe-it"."verify-ssl"
|
||||
|
||||
# SSL (optional)
|
||||
if (-not $verifySSL) {
|
||||
add-type @"
|
||||
using System.Net;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
public class TrustAllCertsPolicy : ICertificatePolicy {
|
||||
public bool CheckValidationResult(
|
||||
ServicePoint srvPoint, X509Certificate certificate,
|
||||
WebRequest request, int certificateProblem) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
"@
|
||||
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
|
||||
}
|
||||
|
||||
# HEADERS
|
||||
$headers = @{
|
||||
"Authorization" = "Bearer $apiKey"
|
||||
"Accept" = "application/json"
|
||||
"Content-Type" = "application/json"
|
||||
}
|
||||
|
||||
# GET SEARCH VALUE
|
||||
try {
|
||||
$searchValue = Invoke-Expression $config."search-term".value
|
||||
} catch {
|
||||
Write-Host "Błąd pobierania search-term"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not $searchValue) {
|
||||
Write-Host ""
|
||||
Write-Host "Error getting search value" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "======== Getting Asset ========" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Search: $searchValue"
|
||||
|
||||
# FIND ASSET
|
||||
$searchUrl = "$apiUrl/hardware?search=$searchValue"
|
||||
|
||||
try {
|
||||
$response = Invoke-RestMethod -Uri $searchUrl -Headers $headers -Method GET
|
||||
} catch {
|
||||
Write-Host ""
|
||||
Write-Host "Communication error with Snipe-IT API" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
exit 1
|
||||
}
|
||||
|
||||
if ($response.total -eq 0) {
|
||||
Write-Host ""
|
||||
Write-Host "Nie znaleziono assetu" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
exit 0
|
||||
}
|
||||
|
||||
$assetId = $response.rows[0].id
|
||||
Write-Host "Asset ID: $assetId"
|
||||
|
||||
# COLLECT DATA
|
||||
$customFields = @{}
|
||||
|
||||
foreach ($field in $config.fields.custom_fields.PSObject.Properties) {
|
||||
|
||||
$key = $field.Name
|
||||
$fieldConfig = $field.Value
|
||||
|
||||
if (-not $fieldConfig.enabled) {
|
||||
continue
|
||||
}
|
||||
|
||||
try {
|
||||
$value = Invoke-Expression $fieldConfig.ps_command
|
||||
if ($value -is [int] -or $value -is [double]) {
|
||||
$finalValue = $value
|
||||
} else {
|
||||
$finalValue = "$value"
|
||||
}
|
||||
$customFields[$key] = $finalValue
|
||||
|
||||
} catch {
|
||||
Write-Host "Błąd pola: $key"
|
||||
}
|
||||
}
|
||||
|
||||
# PREVIEW
|
||||
Write-Host ""
|
||||
Write-Host "=== Data Preview ===" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Fields:" -ForegroundColor Yellow
|
||||
|
||||
foreach ($field in $config.fields.custom_fields.PSObject.Properties) {
|
||||
|
||||
$key = $field.Name
|
||||
$fieldConfig = $field.Value
|
||||
|
||||
if (-not $fieldConfig.enabled) {
|
||||
continue
|
||||
}
|
||||
|
||||
if ($customFields.ContainsKey($key)) {
|
||||
$name = if ($fieldConfig.name) { $fieldConfig.name } else { $key }
|
||||
$value = $customFields[$key]
|
||||
$namePadded = $name.PadRight(20)
|
||||
Write-Host "- $namePadded : $value"
|
||||
}
|
||||
}
|
||||
|
||||
# BUILD BODY
|
||||
$body = $customFields | ConvertTo-Json -Depth 5
|
||||
|
||||
# UPDATE ASSET
|
||||
$updateUrl = "$apiUrl/hardware/$assetId"
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "======== Update Asset ========" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
try {
|
||||
Invoke-RestMethod -Uri $updateUrl -Headers $headers -Method PATCH -Body $body | Out-Null
|
||||
Write-Host "Snipe-IT Update Completed" -ForegroundColor Green
|
||||
|
||||
} catch {
|
||||
Write-Host "Błąd aktualizacji assetu ID: $assetId" -ForegroundColor Red
|
||||
Write-Host $_.Exception.Message
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Reference in New Issue
Block a user