PowerShell-Schnittstelle

Das LOGINventory PowerShell Add-on stellt dem Benutzer eine vollständige Skript-Schnittstelle für die Windows PowerShell 4.0 oder neuer zur Verfügung. Dadurch wird es möglich, gezielt auf sämtliche Daten in der LOGINventory Datenbank zuzugreifen und diese nach Belieben zu verarbeiten und aufzubereiten.

Das Add-on besteht aus einem PowerShell Provider, um sich in der Baumstruktur von LOGINventory zu bewegen, und mehreren CommandLets (auch: CmdLets), die bestimmte Funktionen abdecken (Reports, Mail, Setzen von Eigenen Eigenschaften, usw.) und laufend erweitert werden.

Neben den speziellen LOGINventory CmdLets können auch alle Standard-CmdLets benutzt werden, wie z.B. Export-Csv (siehe: http://technet.microsoft.com/de-de/library/ee176825.aspx).

Beispiel:

PS LI:\> cd '.\IT Inventory\Assets'
PS LI:\IT Inventory\Assets> Get-LiData | Export-Csv c:\temp\export.txt

System Voraussetzungen

Windows PowerShell Version 3.0 (ab Windows 8 und Windows Server 2012 bereits installiert) oder neuer muss vorhanden sein. Die Standard-Einstellung der Windows PowerShell ist es, die Ausführung von Skripts zu verhindern (ExecutionPolicy = Restricted)! Sie müssen diese Funktion erst freischalten, z.B. über eine administrative PowerShell mit:

C:\> Powershell -command Set-ExecutionPolicy ByPass -scope LocalMachine

PowerShell Aufrufen

Die LOGINventory PowerShell kann entweder über das Ribbon-Menü unter Extras aufgerufen werden oder der Aufruf erfolgt über das mitgelieferte Programm PSC.exe, optional mit Angabe der ExecutionPolicy, einer Skript-Datei oder weiteren Parametern z.B.:

C:\> "%ProgramFiles%\LOGIN\LOGINventory8\PSC.exe" -ExecutionPolicy bypass -file "C:\myscript.ps1" [parameter]

Skripte können innerhalb der LOGINventory PowerShell ohne Einschränkungen ausgeführt werden.

Aufruf der LOGINventory-Powershell aus der Windows-Powershell

Um aus der Windows-Powershell die LOGINventory-Powershell aufzurufen, muss diese zunächst initialisiert werden.

Das folgende Skript wird standardmäßig mitinstalliert und kann unter dem Namen InitOtherClients.ps1 aus dem Ordner "LOGINventory PowerShell Samples" im Startmenü gefunden werden. Dabei ist zu beachten, dass auch die auskommentierten Befehle am Anfang des Skripts entsprechend Ihrer Umgebung ausgeführt werden müssen!

# Init Loginventory environment for other clients like powershell_ise.exe ...

# First, you have to install LOGINventory Powershell compononets by using installutil in an administrative command promptfor the 64 bit Version of the Powershell:
# installutil /i [LoginventoryBinaryPath]\Login.Ventory.PowerShell.CmdLets.dll
# installutil /i [LoginventoryBinaryPath]\Login.Ventory.PowerShell.Provider.dll

# For example: 
# C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /i "C:\Program Files\LOGIN\LOGINventory8\Login.Ventory.PowerShell.CmdLets.dll"
# C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /i "C:\Program Files\LOGIN\LOGINventory8\Login.Ventory.PowerShell.Provider.dll"

# If you experience problems, try also the 32 bit version:
# C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /i "C:\Program Files\LOGIN\LOGINventory8\Login.Ventory.PowerShell.CmdLets.dll"
# C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /i "C:\Program Files\LOGIN\LOGINventory8\Login.Ventory.PowerShell.Provider.dll"


Add-PSSnapin loginventory
Add-PSSnapin loginventorycmdlets

# Set culture to english (no data translation)
[System.Threading.Thread]::CurrentThread.CurrentUICulture = "en-US"

[System.AppDomain]::CurrentDomain.SetPrincipalPolicy([System.Security.Principal.PrincipalPolicy]::WindowsPrincipal)

#[System.AppDomain]::CurrentDomain.SetData("APPBASE", "[LoginventoryBinaryPath]"), for example:
[System.AppDomain]::CurrentDomain.SetData("APPBASE", "C:\Program Files\LOGIN\LOGINventory8")

New-PSDrive  -Scope global -Name LI -PSProvider LOGINventory -Root ""

cd LI:

# have fun :)

Jetzt kann über die unten erklärten Befehle in der Baumstruktur navigiert werden.

Tipp

Falls Sie in Tasks auf die LOGINventory-Powershell zugreifen möchten, dann müssen auch die entsprechenden Teile aus dem Skript übernommen werden.

PowerShell Beispiele

Mit der Installation von LOGINventory werden auch einige Beispiel-Skripts ausgeliefert. Über den LOGINventory-Shortcut PowerShell Samples (zu finden im Startmenü) erhalten Sie in einem Explorer-Fenster eine Übersicht der vorhandenen Beispiele.

Um eines der Beispiel-Skripte zu starten, reicht es:

  • die Konsole PowerShell LOGINventory8 zu öffnen,
  • eine .ps1-Datei des Skriptes via Drag & Drop in das geöffnete LOGINventory-PowerShell-Fenster zu verschieben,
  • die ENTER-Taste zu drücken.

Die Skripte müssen ggf. für Ihre Umgebung angepasst werden:

  • Eventuell lassen sich die Sample-Skripte nicht starten, da Sie keine Berechtigung haben, aus dem Programm-Verzeichnis Skripte zu starten. Kopieren Sie daher das gesamte Samples-Verzeichnis in einen lokalen Pfad (z.B. c:\Scripts).
  • Während des Updates auf eine neue LOGINventory-Version werden die mitgelieferten PowerShell-Samples im Installationsverzeichnis überschrieben, womit Änderungen und Ergänzungen durch den Benutzer verloren gehen. Aus diesem Grund empfehlen wir ebenfalls, die Überarbeitung der Samples nicht im Original-Verzeichnis durchzuführen!
  • In den Skripten werden u.a. Filter auf Asset-Namen gesetzt ('Device.Name' -like "DE*"), die Sie entsprechend anpassen müssen.

Die Beispiel-Skripte sind nachfolgendem Schema aufgebaut:

1   # Call these scripts:
2   # [ProgDir]\PSC.exe -file "path\scriptname.ps1" [parameter]
3   # Save current path, to restore at the end ...
4   $savePath=$PWD
5   cd "LI:\Software Licenses\Product Administration"
6   Get-LiData | Where {$_.'License.Required' -gt $_.'License.Available'}
7   cd $savePath
  • Zuerst wird der aktuelle Pfad gesichert (Zeile 4)
  • Dann wird auf den gewünschten Auswerte-Pfad gewechselt (Zeile 5)
  • Dann die gewünschten CmdLets ausgeführt
  • Schließlich der ursprüngliche Pfad wiederhergestellt (Zeile 7)

Das Konzept des LOGINventory PowerShell Providers

Die Navigation durch die LOGINventory-Baumstruktur erfolgt mit den aus der DOS-Box bekannten Befehlen CD (oder: Set-Location) und DIR (oder: Get-LiData). Die Namen der Knoten im Baum sind in der PowerShell nicht lokalisiert, sie entsprechen somit stets der englischen Bezeichnung; Ausnahme: „Lizenz Management“ heißt in der PowerShell „Software Licenses“. Beim Navigieren mit CD funktioniert auch die Autovervollständigung mit der TAB-Taste. Damit brauchen die Verzeichnis-Namen nicht vollständig ausgeschrieben zu werden.

Wichtig

Die Ergebnisliste jedes einzelnen Knotens kann mit dem CmdLet Get-LiData abgerufen werden.

Verfügbare Befehle

Neben den allgemeinen Windows PowerShell CmdLets (http://technet.microsoft.com/de-de/library/hh849827%28v=wps.620%29.aspx) gibt es LOGINventory-spezifische Befehle. Im Allgemeinen wird die Ausgabe des Befehls über ein where-CmdLet gefiltert als Eingabe-Parameter für weitere CmdLets genutzt.

Daten Abrufen

Syntax: Get-LiData -View <String>

Liefert die Informationen der Detailansicht für den angewählten Knoten im LOGINventory-Baum, für die Standard-Ansicht.

Parameter Mögliche Werte Erforderlich?
-View <String> ChangeLog, ComputerAccounts, UserAccounts nein

Beispiel: Get-LiData –view ComputerAccounts

Geräte Archivieren

Syntax: Disable-LiAsset [-AssetName <String>] [-InputObj <PSObject[]>]

Archiviert die entsprechenden Assets.

Parameter Erklärung Erforderlich?
-InputObject ‹Object› Liste der Geräte ja

Beispiel (über Pipe): Get-LiData | ? name –like DES* | Disable-LiAsset
Beispiel (direkt): Disable-LiAsset -AssetName MeinRechner

Geräte Reaktivieren

Syntax: Enable-LiAsset [-AssetName <String>] [-InputObj <PSObject[]>]

Reaktiviert ausgewählte Assets aus dem Archiv.

Parameter wie beim Archivieren.

Beispiel (über Pipe): Get-LiData | ? name –like DES* | Enable-LiAsset
Beispiel (direkt): Enable-LiAsset -AssetName MeinRechner

Geräte Löschen

Syntax: Remove-LiAsset [-AssetName <String>] [-InputObj <PSObject[]>]

Löscht die ausgewählten Assets endgültig.

Parameter wie beim Archivieren

Beispiel (über Pipe): Get-LiData | ? name –like DES* | Remove-LiAsset
Beispiel (direkt): Remove-LiAsset -AssetName MeinRechner

Setzen von Eigenen Eigenschaften

Syntax: Set-LiCustomProperty -Name ‹String› -Value ‹String|DateTime|Int64›[–AssetName ‹String›] [-InputObj ‹PSObject[]›]

Weist dem angegebenen Asset eine Eigene Eigenschaft zu.

Parameter Erklärung Erforderlich?
-Name <String> Name der (neuen) Eigenschaft, keine Sonderzeichen oder Leerzeichen ja
-Value ‹String/DateTime/Int64› Wert der zu setzenden Eigenschaft ja
-AssetName <String> Name des Geräts, dem die Eigenschaft zugewiesen werden soll ja

Info

Falls einer eigenen Eigenschaft, die nur ein bestimmtest Set an Auswahlmöglichkeiten bietet (=Enum), wie z.B. "FunctionalRole" ein Wert über die Powershell zugewiesen werden soll, muss der Parameter Value folgende Syntax verwenden: -Value ([Login.Ventory.Data.Model.FunctionalRole]::Testing) (falls die Rolle "Testing" zugewiesen werden soll)
Mittels des Befehls [Enum]::GetValues([Login.Ventory.Data.Model.FunctionalRole]) können übrigens die möglichen Werte erfragt werden.

Beispiele:

  • Set-LiCustomProperty –Name "RaumNr" –Value "R 317" -AssetName "Server01"
  • Set-LiCustomProperty –Name "InstDatum" –Value 15.02.2013 –AssetName "Server01"
  • Set-LiCustomProperty -Name "FunctionalRole" -value ([Login.Ventory.Data.Model.FunctionalRole]::Production) -AssetName "Server01"
  • Get-LiData | ? name –like DES* | Set-LiCustomProperty –Name "PreisInECent” –Value 97799

Abfragen von Eigenen Eigenschaften

Syntax: Get-LiCustomProperty -Name ‹String› [–AssetName ‹String›] [-InputObj ‹PSObject[]›]

Liest den Wert einer eigenen Eigenschaft aus.

Parameter Erklärung Erforderlich?
-Name <String> Name der auszulesenden Eigenschaft ja
-AssetName <String> Name des Geräts, von dem die Eigenschaft ausgelesen werden soll ja

Beispiele:

  • Get-LiCustomProperty –Name "RaumNr" -AssetName "Server01"
  • Get-LiData| ? name –eq DESTINY | Get-LiCustomProperty –Name "InstDatum"

Leeren von Eigenen Eigenschaften

Syntax: Remove-LiCustomProperty -Name ‹String›

Leert alle Einträge bei der Eigenen Eigenschaft in der gesamten Datenbank.

Parameter Erklärung Erforderlich?
-Name <String> Name der zu leerenden Eigenschaft ja

Beispiel: Remove-LiCustomProperty –Name "RaumNr"

Einträge aus "Fehlerhafte Inventarisierung" Löschen

Syntax: Remove-LiInventoryInfo

Löscht Einträge aus der Abfrage "Fehlerhafte Inventarisierung".

Beispiel:

CD "\Failed Inventory"
get-lidata | ? targetname -like CL* | Remove-LiInventoryInfo

Journal-Eintrag Hinzufügen

Syntax: Add-LiJournalEntry -Subject ‹String› -Start ‹DateTime› [-End ‹DateTime›] [-Body ‹String›] [-AssetName ‹String›]

Fügt einen Journal-Eintrag hinzu mit den angegebenen Werten.

Beispiel:

get-lidata | ? name -like Des* | Add-LiJournalEntry -Subject Reparatur -Start 15.11.2018 -End 18.11.2018 -Body "CPU wurde getauscht"

Kombination von Befehlen

Wie in den Beispielen oben bereits dargestellt, können einzelne CmdLets kombiniert werden mithilfe der Pipe |. Damit wird die Ausgabe des links von der | stehenden Befehls als Eingabeparameter für das rechts stehende Kommando benutzt.

Beispiel-Aufgabe

„Ergänze in allen Assets, deren Name mit "DES" beginnt, eine Eigene Eigenschaft "PreisInEuroCent" mit dem Preis des Gerätes“:

Lösung

PS LI:\> cd '\IT Inventory\Assets'
PS LI:\IT Inventory\Assets> Get-LiData | where {$_.'name' –like "DES*"} | Set-LiCustomProperty –Name "PreisInEuroCent" –Value 78999