Converted to PowerShell
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Posts notices to Polaris via the Leap (PAPI) API. PowerShell port of ../post_notices.py.
|
||||
|
||||
.EXAMPLE
|
||||
.\post_notices.ps1 -NoticeType 2 -OrgIds 3,4,5,6,7,8
|
||||
#>
|
||||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[int]$NoticeType,
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$OrgIds,
|
||||
|
||||
[int]$DeliveryOption = 1,
|
||||
|
||||
# Defaults to a .env file next to the repo root (one level up from this script),
|
||||
# matching where the Python version expects it.
|
||||
[string]$EnvFile = (Join-Path $PSScriptRoot "..\.env")
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
. (Join-Path $PSScriptRoot "PolarisClient.ps1")
|
||||
|
||||
function Import-DotEnv {
|
||||
param([string]$Path)
|
||||
if (-not (Test-Path -LiteralPath $Path)) { return }
|
||||
|
||||
foreach ($line in Get-Content -LiteralPath $Path) {
|
||||
$trimmed = $line.Trim()
|
||||
if (-not $trimmed -or $trimmed.StartsWith('#')) { continue }
|
||||
|
||||
$idx = $trimmed.IndexOf('=')
|
||||
if ($idx -lt 1) { continue }
|
||||
|
||||
$key = $trimmed.Substring(0, $idx).Trim()
|
||||
$value = $trimmed.Substring($idx + 1).Trim()
|
||||
if ($value.Length -ge 2 -and (
|
||||
($value[0] -eq '"' -and $value[-1] -eq '"') -or
|
||||
($value[0] -eq "'" -and $value[-1] -eq "'")
|
||||
)) {
|
||||
$value = $value.Substring(1, $value.Length - 2)
|
||||
}
|
||||
|
||||
# Don't clobber a value already set in the environment (e.g. via Task Scheduler).
|
||||
if (-not (Get-Item -Path "Env:$key" -ErrorAction SilentlyContinue).Value) {
|
||||
Set-Item -Path "Env:$key" -Value $value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Import-DotEnv -Path $EnvFile
|
||||
|
||||
$requiredEnv = @(
|
||||
"POLARIS_SERVER",
|
||||
"POLARIS_SITE_DOMAIN",
|
||||
"POLARIS_ORGANIZATION_ID",
|
||||
"POLARIS_WORKSTATION_ID",
|
||||
"POLARIS_USERNAME",
|
||||
"POLARIS_PASSWORD"
|
||||
)
|
||||
$missing = $requiredEnv | Where-Object { [string]::IsNullOrWhiteSpace((Get-Item -Path "Env:$_" -ErrorAction SilentlyContinue).Value) }
|
||||
if ($missing) {
|
||||
Write-Error "Missing required .env values: $($missing -join ', ')"
|
||||
Write-Error "Copy .env.example to .env and fill it in (or set these as environment variables)."
|
||||
exit 1
|
||||
}
|
||||
|
||||
$orgIdList = $OrgIds -split "," | Where-Object { $_.Trim() } | ForEach-Object { [int]$_.Trim() }
|
||||
|
||||
$language = if ($env:POLARIS_LANGUAGE) { $env:POLARIS_LANGUAGE } else { "eng" }
|
||||
$productId = if ($env:POLARIS_PRODUCT_ID) { $env:POLARIS_PRODUCT_ID } else { "7" }
|
||||
|
||||
$client = [PolarisClient]::new(
|
||||
$env:POLARIS_SERVER,
|
||||
$env:POLARIS_SITE_DOMAIN,
|
||||
$env:POLARIS_ORGANIZATION_ID,
|
||||
$env:POLARIS_WORKSTATION_ID,
|
||||
$language,
|
||||
$productId
|
||||
)
|
||||
|
||||
try {
|
||||
$client.Authenticate($env:POLARIS_USERNAME, $env:POLARIS_PASSWORD)
|
||||
$client.PostNotices($NoticeType, $orgIdList, $DeliveryOption) | Out-Null
|
||||
} catch {
|
||||
Write-Error "Error: $($_.Exception.Message)"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Output "Notices posted successfully: noticeType=$NoticeType, orgIds=$($orgIdList -join ','), deliveryOption=$DeliveryOption"
|
||||
Reference in New Issue
Block a user