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