Ivanti DSM - Alle fehlgeschlagenen Policies auf Reinstall stellen

Ivanti DSM - Alle fehlgeschlagenen Policies auf Reinstall stellen

Einleitung

Wer Ivanti DSM im Einsatz hat, kennt das Problem: Manchmal läuft beim Paketieren und bei den Rollouts auch nach langer Test- und Pilotinstallations- Phase nicht immer alles rund.

Fehlende Abhängigkeiten in Paketen oder anders installierte produktive Rechner können schon einmal dafür sorgen, dass einige Policy-Instanzen in Ivanti DSM fehlschlagen. Oft kommen die Fehler auch nur durch Time-Outs. Mit den PSX Powershell Extensions von NWC-Services können Sie solche Policy-Instanzen einfach wieder auf “Reinstallation” gesetzt werden.

Natürlich ist dieses PowerShell Script mit Vorsicht zu geniesen. Meistens gibt es einen triftigen Grund, warum die Policy-Instanzen fehlgeschlagen sind. Nutzen Sie das Script bitte mit Bedacht. Das Sie selbst für das Risiko verantwortlich sind sollte klar sein.

Das PowerShell Script für Ivanti DSM

param
(
  [string]$argServer = "localhost:8090",
  [string]$argUser = "domain\username",
  [string]$argPassword = "Passwort12345",
  [string]$loggedInUser = "", #optional für logging
  [string]$context = "emdb:\rootDSE\Managed Users & Computers\2\. Computers\*"
)

import-module psx7 -DisableNameChecking

$Server = "\\$argServer";
$Username = $argUser;

$global:path = $context
$password = $argPassword | ConvertTo-SecureString -asPlainText -Force

$credential = New-Object System.Management.Automation.PSCredential($Username, $password)

Write-Host "Using context: " + $context

try
{
  new-psdrive -name emdb -root $Server -scope script -psprovider blsemdb -Credential $credential
  emdb:

  $computer = Get-EmdbComputer $context -Recurse

  foreach ($comp in $computer)
  {
    Write-Host "Getting policies for computer ID" + $comp.Name

    $PolicyList = $comp | Get-EmdbPolicyInstance

    Foreach ($instance in $PolicyList)
    {
      if ($instance.ComplianceState -eq "NotCompliant")
      {
        $instance.Reinstall();
        Write-Host $comp.Name " Set Policy " $instance.ID " " $instance.AssignedObjectName.ToString() "to reinstall."

        $file = "C:\temp\" + $loggedInUser + "_done.log"
        $stream = new-object IO.FileStream $file, 'Append', 'Write', 'Read'
        $sWriter = new-object System.IO.StreamWriter $stream;
        $ln = $loggedInUser + "; triggered a reinstall on policy instance: " + $instance.ID + " with the Policy Name: " + $instance.AssignedObjectName.ToString() + ";" + $comp.Name;
        $sWriter.WriteLine($ln)
        $sWriter.close()
      }

    }
  }
}
catch
{
  $stream = new-object IO.FileStream "C:\temp\detpolicies.log", 'Append', 'Write', 'Read'
  $sWriter = new-object System.IO.StreamWriter $stream;
  $sWriter.WriteLine($Error[0].Exception)
  $sWriter.close()
}

Ersetzen Sie die Variablen im Powershell Script unter “Params”, mit den Verbindungsinformationen Ihres Business Logic Servers (BLS) oder übergeben Sie die Parameter an das Script. Daraufhin erledigt das Powershell Script den Rest.

Individuelles Powershell Script für Ivanti DSM gewünscht?

Sie brauchen ein individuelles PowerShell Script für Ivanti DSM? Schauen Sie doch mal in meinen Services-Bereich vorbei. Neben meinem Blog biete ich diverse Dienstleistungen rund ums Programmieren und Consulting an. Gerne können Sie mich auch einfach per E-Mail kontaktieren: griepmarco@protonmail.com oder über das Kontaktformular