Ivanti DSM - Fehlgeschlagene Policies auf Neuinstallieren setzen

Ivanti DSM - Fehlgeschlagene Policies auf Neuinstallieren setzen
Bildrechte: Marco Griep (CC BY-NC-ND) - Geschrieben von: Marco Griep

Jeder, der Ivanti DSM verwendet, kennt das Problem: Manchmal läuft es beim Verpacken und Ausrollen nicht immer reibungslos, selbst nach einer langen Test- und Pilotinstallationsphase.

Fehlende Abhängigkeiten in Paketen oder auf andere Weise installierten produktiven Computern können dazu führen, dass einige Richtlinieninstanzen in Ivanti DSM fehlschlagen. Oft treten die Fehler nur durch Zeitüberschreitungen auf. Mit den PSX Powershell-Erweiterungen von NWC-Services können Sie solche Richtlinieninstanzen problemlos auf “Neuinstallation” zurücksetzen.

Natürlich sollte dieses PowerShell-Skript mit Vorsicht verwendet werden. In den meisten Fällen gibt es einen gültigen Grund, warum die Richtlinieninstanzen fehlgeschlagen sind. Bitte verwenden Sie das Skript mit Bedacht. Es sollte klar sein, dass Sie selbst für das Risiko verantwortlich sind.


Das PSX PowerShell Script

param
(
    [string]$argServer = "localhost:8090",
    [string]$argUser = "domain\username",
    [string]$argPassword = "Passwort12345",
    [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-Skript unter “Parameter” durch die Verbindungsinformationen Ihres Business Logic Servers (BLS) oder übertragen Sie die Parameter in das Skript. Das Powershell-Skript erledigt dann den Rest.