Windows Admin Center direkt herunterladen

18 Oktober 2019

Will man das Windows Admin Center von Microsoft laden, dann wird man momentan auf die Microsoft Evaluationsseite gelenkt. Dort muss man sich registrieren um WAC laden zu können. Zum Glück gibt es einen Direktdownloadlink: https://aka.ms/WACDownload.

Probleme mit Sharepoint 2010 Content Datenbank

3 Oktober 2019

Aufgrund von Optimierungsversuchen oder aus Speicherplatzmangel, im Nachhinein schwierig zu erörtern, hat es auf jeden Fall eine Sharepoint Inhaltsdatenbank zerlegt. Nichts funktionierte mehr.

Was tun?

Zunächst mittels

Stop-Service ‚MSSQL$SHAREPOINT‘ -Verbose –Force

den Datenbankdienst beendet. Die betreffenden Dateien aus dem Verzeichnis C:\Program Files\Microsoft SQL Server\MSSQL10_50.SHAREPOINT\MSSQL\DATA kopiert.

Dann mittels MS-SQL-Management-Studio diesen Befehl ausgeführt:

create database WSS_Content on
(filename = ‚C:\temp\WSS_Content_MySite2017\WSS_Content_MySite2017.MDF‘)
for attach_rebuild_log
go

doch es gab diese Fehlermeldung zurück:

File activation failure. The physical file name "C:\Program Files\Microsoft SQL Server\MSSQL10_50.SHAREPOINT\MSSQL\DATA\WSS_Content_MySite2017_log.LDF" may be incorrect.

The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure.

Meldung 1813, Ebene 16, Status 2, Zeile 1

Could not open new database ‚WSS_Content‘. CREATE DATABASE is aborted.

Danach einen weiteren Versuch gestartet mittels:

create database WSS_Content on
(filename = ‚C:\temp\WSS_Content_MySite2017\WSS_Content_MySite2017.MDF‘)
for ATTACH_FORCE_REBUILD_LOG
go

dies führte zur Meldung:

File activation failure. The physical file name "C:\Program Files\Microsoft SQL Server\MSSQL10_50.SHAREPOINT\MSSQL\DATA\WSS_Content_MySite2017_log.LDF" may be incorrect.
New log file ‚C:\temp\WSS_Content_MySite2017\WSS_Content_MySite2017_log.LDF‘ was created.

Danach die MDF und die LDF-Datei wieder auf den ursprünglichen Server gespielt und den Datenbankdienst wieder mit

Start-Service ‚MSSQL$SHAREPOINT‘ -Verbose –Force

gestartet. Auf einmal flutschte wieder alles.

Evtl. muss noch geprüft werden, dass die Zugriffsrechte für den Benutzer DOMÄNE\SQLServerMSSQLUser$SERVER$SHAREPOINT:(F) bei der MDF- und LDF-Datei korrekt gesetzt sind!

Zugewiesene IP-Adressen von unbekannten Netzwerkgeräten mittels MAC-Adresse ausfindig machen

2 Oktober 2019

Bei aktuellen Betriebssystemen gibt es zig Protokolle, wie man die IP-Adresse von Netzwerkgeräten ausfindig machen kann. da wäre mDNS, Bonjour, LLMNR, SSDP, NDP, UPNP usw. usf. Alle bewegen sich auf unterschiedlichen Schichten. Der Klassiker der Zuordnung zwischen IP-Adresse und Gerät ist aber die MAC-Adresse. Jedes Netzwerkgerät hat eine MAC-Adresse. Wenn man also die MAC-Adresse eines Geräts kennt, wie kann man die zugehörige IP-Adresse rausfinden, wenn keines der obigen Discovery Protokolle aktiv ist bzw. unterstützt wird?

Gehen wir davon aus, dass das zu ermittelnde Gerät auf den DHCP-Modus eingestellt ist und somit seine IPv4-Adresse von einem DHCP-Server im Netz bekommt. Nun könnte man auf diesem Server nachschauen, wie die IP-Adresse lautet. In der Praxis hat man aber nicht immer diese Möglichkeit wegen verschlampter Passwörter und dergleichen. Gehen wir weiter davon aus, dass wir uns in einem üblichen privaten IPv4 Netz mit dem Adressraum 192.168.0.x bewegen.

In diesem Fall könnte man alle Adressen von 192.168.0.0 bis 255 anpingen, falls keine Firewall die Pakete filtert. Das betreffende Gerät würde ein Antwort ICMP-Paket schicken und würde sich damit verraten, bzw. bekannt machen.

Ping.exe 192.168.0.0

Dieser Vorgang kann aber recht mühsam werden, wenn man alle Adressen von Hand eintippen würde. Außerdem schickt Ping 4 Pakete (unter Windows) ab und wartet jeweils eine Sekunde auf eine Antwort.

Für das erste Problem kann man Powershell bemühen und einfach das anpingen automatisieren:

0..255 | % {Ping.exe 192.168.0.$_}

Damit würde man vom gesuchten Gerät irgendwann eine Pingantwort bekommen. Die Vorgehensweise hat allerdings zwei Haken, weil jede Anfrage immer ca. 4 Sekunden dauert. Bei 256 Adressen *4 hat man eine Wartezeit von 1024 Sekunden, also über 17 Minuten. Diese Zeit gilt aber auch nur, wenn ein Gerät auf der Gegenseite antwortet. Wenn das Paket ins Leere läuft, dann dauert es pro Paket 4 Sekunden, also im schlimmsten Fall über eine Stunde! Das ist unpraktikabel. Zum Glück kann aber die Anzahl der Pakete von Ping mittels Parameter N eingestellt werden, also optimiert:

0..255 | % {Ping.exe 192.168.0.$_ –n 1}

Damit bekommt man eine deutliche Geschwindigkeitssteigerung hin.

Aber es gibt noch eine weitere Optimierungsmöglichkeit. Man kann den sogenannten Timeoutwert als Parameter W angeben. Setzt man diesen auf einen sehr kleinen Wert wie z. B. 1ms, dann hat man den kompletten Bereich in ca. zwei Minuten durchforstet.

0..255 | % {Ping.exe 192.168.0.$_ –n 1 –w 1}

Jetzt bleibt noch ein Problem, dass die Ausgabe mehr als unübersichtlich ist. Im Grunde muss man sowieso nicht sehen, ob eine Antwort von einem Ping zurückkommt. Denn sobald eine IP-Adresse mittels Ping erreichbar ist, wird in der ARP-Tabelle, welche mittels ARP.EXE einsehbar ist, ein Eintrag mit der zugehörigen IP- und MAC-Adresse generiert. Hier haben wir nun auch die Verbindung zwischen beiden. Dies sieht z. B. so aus:

arp.exe -a

Schnittstelle: 192.168.0.2 — 0xc
  Internetadresse       Physische Adresse     Typ
  192.168.0.1           00-a4-6c-ee-11-f2     dynamisch
  192.168.0.5           00-03-05-63-12-d9     dynamisch
  192.168.0.255         ff-ff-ff-ff-ff-ff     statisch
  224.0.0.22            01-00-5e-00-00-16     statisch
  224.0.0.252           01-00-5e-00-00-fc     statisch
  239.255.255.250       01-00-5e-7f-ff-fa     statisch

Wir können also die Rückgabe des Ping-Befehls ignorieren und statt dessen die Ausgabe des ARP-Befehls interpretieren.

Damit könnte man so etwas bauen:

0..255|% {$ip="192.168.0.$_"; ping.exe -4 -n 1 -w 1 $ip | out-null; $arp=arp.exe -a | select-string "$ip(?s)(.*)dynam"; If ($arp) {$ip} }

Hier werden einfach nacheinander die IP-Adressen ausgegeben. Natürlich kann man auch die Ausgabe der ARP.EXE direkt verwenden.

arp.exe -a| select -Skip 3

Problem sind hier die weiteren Angaben für die Broadcastadressen.

Um die Sache nun etwas einfacher zu gestalten wäre es toll, wenn man den IP-Adressbereich (hier: 192.158.0.x) automatisch ermitteln könnte, dies könnte man z. B. durch:

Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin dhcp

IPAddress         : 192.168.0.2
InterfaceIndex    : 12
InterfaceAlias    : Ethernet
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Dhcp
SuffixOrigin      : Dhcp
AddressState      : Preferred
ValidLifetime     : 22:17:34
PreferredLifetime : 22:17:34
SkipAsSource      : False
PolicyStore       : ActiveStore

Damit hat man die lokale IP-Adresse seines Rechners. So könnte man den Adressbereich ermitteln:

$iprange=((Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin dhcp).IPAddress)
$iprange=$iprange.Substring(0,$iprange.LastIndexOf(".")+1)
$iprange

Dadurch kann man nun

arp.exe -a| select -Skip 3 |  Select-String $iprange

  192.168.0.1           00-a4-6c-ee-11-f2     dynamisch
  192.168.0.5           00-03-05-63-12-d9     dynamisch
  192.168.0.255         ff-ff-ff-ff-ff-ff     statisch

aufrufen, besser noch:

arp.exe -a| select -Skip 3 |  Select-String $iprange | Select-String -NotMatch "ff-ff-ff-ff-ff-ff"

Fast am Ziel! Jetzt noch alles in Objekte verpacken:

arp.exe -a| select -Skip 3 |  Select-String $iprange | Select-String -NotMatch "ff-ff-ff-ff-ff-ff"| %  { [PSCustomObject]@{IP=($_ -split "\s+")[1];MAC=($_ -split "\s+")[2] } }

IP          MAC
–          —
192.168.0.1 00-a4-6c-ee-11-f2
192.168.0.5 00-03-05-63-12-d9

Ach übrigens, seit Windows 8 gibt es auch ein Cmdlet welches ähnliche, ja sogar noch viel mehr Informationen liefert! Es nennt sich Get-NetNeighbor: https://technet.microsoft.com/en-us/library/hh826147. Bin ich aber auch jetzt erst am Ende des Artikel bei der Recherche drauf gestoßen. Bei Get-NetNeighbor gibt es eine State-Eigenschaft, die nach recht kurzer Zeit von Reachable nach Stale wechselt. Dazu gibt es einen Timeout, näheres ist hier beschrieben: https://support.microsoft.com/en-us/kb/949589. Offensichtlich gibt es auch noch ein Neighbor-Cache-Limit.

Zu obiger Arp-Ausgabe kann man also auch Get-NetNeighbor verwenden:

Get-NetNeighbor -AddressFamily IPv4 | where {$_.state -eq "stale" -or $_.state -eq "reachable"}

Um nun nochmal alles in einen sinnvollen Zusammenhang zu bringen:

$iprange=((Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin dhcp).IPAddress)
$iprange=$iprange.Substring(0,$iprange.LastIndexOf(".")+1)
$iprange

0..255|% {$ip="$iprange$_"; ping.exe -4 -n 1 -w 1 $ip | out-null; $arp=arp.exe -a | select-string "$ip(?s)(.*)dynam"; If ($arp) {$ip} }

$arp=arp.exe -a| select -Skip 3 |  Select-String $iprange | Select-String -NotMatch "ff-ff-ff-ff-ff-ff"| %  { [PSCustomObject]@{IP=($_ -split "\s+")[1];MAC=($_ -split "\s+")[2] } }

$arp

An diesem Punkt vielleicht noch interessant: Manchmal hat man nur eine MAC-Adresse und möchte den zugehörigen Hersteller feststellen, dazu gibt es verschiedene Datenbanken im Internet. Z. B. www.coffer.com/mac_find. Man kann auch direkt eine Abfrage starten http://www.coffer.com/mac_find/?string=00-1b-00.

Noch eine interessante Variante mittel PingAsync: https://p0w3rsh3ll.wordpress.com/2018/04/18/fast-ping/

BITS und Roaming

3 September 2019

Viele Programme wie Chrome oder Adobe Reader nutzen den Windows BITS-Dienst um darüber ihre Updates zu laden.

Wenn man nun aber auf einem Notebook aktiv ist und längere Zeit kein WLAN in Anspruch nimmt sondern ausschließlich per eingebautem LTE-Modem unterwegs ist dann werden die Updates nie geladen denn BITS meldet immer einen TransientError.

Die Sache stellt sich wie folgt dar:

PS > Get-BitsTransfer

JobId                                DisplayName                            TransferType JobState       OwnerAccount
—–                                ———–                            ———— ——–       ————
d110294d-b8cd-4980-8aea-5d0d132eb6ad {A6EADE66-0804-0000-1959-000000000000} Download     TransientError MEINRECHNER\Benutzer

Schaut man sich mehr Details an, dann wird man auch nicht unbedingt gleich schlauer:

PS > (Get-BitsTransfer)[0]|fl *

JobId                   : d110294d-b8cd-4980-8aea-5d0d132eb6ad
DisplayName             : {A6EADE66-0804-0000-1959-000000000000}
Description             :
HttpMethod              : GET
TransferType            : Download
JobState                : TransientError
TransferPolicy          : NoSurcharge
OwnerAccount            : MIKEL480\admin
Priority                : High
RetryInterval           : 300
RetryTimeout            : 7200
TransientErrorCount     : 0
ProxyUsage              : SystemDefault
ErrorContext            : GeneralQueueManager
ErrorCondition          :
InternalErrorCode       : -2145386407
ErrorDescription        : Die Einstellungen der Kostenübernahmerichtlinie des Auftrags bewirken, dass der Auftrag
                          derzeit nicht übertragen werden kann.

ErrorContextDescription : Fehler im BITS-Warteschlangen-Manager.

BytesTotal              : 18446744073709551615
BytesTransferred        : 0
FilesTotal              : 1
FilesTransferred        : 0
CreationTime            : 03.09.2019 10:45:45
ModificationTime        : 03.09.2019 10:45:45
TransferCompletionTime  : 01.01.0001 00:00:00
FileList                : {https://armmf.adobe.com/arm-manifests/win/ArmManifest3.msi}
ProxyList               :
ProxyBypassList         :

Da könnte man lang warten, denn der TransientError löst sich, wie gesagt, erst bei der nächsten LAN oder WLAN-Verbindung auf.

Die Fehlerbeschreibung, “Die Einstellungen der Kostenübernahmerichtlinie des Auftrags bewirken, dass der Auftrag derzeit nicht übertragen werden kann.”, gibt dann doch noch einen Hinweis, dass man es mit einem Kostenproblem, wegen z. B. Roaming zu tun hat.

Hat man nun aber auf dem Handy zum Beispiel eine Tagesflat aktiv, so möchte man diesen Umstand für die Updates ausnutzen. Man kann diesen Zustand ändern, wenn man dies dem BITS-Job mitteilt.

Mit ADMIN-Rechten fügt man der JobID einfach eine TransferPolicy Roaming hinzu und schon beginnt der Download:

PS > $JobId=( Get-BitsTransfer)[0].jobid
PS > Get-BitsTransfer -JobId $JobId| Set-BitsTransfer -TransferPolicy Roaming
PS > Get-BitsTransfer -JobId $JobId

InnoSetup analysieren bzw. auseinandernehmen

8 August 2019

Viele Installationsprogramme sind mit Hilfe von InnoSetup (http://www.jrsoftware.org/) erstellt. Gerade hatte ich das Problem, dass ein Installationsprogramm Schwierigkeiten machte und aufgrund eines schwächelnden Internetdienstes eine Installation nicht möglich war. Um der Sache auf die Spur zu kommen, musste zunächst die Installations-EXE-Datei mittels Innounp (https://sourceforge.net/projects/innounp/) was für Inno-Unpacker steht, entpackt werden.

..\innounp.exe -x -m ..\ProblemSetup.exe

Es werden automatisch Unterverzeichnisse mit den im Setup-Programm enthaltenen Dateien angelegt. Die Verzeichnis-Struktur sieht z. B. so aus:

embedded
{code_Get_InstPath}
{localappdata}
{tmp}
{win}

Dabei enthält das Verzeichnis embedded die Datei CompiledCode.bin welche ein mit RemObject Pascal Script Engine erstellte Datei ist (https://www.remobjects.com/ps.aspx). Möchte man nun verstehen, was in CompiledCode.bin abgeht, kann einem ein kleiner Pascal Script Disassembler mit Namen IFPSTools helfen: https://github.com/Wack0/IFPSTools, er benötigt aber eine PHP-Runtime wie z. B. https://windows.php.net/download#php-7.3. Danach kann man einfach z. B.

.\php.exe .\DisIFPS.php ‚..\embedded\CompiledCode.bin‘ .\diss.txt

aufrufen und man erhält in diss.txt den Code von CompiledCode.bin. Der Code ist zwar etwas gewöhnungsbedürftig zu lesen aber die Struktur und Vorgehensweise kann doch daraus gelesen werden. Wer Pascalscript besser verstehen will, der sollte sich dies hier durchschauen: https://github.com/remobjects/pascalscript.

Eine Alternative zu InnoUnp sei noch genannt: http://constexpr.org/innoextract. Diese Version läuft unter Linux.

Speicherinfos mittels Powershell unter Windows ermitteln

31 Juli 2019

Um schnell einen Überblick über die Arbeitsspeichersituation eines Rechners zu bekommen helfen diese WMI-Informationen:

$Slots=Get-CimInstance -ClassName Win32_PhysicalMemoryArray
$RAM=Get-CimInstance -ClassName Win32_PhysicalMemory
$slots | % {"DIMM Slots: $($_.MemoryDevices)"}
$ram | % {"Memory installed: $($_.DeviceLocator)"; "Memory Size $($_.Capacity/1GB)"}

und gibt dann

DIMM Slots: 2
Memory installed: ChannelA-DIMM0
Memory Size 16
Memory installed: ChannelB-DIMM0
Memory Size 16

aus.

Wenn man erfahren möchte, wie viel Speicher davon benutzt wird, kann man diese Zeilen verwenden:

Get-CimInstance win32_operatingsystem | select @{N="Frei GB";E={$_.FreePhysicalMemory/1MB}}, @{N="Gesamt GB";E={$_.TotalVisibleMemorySize/1MB }}, @{N="Anteil frei in Prozent";E={$_.FreePhysicalMemory*100 / $_.TotalVisibleMemorySize}}

ergibt z. B.:

Frei GB                : 16,7665214538574
Gesamt GB              : 31,8850631713867
Anteil frei in Prozent : 52,5842503862545

Windows Admin Center SSL-Zertifikat erneuern

14 Juli 2019

Wenn man das Windows-Admin-Center auf einem Windows-Server Rechner installiert, wird ein spezieller Gateway-Dienst installiert. Für diesen Dienst kann automatisch ein SSL-Zertifikat erstellt werden. Dies läuft allerdings nur 60-Tage. Danach muss es erneuert werden. Eine Möglichkeit dabei ist, einfach bei den installierten Programmen das Windows-Admin-Center De-Installationsprogramm aufzurufen und dann den Punkt Ändern auswählen. Nun bekommt man nochmal die Möglichkeit ein neues Zertifikat zu erstellen. Diese Methode klappt allerdings nur, wenn man zuvor das alte Zertifikat entfernt hat.

Gehen wir vom Port 8081 für das Windows-Admin-Center aus. Dann kann man mittels Admin-Commandline folgendes abrufen:

PS > netsh http show sslcert

SSL-Zertifikatbindungen:
————————-

    IP:Port                      : 0.0.0.0:8081
    Zertifikathash              : 5104877e8eae1698fea7f3445b5eb0d728e02b95
    Anwendungs-ID               : {3fbbd223-54fa-4cb6-9c95-47eebdf667f8}
    Zertifikatspeichername       : (null)
    Clientzertifikatsperre überprüfen : Enabled
    Zur Sperrüberprüfung ausschließlich zwischengespeichertes Clientzertifikat verwenden : Disabled
    Verwendungsüberprüfung                  : Enabled
    Sperraktualisierungszeit    : 0
    Zeitlimit für URL-Abruf        : 0
    Steuerelement-ID               : (null)
    Steuerelement-Speichername               : (null)
    DS-Zuordnungsverwendung              : Disabled
    Clientzertifikat aushandeln : Disabled
    Verbindungen ablehnen           : Disabled
    HTTP2 deaktivieren                : Not Set

Um das Zertifikat zu entfernen ruft man

PS C:\Users\Administrator> netsh http delete sslcert ipport=0.0.0.0:8081

Das SSL-Zertifikat wurde erfolgreich gelöscht.

auf. Nun kann man wie oben beschrieben das neue Zertifikat erstellen lassen.

Um zu prüfen, ob das neue Zertifikat wirklich das aktuelle ist, kann man z. B. so weitere Daten zum Zertifikat ermitteln, dazu wird der Zertifikatshash benötigt – der in unserem Beispiel 5104877e8eae1698fea7f3445b5eb0d728e02b95 lautet – und mittels Powershell so ausgelesen werden kann:

PS > $cert=dir cert:\ -Recurse | where thumbprint -match 5104877e8eae1698fea7f3445b5eb0d728e02b95
PS > $cert[0]|fl *

Dabei werden mehrere Zertifikate, welche aber alle das gleiche darstellen zurückgegeben, deshalb werden nur die Daten des ersten Zertifikats zurückgegeben.

Eigentlich sollte es auch möglich sein alles per Commandline zu steuern, aber meine bisherigen Versuche waren nicht von Erfolg gekrönt. Zu diesem Thema ein wichtiger Link: https://www.der-windows-papst.de/2018/06/25/windows-admin-center-honolulu-installieren/. Auch sollte dabei das Windows-Admin-Center Gateway wahrscheinlich neu gestartet werden: Restart-Service ServerManagementGateway. Half trotzdem bisher noch nichts.

Windows 10 Grafikdarstellung Reset

6 Juli 2019

Bei ziemlich viel, gleichzeitig geöffneten Fenstern unter Windows 10 kann es schon mal vorkommen, dass die Darstellung leidet und bestimmte Ressourcen ausgehen, so dass die benutzten Programme abstürzen. Manchmal bleibt dann am Bildschirm der Schatten der zuletzt geöffneten Fenster stehen.

Mit der Tastenkombination STRG+Shift+Win+B kann man einen Grafikkartentreiber-Reset durchführen. Der Bildschirm wird dann kurz schwarz und meldet sich dann wieder zurück. Wenn die Darstellung dann immer noch nicht korrekt sein sollte, muss noch der Windows Desktop Manager gestoppt werden. Dazu geht man einfach in den Taskmanager und killt DWM.EXE. Geht auch per Commandline. Falls es nicht klappt, hilft der Prozessexplorer von Sysinternals.

D3DCompiler_43.dll oder ähnliche Datei fehlt Fehlermeldung unter Windows 10 bei 3D-Anwendungen

25 Juni 2019

Bei einigen 3D-Anwendungen wird die Datei D3DCompiler_43.dll benötigt um 3D-Objekte für die Darstellung oder Berechnung umzurechnen. Genauer gesagt, die Datei ist der “Direct3D HLSL Compiler”. Leider gibt es einige Programme, welche die erforderlichen DirectX-Dateien nicht in ihrer Distribution enthalten. Eigentlich ist es die Aufgabe des Betriebssystem oder des passenden .Net Frameworks dafür zu sorgen. Fakt ist aber, dass in diesem Bezug viel Chaos herrscht.

Das Problem äußert sich beim starten betreffender Anwendungen z. B. über diese Fehlermeldung:

Error: DLL D3DCompiler_43.dll Das angegebene Modul wurde nicht gefunden Ausnahme von HResult0x8007007E

Das Problem lässt sich lösen (sogar auf einem aktuellen Windows 10 1903), wenn man die Datei aus diesem Link herunterladet und startet: https://www.microsoft.com/de-DE/download/details.aspx?id=35. Dadurch wird der “DirectX-Endbenutzer-Runtimes Web Installer” gestartet, welche die fehlenden Dateien nachrüstet.

Diese Methode sorgt dafür, dass im SYSTEM32-Verzeichnis einige D3DCompiler-Dateien hinzugefügt werden:

D3DCompiler_33.dll
D3DCompiler_34.dll
D3DCompiler_35.dll
D3DCompiler_36.dll
D3DCompiler_37.dll
D3DCompiler_38.dll
D3DCompiler_39.dll
D3DCompiler_40.dll
D3DCompiler_41.dll
D3DCompiler_42.dll
D3DCompiler_43.dll
D3DCompiler_47.dll

Windows 10 hat von Haus aus eigentlich nur die D3DCompiler_47.dll an Bord.

Hier noch eine Variante wo .Net Framework-Updates geblockt werden, betrifft allerdings nur Versionen vor Windows 10: https://support.microsoft.com/de-de/help/4020302/the-net-framework-4-7-installation-is-blocked-on-windows-7-windows-ser

Qnap virtuelle Rechner per Terminal mittels virtsh verwalten

22 Juni 2019

Bei QNAP NAS-Modellen mit einem Intel Prozessor kann man virtuelle Maschinen direkt auf dem NAS mittels KVM einrichten. Die Oberfläche der Virtualization Station ist schön aufgeräumt und einfach gehalten. Aber aus genau diesem Grund findet man nicht alle Punkte, die man eigentlich so braucht.

In der aktuellen QTS 4.4.1 Version ist libvirt 1.2.19 mit Hypervisor QEMU 2.3.1 enthalten. Die Frage ist aber wie kommt man an diese Informationen? Am einfachsten man meldet sich mittels SSH am NAS an und geht mittels Busybox und dem Befehl virsh auf die Suche. Virsh ist ein mächtiges Kommandozeilen-Tool bzw. Shell zur Verwaltung von virtuellen Maschinen. Blöd nur, dass auf anhieb virsh nicht aufrufbar ist. Man muss zunächst zwei Umgebungsvariablen definieren:

export LD_LIBRARY_PATH=/QVS/usr/lib:/QVS/usr/lib64/
export PATH=$PATH:/QVS/usr/bin/:/QVS/usr/sbin/

Danach steht virsh direkt zum Aufrufen bereit, z. B. so:

virsh version