framework/Resources/Scripts/DevScripts/InstallScript_Dev_Win_Client.ps1

Param(
    [Parameter(Mandatory)]
    [string]$Key,
    [Parameter(Mandatory)]
    [string]$Company,
    [Parameter(Mandatory)]
    [string]$FirstName,
    [Parameter(Mandatory)]
    [string]$LastName,
    [Parameter(Mandatory)]
    [string]$Email,
    [string]$InstallDir = "C:\Program Files\NCache"
)


function DownloadNcache {
    Start-BitsTransfer -Source "https://www.alachisoft.com/downloads/ncache.ent.net.x64.msi" -Destination "C:\Temp\ncache.ent.net.x64.msi"
}

function installNCache {
    $msiPath = "C:\Temp\ncache.ent.net.x64.msi"
    $logPath = "C:\Temp\ncache_install.log"

    $arguments = @(
        "/i `"$msiPath`""
        "/qn"                                 
        "/l*v `"$logPath`""                   
        "INSTALLMODE=3"
        "COMPANYNAME=$Company"
        "USERFIRSTNAME=$FirstName"
        "USERLASTNAME=$LastName"
        "EMAILADDRESS=$Email"
        "KEY=$Key"
        "INSTALLDIR=`"$InstallDir`""
    ) -join " "  
    Write-Host $arguments
    Start-Process msiexec.exe -ArgumentList $arguments -Wait -NoNewWindow
}

function SetSecurityRules {
    New-NetFirewallRule -DisplayName "NCache-In" -Direction Inbound -Action Allow `
        -Protocol TCP -LocalPort 9800, 8250-8260, 7800-7900, 8300-8400, 9900, 10000-11000
    New-NetFirewallRule -DisplayName "NCache-Out" -Direction Outbound -Action Allow `
        -Protocol TCP -LocalPort 7800-7900, 10000-11000
}

function InstallAzureMonitoring {
    # ================================
    # Variables
    # ================================
    $TELEGRAF_CONFIG = "C:\Program Files\InfluxData\telegraf\telegraf.conf"
    $NAMESPACE_PREFIX = "ncache-metrics"

    # ================================
    # Install Telegraf (if not installed)
    # ================================
    Start-BitsTransfer `
        -Source "https://dl.influxdata.com/telegraf/releases/telegraf-1.36.1_windows_amd64.zip" `
        -Destination "C:\Temp\telegraf-1.36.1_windows_amd64.zip"

    Expand-Archive "C:\Temp\telegraf-1.36.1_windows_amd64.zip" `
        -DestinationPath 'C:\Program Files\InfluxData\telegraf\'

    Set-Location "C:\Program Files\InfluxData\telegraf"

    Move-Item .\telegraf-1.36.1\telegraf.* .

    # ================================
    # Fetch Azure Metadata
    # ================================
    $headers = @{ "Metadata" = "true" }
    $azMetadata = Invoke-RestMethod -Headers $headers -Uri "http://169.254.169.254/metadata/instance?api-version=2021-02-01"

    $RESOURCE_ID = $azMetadata.compute.resourceId
    $REGION = $azMetadata.compute.location

    if ([string]::IsNullOrEmpty($RESOURCE_ID) -or [string]::IsNullOrEmpty($REGION)) {
        exit 1
    }

    # ================================
    # Configure Telegraf (PerfMon)
    # ================================
    @"
[agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = "0s"

[[inputs.win_perf_counters]]
  [[inputs.win_perf_counters.object]]
    ObjectName = "NCache Client"
    Instances = ["*"]
    Counters = ["Read Operations/sec", "Write Operations/sec", "Additions/sec", "Deletes/sec", "Fetches/sec", "Updates/sec", "Average Item Size", "Request queue size", "Average us/add", "Average us/fetch", "Average us/remove", "Average us/insert"]
    Measurement = "*"
    IncludeTotal = true

  [[inputs.win_perf_counters.object]]
    ObjectName = "Processor Information"
    Instances = ["*"]
    Counters = ["% Processor Time"]
    Measurement = "win_cpu"
    IncludeTotal = false

  [[inputs.win_perf_counters.object]]
    ObjectName = "Memory"
    Counters = ["% Committed Bytes In Use"]
    Instances = ["------"]
    Measurement = "win_mem"
    IncludeTotal = false

[[outputs.azure_monitor]]
  region = "$REGION"
  namespace_prefix = "$NAMESPACE_PREFIX"
  resource_id = "$RESOURCE_ID"
  timeout = "20s"
"@
 | Set-Content -Path $TELEGRAF_CONFIG -Encoding ascii

    # ================================
    # Enable & Start Telegraf
    # ================================
    & "C:\Program Files\InfluxData\telegraf\telegraf.exe" --service install --config $TELEGRAF_CONFIG
    & "C:\Program Files\InfluxData\telegraf\telegraf.exe" --config $TELEGRAF_CONFIG --test
    & "C:\Program Files\InfluxData\telegraf\telegraf.exe" --service start
}

function ExecuteCommands {
    DownloadNcache
    installNCache
    SetSecurityRules
    InstallAzureMonitoring
}

ExecuteCommands