107 lines
4.1 KiB
PowerShell
107 lines
4.1 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Initialize Tanium session from config.json (no env vars). Prefer -CredentialObject (hashtable).
|
|
Falls back to -BaseURI/-Token or -BaseURI/-ApiToken, then ephemeral CLIXML if needed.
|
|
#>
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
try { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 } catch {}
|
|
Import-Module Redden-TanREST -Force
|
|
|
|
# --- Load config.json ---
|
|
$configPath = Join-Path $PSScriptRoot 'config.json'
|
|
if (-not (Test-Path $configPath)) { throw "Configuration file not found: $configPath" }
|
|
|
|
Write-Host "Reading configuration from: $configPath"
|
|
$config = Get-Content -Path $configPath -Raw | ConvertFrom-Json
|
|
|
|
$TaniumUrl = $config.TaniumUrl
|
|
$TaniumApiToken = $config.TaniumApiToken
|
|
if ([string]::IsNullOrWhiteSpace($TaniumUrl) -or [string]::IsNullOrWhiteSpace($TaniumApiToken)) {
|
|
throw "Both TaniumUrl and TaniumApiToken must be provided in config.json."
|
|
}
|
|
|
|
# Normalize to bare host (strip scheme and trailing slash)
|
|
$BaseUriHost = (($TaniumUrl -replace '^https?://','') -replace '/+$','')
|
|
$SecureToken = $TaniumApiToken | ConvertTo-SecureString -AsPlainText -Force
|
|
|
|
# --- Initialize session (feature-detected) ---
|
|
Write-Host "Initializing Tanium session..."
|
|
$cmd = Get-Command Initialize-TaniumSession -ErrorAction Stop
|
|
$paramNames = $cmd.Parameters.Keys
|
|
$initialized = $false
|
|
$lastError = $null
|
|
|
|
# 1) Preferred: -CredentialObject (expects a hashtable with ContainsKey)
|
|
if (-not $initialized -and ($paramNames -contains 'CredentialObject')) {
|
|
try {
|
|
$credHash = @{
|
|
baseURI = $BaseUriHost
|
|
token = $SecureToken
|
|
}
|
|
Initialize-TaniumSession -CredentialObject $credHash
|
|
$initialized = $true
|
|
Write-Host "Session initialized via -CredentialObject (hashtable)."
|
|
} catch { $lastError = $_ }
|
|
}
|
|
|
|
# 2) Fallback: -BaseURI/-Token (token may be SecureString or string depending on module)
|
|
if (-not $initialized -and ($paramNames -contains 'BaseURI') -and ($paramNames -contains 'Token')) {
|
|
try {
|
|
Initialize-TaniumSession -BaseURI $BaseUriHost -Token $SecureToken
|
|
$initialized = $true
|
|
Write-Host "Session initialized via -BaseURI/-Token (SecureString)."
|
|
} catch {
|
|
$lastError = $_
|
|
try {
|
|
Initialize-TaniumSession -BaseURI $BaseUriHost -Token $TaniumApiToken
|
|
$initialized = $true
|
|
Write-Host "Session initialized via -BaseURI/-Token (plain string)."
|
|
} catch { $lastError = $_ }
|
|
}
|
|
}
|
|
|
|
# 3) Fallback: -BaseURI/-ApiToken (some versions use ApiToken)
|
|
if (-not $initialized -and ($paramNames -contains 'BaseURI') -and ($paramNames -contains 'ApiToken')) {
|
|
try {
|
|
Initialize-TaniumSession -BaseURI $BaseUriHost -ApiToken $SecureToken
|
|
$initialized = $true
|
|
Write-Host "Session initialized via -BaseURI/-ApiToken (SecureString)."
|
|
} catch {
|
|
$lastError = $_
|
|
try {
|
|
Initialize-TaniumSession -BaseURI $BaseUriHost -ApiToken $TaniumApiToken
|
|
$initialized = $true
|
|
Write-Host "Session initialized via -BaseURI/-ApiToken (plain string)."
|
|
} catch { $lastError = $_ }
|
|
}
|
|
}
|
|
|
|
# 4) Last resort: ephemeral CLIXML (-PathToXML), then cleanup
|
|
if (-not $initialized -and ($paramNames -contains 'PathToXML')) {
|
|
try {
|
|
$TempXml = Join-Path $env:TEMP ('tanium-session-{0}.apicred' -f ([guid]::NewGuid()))
|
|
@{ baseURI = $BaseUriHost; token = $SecureToken } | Export-Clixml -Path $TempXml
|
|
Initialize-TaniumSession -PathToXML $TempXml
|
|
Remove-Item $TempXml -Force -ErrorAction SilentlyContinue
|
|
$initialized = $true
|
|
Write-Host "Session initialized via -PathToXML (ephemeral file removed)."
|
|
} catch { $lastError = $_ }
|
|
}
|
|
|
|
if (-not $initialized) {
|
|
Write-Error "Failed to initialize Tanium session. Last error: $($lastError.Exception.Message)"
|
|
throw
|
|
}
|
|
|
|
# --- Retrieve & display groups ---
|
|
Write-Host "Retrieving all Computer Groups..."
|
|
$groups = Get-ComputerGroup -All
|
|
|
|
if (Get-Command Out-GridView -ErrorAction SilentlyContinue) {
|
|
$groups | Out-GridView -Title 'Tanium Computer Groups'
|
|
} else {
|
|
Write-Warning "Out-GridView not available; showing a console table instead."
|
|
$groups | Format-Table -Auto
|
|
}
|