Probleme mit leeren Bildschirm bei Sichern und Wiederherstellen unter Windows 7 und allgemeines Sicherungsdebugging

30 Mai 2016

Datensicherungen sind wichtig, gerade in Zeiten von Cryptolocker-Malware. Was macht man aber, wenn man mit einer leeren Seite und ohne Fehlermeldung begrüßt wird, wenn man den Sicherungsstatus überprüfen möchte?

In einem Fall unter Windows 7 zeigte der Aufruf der “Sichern und Wiederherstellen”-Seite über die Systemsteuerung einfach nur ein leeres Bild. Schlecht so was. Auch der direkte Aufruf von sdclt.exe brachte die gleiche Darstellung. Hier ist das Problem nochmal mit Bildern beschrieben: http://www.borncity.com/blog/2014/09/29/windows-sichern-und-wiederherstellen-bleibt-leer/.

Gut wenn die Oberfläche nichts anzeigt, dann schaut man halt tiefer und ein Aufruf von wbadmin get versions brachte erschreckendes zu Tage, dass die letzte Sicherung schon ein paar Wochen her ist!

Dann der nächste Blick in die Windows Ereignisanzeige unter Anwendungs- und Dienstprotokolle/Microsoft/Windows/Backup. Oh je, der Eindruck mit denen von wbadmin stimmt überein, keine Backups wurden für die letzten Wochen protokolliert.

An was liegt es? Ist womöglich die Ausführung in der Aufgabenplanung deaktiviert? Witzig: Nein, die scheint immer schön brav jeden Tag durchzulaufen und meldet keine Fehler!

Gibt es hier einen Masterplan? Keine Ahnung, zunächst kann man natürlich die Ressourcenüberprüfung mittels SFC.EXE /SCANNOW drüberjagen, doch die brachte nichts.

Jetzt sollte man sich mal Gedanken machen, welche Dienste für eine Datensicherung benötigt werden. Da gibt es drei:

PS> Get-Service wbengine, SDRSVC, VSS

Status   Name               DisplayName
——   —-               ———–
Stopped  SDRSVC             Windows-Sicherung
Stopped  VSS                Volumeschattenkopie
Stopped  wbengine           Blockebenen-Sicherungsmodul

stellt sich die Frage, lassen die sich starten?

PS> Start-Service wbengine, SDRSVC, VSS
start-Service : Der Dienst "Windows-Sicherung (SDRSVC)" kann aufgrund des folgenden Fehlers nicht gestartet werden:
Der Dienst SDRSVC kann nicht auf dem Computer . gestartet werden.

In Zeile:1 Zeichen:1
+ start-Service wbengine, SDRSVC, VSS
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service],
   ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStartService,Microsoft.PowerShell.Commands.StartServiceCommand

PS> Get-Service wbengine, SDRSVC, VSS

Status   Name               DisplayName
——   —-               ———–
Stopped  SDRSVC             Windows-Sicherung
Running  VSS                Volumeschattenkopie
Running  wbengine           Blockebenen-Sicherungsmodul

OK, das ist eine Aussage: Der Dienst kann nicht gestartet werden, weil der Dienst nicht gestartet werden kann! Blöd so was, aber warum kann er nicht gestartet werden?

PS> Get-Service SDRSVC | fl *

Name                : SDRSVC
RequiredServices    : {RPCSS}
CanPauseAndContinue : False
CanShutdown         : False
CanStop             : False
DisplayName         : Windows-Sicherung
DependentServices   : {}
MachineName         : .
ServiceName         : SDRSVC
ServicesDependedOn  : {RPCSS}
ServiceHandle       : SafeServiceHandle
Status              : Stopped
ServiceType         : Win32OwnProcess
StartType           : Disabled
Site                :
Container           :

Klar, wenn ein Dienst deaktiviert ist, dann kann er auch nicht gestartet werden!

Also setzen wir den Dienst auf seinen Standardwert:

PS> Set-Service SDRSVC -StartupType Manual

Nun kann man mittels SDClt.EXE oder, wie gewohnt, mit vielen Klicks den Punkt “Sichern und Wiederherstellen” aufrufen und siehe da, es wird wieder alles angezeigt!

Ob dann die Sicherung auch wirklich klappt? Keine Ahnung, aber wer so eine Einstellung hat, der hat vielleicht einen weiteren Dienst deaktiviert, also schauen wir uns noch die anderen Dienste an:

PS> Get-Service wbengine, SDRSVC, VSS| select name, displayname, starttype

Name     DisplayName                 StartType
—-     ———–                 ———
SDRSVC   Windows-Sicherung              Manual
VSS      Volumeschattenkopie            Manual
wbengine Blockebenen-Sicherungsmodul    Manual

Also sieht ja gut aus.

Da wir gerade dabei sind, wenn es schon Probleme gibt, dann helfen diese Abfragen (Powershell 3.0 muss vorhanden sein):

Get-WinEvent -LogName Microsoft-Windows-Backup|select -First 10

Get-ScheduledTask -Recurse | where name -match backup| select name,status,lastruntime,lasttaskresult, nextruntime| ft –AutoSize

Get-Service wbengine, SDRSVC, VSS| select name, displayname, starttype, status

vssadmin list writers

Bei Get-ScheduledTask ist wichtig LastTaskResult mit anzuzeigen, weil dies standardmäßig nicht mit aufgelistet wird aber wertvolle Hinweise geben kann.

Bei vssadmin list writers sind insbesondere die Angaben zum letzten Fehler der einzelnen Writer zu beachten! Eine Idee, wie man mit vssadmin umgeht, geben diese beiden Artikel: https://newyear2006.wordpress.com/2015/12/19/windows-8-1-backup-mit-wbadmin-bricht-mit-fehler-auf-das-bereitgestellte-sicherungsvolume-konnte-nicht-zugegriffen-werden-ab-bzw-fehlercode-0x807800c5/ und https://newyear2006.wordpress.com/2011/09/09/sbs2011-backup-bricht-mit-fehler-2155348129-ab-und-was-hat-das-mit-sharepoint-updates-zu-tun/.

Vorsicht mit dem Start-MPWDOScan Cmdlet bzw. dem Offline überprüfen bei Windows 10

29 Mai 2016

Wer mit seinem Powershell auf aktuellen Windows 10 Versionen herumspielt, der könnte über das neue Cmdlet Start-MPWDOScan stolpern. Ein etwas kryptischer Name. Es gibt bereits eines mit dem Namen Start-MpScan, welches den Windows Defender aufruft und einen Scanlauf startet.

Aber für was steht nun WDO? Ganz einfach für Windows Defender Offline. Also kurz, damit kann man den Windows Defender im Offlinemodus starten. Dazu wird die aktuelle Windows Sitzung heruntergefahren und der Rechner bootet den Windows Defender Offline Scanner. Der führt seinen Scanlauf durch und bootet anschließend wieder das vorhergehend aktive Windows.

Seit der Verison v1511 von Windows 10 gab es nur das Cmdlet aber bei den aktuellen Preview-Versionen, gibt es nun bei den Windows Einstellungen bei “Update und Sicherheit” unter “Windows Defender” die Option “Windows Defender Offline” wo man den Button “Offline überprüfen” anklicken kann.

Soweit so gut und sicher eine prima Sache.

Wenn da nicht wie immer die berühmten Nebenwirkungen wären. Zunächst macht es Sinn, bevor man Start-MPWDOScan aufruft mittels Update-MpSignature die aktuellen Virendefinitionen zu laden, denn der Offline-Scanner legt einfach los und kann kein Update durchführen!

Nach dem Aufruf von Start-MPWDOScan oder anklicken von “Offline prüfen” passiert zunächst einmal nichts. Erst nach ca. einer Minute erscheint auf einmal ein Hinweisfenster, dass nun alle Anwendungen geschlossen werden. Wenn man dies nicht weiß, ist dies ziemlich verwunderlich, weil man einen Befehl absetzt und keine Reaktion bekommt und dann unvermittelt doch. Man kann zwar das Hinweisfenster schließen aber ein Abbruch des Vorgangs ist nicht direkt möglich! Nicht gespeicherte Daten gehen unweigerlich verloren! Wer schnell ist, kann allerdings per Win+R oder per Eingabeaufforderung ein “Shutdown /a” absenden, damit wird der Vorgang zunächst abgebrochen.

Wer nach einem Abbruch mittels “Shutdown /a” später dann versucht den Vorgang kontrolliert nochmal neu zu starten, der kann nach Eingabe von Start-MpWDOScan lange warten, denn es passiert einfach nichts mehr. Erst ein Neustart des Rechners mittels “Restart-Computer” bzw. normalem Neustart führt zur Offline-Prüfung, d. h. nach dem Abbruch macht der Rechner zunächst auf beleidigt.

Nächstes Problem ist die Art des Scanlaufs. Normalerweise kann man mittels “Set-MpPreference –ScanParameters FullScan” festlegen, dass man einen vollständigen Scanlauf machen möchte. Der eingebaute Windows Defender Offline ignoriert diese Einstellung und führt immer nur eine Schnellprüfung durch.

Wenn der Scanlauf beendet ist, stellt sich die Frage, wie man weiß, dass nichts gefunden wurde. Man könnte die Windows Ereignisanzeige mittels

Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational"|select -First 10

bemühen aber dort stehen eher wenig Infos drin. Es wird lediglich vermerkt, wann ein Offlinescan von der Anwendung “%1” initiiert wurde. Dies wird angezeigt durch die Nachricht “%1 hat Windows Defender Offline heruntergeladen und konfiguriert und führt es beim nächsten Neustart aus.”, ID 2030. Danach gibt es noch die Meldung “In der Konfiguration von Windows Defender wurde eine Änderung erkannt. Falls dies unerwartet ist, überprüfen Sie die Einstellungen, da die Änderung möglicherweise von Schadsoftware verursacht wurde…”, ID 5007. Dabei wird noch ein Registrierungskey genannt: HKLM\SOFTWARE\Microsoft\Windows Defender\Scan\OfflineScanRun, der von 0x1 auf 0x0 gesetzt wurde. Wenn es stimmt.

Da wohl niemand am Bildschirm kleben bleibt, wenn der Scan läuft, der fragt sich, wie kann man feststellen, ob der Scan ohne Probleme verlief? Dazu findet man im Verzeichnis C:\Windows\Microsoft Antimalware\Support entsprechende Log-Dateien. Die Kurzfassung steht in MSSSWrapper.LOG. Der Name MSSS steht für Microsoft Standalone System Sweeper, dem früheren Namen des Windows Defender Offline.

Es gibt auch noch Dateien mit Namen MPDetection-Datum-Uhrzeit.LOG und MPLog-Datum-Uhrzeit.LOG, dort stehen auch noch Infos.

In beiden Dateien, MSSSWrapper.LOG und MPDetection*.LOG werden Virenfunde verzeichnet, indem auf “Number of threats from scan: x”, “Found Virus:” und “DETECTION Virs:” darauf hingewiesen wird.

Wer selber die Reaktion des Windows Defender Offline testen möchte, der schaltet einfach mittels “Set-MpPreference –DisableRealtimeScanning $true” den Realtimescan-Modus ab. Danach kann man Problemlos mittels “New-Eicar –Path C:\Windows” ein Test-Virus pflanzen, der dann vom anschließenden Offline Scanlauf erkannt werden sollte. New-Eicar bekommt man hier: https://github.com/obscuresec/PowerShell/blob/master/New-Eicar.

Bleibt noch am Ende die Frage, wie sicher die Offline Methode ist. Denn wenn ein System bereits infiziert ist, könnte eine Malware auch nach dem Start des Offline-Scanners aktiv sein. Leider gibt es keine verwertbaren Infos wie dieser Vorgang vonstatten geht, so dass man hier nur spekulieren kann. Scheinbar wird ein WinPE hochgefahren, aber es wird dabei scheinbar auf Dateien aus dem bestehenden System zurückgegriffen…

Wobei es aber auch klappen könnte, wenn man Confirm-SecureUEFIBoot mit $true bestätigt bekommt, dann könnte theoretisch geprüft werden, ob das System sauber ist. Aber ob das stattfindet?

Übermittlungsoptimierung frisst die gesamte Bandbreite

28 Mai 2016

Eigentlich ist die Idee von Peer2Peer Protokollen reizvoll. So ermöglicht Windows 10 z. B. Updates über Peer2Peer von anderen Rechnern im Internet anstatt von Microsoft direkt zu laden. Leider hapert es an der Umsetzung.

Das Problem trat massiv bei einer aktuellen Windows 10 Preview mit Build 14295 auf. Als gerade eine neuere Buildversion verfügbar wurde, konnte man mit anderen Rechnern im selben Netzwerk nicht mehr vernünftig ins Internet. Die massiven Downloads, mehrere Verbindungen vom selben Rechner des neuen Builds, sorgten auf den anderen Rechnern für Stillstand.

Am Anfang war dies gar nicht klar, denn Windows Updates hatten früher noch nie Probleme gemacht. Diese laufen normalerweise über den Intelligenten Hintergrundübertragungsdienst (BITS). Erst Windows 10 führte die Möglichkeit der Peer2Peer Updates ein. Als das Problem dem Windowsrechner zugeordnet war, ging es an die Ursachenforschung.

Ein Get-Bitstransfer –AllUsers brachte gähnende Leere. Also war der BITS nicht Schuld, aber was war es dann, wo die Bandbreite fraß? Also den Windows Ressourcenmonitor angeworfen und beim Netzwerkverkehr nach den Downloads geschaut. Tatsächlich war hier der SVCHOST.EXE netsvcs mit einem fetten Download beteiligt. Nachdem zuerst der BITS-Dienst ausgeschaltet wurde, vielleicht hat er ja eine geheime Übertragung am Laufen, gab es immer noch keine Besserung.

Dann mal geschaut, was alles hinter netsvcs steckt:

$netsvcs= (Get-ItemProperty ‚registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost\‘ -Name netsvcs).netsvcs

$netsvcs
CertPropSvc
SCPolicySvc
lanmanserver
gpsvc
IKEEXT
iphlpsvc
seclogon
AppInfo
msiscsi
EapHost
schedule
winmgmt
browser
ProfSvc
SessionEnv
wercplsupport
dosvc
DcpSvc
wlidsvc
NcaSvc
NetSetupSvc
Themes
RetailDemo
lfsvc
FastUserSwitchingCompatibility
Ias
Irmon
Nla
Ntmssvc
NWCWorkstation
Nwsapagent
Rasauto
Rasman
Remoteaccess
SENS
Sharedaccess
SRService
Tapisrv
Wmi
WmdmPmSp
wuauserv
BITS
ShellHWDetection
LogonHours
PCAudit
helpsvc
uploadmgr
dmwappushservice
BDESVC
XboxNetApiSvc
UsoSvc
XblGameSave
DmEnrollmentSvc
DsmSvc
UserManager
XblAuthManager
AppMgmt

Na super da kommt richtig Freude auf. Um mehr Infos zu bekommen, könnte man nun

$netsvcs | Get-Service

aufrufen, da aber sicher nicht alle Dienste laufen, macht es mehr Sinn gleich mal die nicht vorhandenen und nicht laufenden auszunehmen:

($sr=$netsvcs | Get-Service | where status -eq running) 2> $null

Status   Name               DisplayName
——   —-               ———–
Running  CertPropSvc        Zertifikatverteilung
Running  lanmanserver       Server
Running  iphlpsvc           IP-Hilfsdienst
Running  AppInfo            Anwendungsinformationen
Running  schedule           Aufgabenplanung
Running  winmgmt            Windows-Verwaltungsinstrumentation
Running  browser            Computerbrowser
Running  ProfSvc            Benutzerprofildienst
Running  SessionEnv         Konfiguration für Remotedesktops
Running  dosvc              Übermittlungsoptimierung
Running  Themes             Designs
Running  lfsvc              Geolocation-Dienst
Running  SENS               Benachrichtigungsdienst für Systeme…
Running  ShellHWDetection   Shellhardwareerkennung
Running  UserManager        Benutzer-Manager
Running  AppMgmt            Anwendungsverwaltung

Damit wird die Sache schon übersichtlicher und man hat nähere Infos zum Geschehen.

Und so kann man sich dann die Frage stellen, was ist ein Übermittlungsoptimierungs-Dienst dosvc? Genauer gesagt handelt es sich dabei um die Windows Update Übermittlungsoptimierung. Also offizielle Infos dazu: http://windows.microsoft.com/de-de/windows-10/windows-update-delivery-optimization-faq.

Dann werden auch schnell die Probleme offensichtlich: https://social.technet.microsoft.com/Forums/en-US/b94d8e74-58de-451a-b137-7ec2028adc27/delivery-optimization-service-downloading-something-and-using-all-my-bandwidth?forum=win10itprogeneral

Get-ItemProperty registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dosvc -Name ServiceDLL| select servicedll

ServiceDll
———-
C:\WINDOWS\system32\dosvc.dll

Also ist die dosvc.dll die DLL, die es zu beachten gibt.

Nachdem das nun geklärt ist, so dann sollten wir mal wieder mit Mythen aufräumen, die sich leider immer wieder ergeben und ohne jeden Beweis behauptet werden.

Hier https://social.technet.microsoft.com/Forums/forefront/en-US/074181bc-1e1f-4b06-b816-6d9e1dac3da4/wudo-clarification-can-it-tunnel-out-through-the-fireall-protecting-my-network?forum=win10itprosecurity und hier http://www.wintotal.de/windows-10-p2p-update-verteilung-deaktivieren/ behauptet jemand, das für TCP und UDP vom Übertragungsoptimierungs-Dienst zwei unterschiedliche Ports benutzt werden. Einmal 7680 bei TCP und 3544 UDP. Dem ist aber nicht so.

Schauen wir uns zunächst die Regel in der Firewall an, ob es da was passendes gibt:

Get-NetFirewallServiceFilter -Service dosvc|Get-NetFirewallRule

Name                  : DeliveryOptimization-TCP-In
DisplayName           : Übermittlungsoptimierung (TCP eingehend)
Description           : Eingehende Regel, die der Übermittlungsoptimierung die Verbindung mit Remoteendpunkten erlaubt.
DisplayGroup          : Übermittlungsoptimierung
Group                 : @%systemroot%\system32\dosvc.dll,-100
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Allow
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : Die Regel wurde erfolgreich vom Speicher aus analysiert. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Name                  : DeliveryOptimization-UDP-In
DisplayName           : Übermittlungsoptimierung (UDP eingehend)
Description           : Eingehende Regel, die der Übermittlungsoptimierung die Verbindung mit Remoteendpunkten erlaubt.
DisplayGroup          : Übermittlungsoptimierung
Group                 : @%systemroot%\system32\dosvc.dll,-100
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Allow
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : Die Regel wurde erfolgreich vom Speicher aus analysiert. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Also es gibt eine Regel für TCP und UDP und welche Ports werden nun benutzt?

Get-NetFirewallServiceFilter -Service dosvc|Get-NetFirewallRule|Get-NetFirewallPortFilter

Protocol      : TCP
LocalPort     : 7680
RemotePort    : Any
IcmpType      : Any
DynamicTarget : Any

Protocol      : UDP
LocalPort     : 7680
RemotePort    : Any
IcmpType      : Any
DynamicTarget : Any

Ergo, nix UDP auf 3544. Übrigens Port 3544 wäre Teredo, wahrscheinlich hat da jemand nicht genau genug geschaut und die Leute übernehmen immer alles ohne es zu prüfen. http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=3544

Nützliche Powershellfunktionen zum Hin- und Herkonvertieren in Base64 und Splitten einer Zeichenkette

27 Mai 2016

Ohne viel blabla:

Function ConvertTo-Base64 {

    [CmdletBinding()]
    [OutputType([string])]
    Param (
        [string]$String
    )
    [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($String))

}

Function ConvertFrom-Base64 {
 
    [CmdletBinding()]
    [OutputType([string])]
    Param (
        [string]$String
    )
    [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($String))

}

Function Split-String {

# splittet einen String in Blöcke mit einer bestimmten Länge

    [CmdletBinding()]
    Param (
        [parameter(Mandatory=$true)]
        [string]$String,
        [int]$BlockLength=60
    )
   
    $blocks = [System.Math]::Floor($String.Length / $BlockLength)
    $newString = ""

    for ($line = 0; $line -lt $blocks; $line++) {
        $newString += $String.Substring($line * $BlockLength, $BlockLength) + [System.Environment]::NewLine
    }

    If ($blocks * $BlockLength -lt $String.Length) {
        $newString += $String.Substring($blocks * $BlockLength)
    }

    $newString
}

Damit kann man eine Datei einlesen und in einen Base64-String umwandeln, etwas bearbeiten und wieder zurückwandeln:

$c=get-content -Raw C:\windows\win.ini
$b=ConvertTo-Base64 $c
# Split-String bricht den String nach 60 Zeichen um
$s=Split-String $b
$nc=ConvertFrom-Base64 (Split-String $s)
# Trotz Konvertierung und Splitten ist der konvertierte String identisch
$c -eq $nc

Die mysteriöse Windows 10 App mit Namen “App-Verbindung” bzw. “App connector” oder wie bekommen ich mehr Infos über unbekannte installierte Apps?

13 Mai 2016

Wer bei seinem Windows 10 aufmerksam seine Einstellungen für den Datenschutz studiert, dem wird die App “App-Verbindung” auffallen. Sie taucht z. B. bei Position, Kamera, Kontakte und Kalender auf.

Schon seit letztem Jahr wird spekuliert, was es mit der App auf sich hat: http://www.howtogeek.com/247661/nobody-knows-what-windows-10s-app-connector-is-and-microsoft-wont-explain-it/. Oder http://superuser.com/questions/1003207/windows-10-what-is-the-microsoft-app-connector-and-why-would-it-want-need-acc. Die Officehilfe erwähnt die App sogar im Zusammenhang mit Synchronisationsproblemen mit Windows Mail oder Windows Kalender: https://support.office.com/de-de/article/Beheben-von-Synchronisierungsproblemen-in-den-Mail-und-Kalender-Apps-in-Windows-10-0dd86c69-18f3-4f73-9d3d-375bdc9c3e34. Wie so oft gibt es keine ordentliche Beschreibung von Microsoft oder vernünftige Quellenangaben.

Also versuchen wir mal die nötigen Infos selber zusammen zu tragen. Dabei kann man die prinzipielle Vorgehensweise hier für beliebige Apps unter Windows 10 verwenden.

Man kann sich mittels Powershell nähere Infos zur App holen, indem man

Get-AppxPackage -AllUsers |where name -eq "Microsoft.Appconnector"

eingibt, erhält man z. B.

Name                   : Microsoft.Appconnector
Publisher              : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Architecture           : Neutral
ResourceId             :
Version                : 1.3.3.0
PackageFullName        : Microsoft.Appconnector_1.3.3.0_neutral__8wekyb3d8bbwe
InstallLocation        : C:\Program Files\WindowsApps\Microsoft.Appconnector_1.3.3.0_neutral__8wekyb3d8bbwe
IsFramework            : False
PackageFamilyName      : Microsoft.Appconnector_8wekyb3d8bbwe
PublisherId            : 8wekyb3d8bbwe
PackageUserInformation : {S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ-1001 [WIN\user]: Installed}
IsResourcePackage      : False
IsBundle               : False
IsDevelopmentMode      : False

Von Interesse dabei ist der Installationspfad. Da kann man dann selber nachschauen, was die App so kann und macht. Jede App unter Windows hat eine Manifest-Datei, in welcher festgelegt ist, welche Zugriffsrechte die App möchte.

Also holen wir uns einfach doch mal diese Manifest-Datei:

$app=Get-AppxPackage -AllUsers |where name -eq "Microsoft.Appconnector"
$mf=[xml](Get-content "$($app.InstallLocation)\AppxManifest.xml")

In $mf steht nun der komplette Manifest-Dateiinhalt zur Verfügung. Durch die Verwendung des Typkonverters [xml] auch noch leicht verwertbar. Schauen wir uns mal einen Eintrag an:

$mf.Package.Applications.Application.VisualElements

DisplayName       : ms-resource:ConnectorStubTitle
Description       : ms-resource:ConnectorStubTitle
BackgroundColor   : transparent
AppListEntry      : none
Square150x150Logo : images\Logo.png
Square44x44Logo   : images\AppConnectorAppList.png
SplashScreen      : SplashScreen

Nicht sehr ergiebig oder? Allerdings ist ein Eintrag interessant, nämlich AppListEntry. Dieser ist mit None definiert und genau dieser ist es, warum die App nicht im Startmenü oder bei der Suche mittels Cortana auftaucht! Weitere Infos zu VisualElements bzw AppListEntry: https://msdn.microsoft.com/en-us/library/windows/apps/dn934817.aspx.

Neben VisualElements ist dann noch das Element Capabilities von Bedeutung:

($mf.Package.Capabilities).Capability

Name
—-
internetClient
picturesLibrary
videosLibrary
removableStorage
appointments
contacts
phoneCall

Es definiert, worauf die App Zugriff haben möchte. Also unsere unbekannte App möchte ins Internet, unsere Bilder und Videos anschauen können, auf Wechseldatenträger zugreifen, Kontakte und Termine sehen und zu guter Letzt noch die Anruferliste sehen. Also eine ganze Menge!

Aber das war noch nicht alles, sie will auch noch auf die Webcam zugreifen und Positionen abfragen:

($mf.Package.Capabilities).DeviceCapability

Name
—-
webcam
location

Zum Themenkomplex Capabilities findet man hier noch weitere Infos: https://msdn.microsoft.com/en-us/library/windows/apps/dn934741.aspx.

Für die Frage aber, was die App denn nun macht ist folgender Eintrag relevant:

$mf.Package.Applications.Application

Id  StartPage    VisualElements
–  ———    ————–
App default.html VisualElements

Der sagt nichts anderes aus, dass wenn App-Verbindung gestartet wird, dass dann default.html aufgerufen wird. Also eine lokale Internetseite. Deren Inhalt kann man sich auch ganz einfach wieder anschauen:

Get-Content "$($app.InstallLocation)\$($mf.Package.Applications.Application.StartPage)"

und erhält:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title id="applicationName"></title>

    <!– Connector.StubApplication references –>
    <link href="/css/default.css" rel="stylesheet" />
    /js/font%20style=
</head>
<body>
</body>
</html>

Also da passiert jetzt nicht so wahnsinnig viel. Allerdings könnte ja nun mittels default.js die Party abgehen. Also holen wir uns den Inhalt auch noch:

$html=[xml](get-content "$($app.InstallLocation)\$($mf.Package.Applications.Application.StartPage)")

Wir nutzen wieder den Typekonverter um das gewünschte Ziel schneller auslesen zu können. Denn wir sind an

$html.html.head.script

src

/js/default.js

interessiert, denn damit bekommen wir den Inhalt des Javascripts mittels

get-content "$($app.InstallLocation)\$($html.html.head.script.src)"

ausgelesen:

(function () {
    "use strict";
    function setTextContent(elementId, stringId) {
        var resources = new Windows.ApplicationModel.Resources.ResourceLoader();
        document.getElementById(elementId).textContent = resources.getString(stringId);
    }

    function updateUserInterface() {
        setTextContent("applicationName", "ConnectorStubTitle");
    }

    document.addEventListener("DOMContentLoaded", function domContentLoaded() {

        MSApp.terminateApp(new Error("This app should never load"));

    }.bind(this));
})();

Das Javascript definiert eine anonyme Funktion und fügt dem Application-DOM einen EventListener hinzu, der darauf reagiert, wenn DOMContentLoaded ausgelöst wird. Aber jetzt kommt das Highlight, falls dies der Fall sein sollte, dann wird die App mit einer Fehlermeldung “This app should never load” abgebrochen!!

Ja was den nun? Für was gibt es eine App, wenn sie nicht geladen werden soll?

OK, manchmal gibt es ja Apps die sind für etwas Besonderes zuständig und haben gar keine UI, wie z. B. Dienste oder Proxys. Ist dies hier vielleicht der Fall?

$mf.Package.Extensions -eq $null
True

Also nix mit Extensions, nada niente.

Übrigens die fürs Wohlergehen zuständige Bing Health und Fitness App liefert z. B. so etwas:

$mfb.Package.Extensions

Extension
———
{Extension, Extension, Extension, Extension…}

$mfb.Package.Extensions.Extension

Category                                 ProxyStub
——–                                 ———
windows.activatableClass.proxyStub       ProxyStub
windows.activatableClass.inProcessServer
windows.activatableClass.inProcessServer
windows.activatableClass.inProcessServer
windows.activatableClass.inProcessServer
windows.activatableClass.inProcessServer

Hier die Beschreibung zu den Extensions und was da möglich ist: https://msdn.microsoft.com/en-us/library/windows/apps/dn934750.aspx. Um es gleich zu sagen, das ist eine Menge! Aber davon, wie gesagt, ist hier nichts gegeben.

Schauen wir noch auf einen weiteren interessanten Parameter, welche Versionsanforderungen die App hat:

$mf.Package.Dependencies.TargetDeviceFamily

Name              MinVersion   MaxVersionTested
—-              ———-   —————-
Windows.Universal 10.0.10069.0 10.0.10069.0

So so, hier wird also eine Buildnummer 10069 als Minimum genannt. Übrigens 10069 war eine Beta vor dem April 2015! Nun gut, bei Top-Programmen kann man das so stehen lassen. Witzig wird aber der Parameter MaxVersionTested. Der besagt, dass 10069 die neueste Version ist, mit welcher die App getestet wurde, was irgendwie null Sinn ergibt, denn es sind ja mittlerweile viele andere Versionen herausgekommen?!?!? Ist das aktives Qualitätsmanagement ala Microsoft?
Noch Infos zu den Dependencies: https://msdn.microsoft.com/en-us/library/windows/apps/dn986903.aspx.

Sei es wie es will, die App macht absolut keinen Sinn.

Übrigens taucht sie wieder an weiterer Stelle auf, wo man nicht unmittelbar mit ihr rechnet. In der Windows Firewall. Dort ist jede App registriert die mit dem Internet kommuniziert:

Get-NetFirewallRule | where DisplayName -eq "App-Verbindung"

Name                  : {F9CB7621-DFB0-4F00-BDB1-8D54D0D53710}
DisplayName           : App-Verbindung
Description           : App-Verbindung
DisplayGroup          : App-Verbindung
Group                 : @{Microsoft.Appconnector_1.3.3.0_neutral__8wekyb3d8bbwe?ms-resource://Microsoft.Appconnector/Resources
                        /ConnectorStubTitle}
Enabled               : True
Profile               : Domain, Private, Public
Platform              : {6.2+}
Direction             : Outbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 : S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ-1001
PrimaryStatus         : OK
Status                : Die Regel wurde erfolgreich vom Speicher aus analysiert. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Wie kann man nun diese Ominöse App loswerden, ohne dass man jedes einzelne Einstellungsmenü durchgehen muss? Man verwendet einfach Remove-AppXPackage:

Remove-AppXPackage –Package $app.PackageFullName

Dadurch verschwindet die App aus allen Menüs wie bei den Datenschutz-Einstellungen. Schaut man sich aber den Installationspfad an, dann ist sie immer noch vorhanden, könnte also potentiell irgendeinen Blödsinn ausrichten. Also am besten entsorgt man das komplette Paket von der Platte:

$pro=Get-AppxProvisionedPackage -Online | where Displayname -eq $app.name
$pro

DisplayName  : Microsoft.Appconnector
Version      : 2015.707.550.0
Architecture : neutral
ResourceId   : ~
PackageName  : Microsoft.Appconnector_2015.707.550.0_neutral_~_8wekyb3d8bbwe

 

Remove-AppxProvisionedPackage -Online -PackageName $pro.PackageName

Path          :
Online        : True
RestartNeeded : False

So jetzt ist endlich Schluss mit dem Schrott. Zum Abschluss muss ich noch einen Ablassen über die Officesupport-Artikel…

Sinnvolle Größen von virtuellen Maschinen in Verbindung mit Azure

5 Mai 2016

Wenn man mit virtuellen Maschinen in Azure arbeitet, gibt es mittlerweile eine Unzahl von Maschinen zur Auswahl. Für Westeuropa gibt es aktuell 63 verschiedene Konstellationen.

(Get-AzureRmVMSize -Location westeurope).length

Wenn man einen Überblick über die Welt haben möchte, dann kann man dies mittels diesem Aufruf bekommen:

Get-AzureRmLocation| % {$_.DisplayName; (Get-AzureRmVMSize -Location $_.location).length}

East Asia
39
Southeast Asia
49
Central US
49
East US
53
East US 2
49
West US
53
North Central US
35
South Central US
53
North Europe
53
West Europe
63
Japan West
29
Japan East
43
Brazil South
21

Wie sieht nun so ein VMSize-Eintrag aus? Holen wir uns also den ersten Eintrag:

(Get-AzureRmVMSize -Location westeurope)[0]

MaxDataDiskCount     : 1
MemoryInMB           : 768
Name                 : Standard_A0
NumberOfCores        : 1
OSDiskSizeInMB       : 1047552
ResourceDiskSizeInMB : 20480

In diesem Artikel interessiert uns nur MemoryInMB und NumberOfCores.

Bei diesen Informationen stellt sich immer auch gleich die Frage nach dem Preis. Leider sind die Azure Billing APIs mit der RateCard-Info immer noch im Preview Status (https://msdn.microsoft.com/en-us/library/azure/mt218998.aspx). Auch gibt es noch keine Powershell-Cmdlets, so dass ich hier auf die normale HTML-Seite mit den Preisen verweise: https://azure.microsoft.com/de-de/pricing/details/virtual-machines/.

Bleiben wir bei West Europe, es gibt also 63 verschiedene VM-Größen. Aber welche Größen machen wirklich Sinn?

Grenzen wir den Zweck der VM ein, da wäre zunächst die Frage zu klären, ob man ein 32-Bit oder 64-Bit Betriebssystem darauf installieren möchte. Rein technisch kann man zwar 32-Bit Betriebssysteme auf VMs mit 12GB Arbeitsspeicher installieren, aber was macht dies für einen Sinn wenn man nur 4GB maximal nutzen kann?

Man kann mittels

Get-AzureRmVMSize -Location westeurope |where { $_.memoryinmb -le 4096  }

nun die in Frage kommenden VMs ermitteln. Zum Zeitpunkt dieses Artikels lieferte die Abfrage 10 Kandidaten: Standard_A0, Standard_A1, Standard_A2, Basic_A0, Basic_A1, Basic_A2, Standard_D1, Standard_D1_v2, Standard_DS1 und Standard_DS1_v2.

Worin unterscheiden sich nun Standard und Basic? Basic sind für Testserver gedacht, schnell hochfahren was ausprobieren und wegwerfen. Wer eine VM braucht die sinnvolle Tätigkeiten erfüllen soll, sollte Standard wählen.

Die Angaben über A,B,D,G usw. geben dann die Kategorie an, welche die VM im Sinne der Performance und Rechnerpower kategorisiert.

In diesem Zusammenhang muss man wissen, dass erst bei der Kategorie D und G SSDs als Festplatten zum Einsatz kommen. Allerdings ist bei SSDs zusätzlich noch wichtig, das diese nur temporär sind, wer dauerhaft den Inhalt der SSDs benötigt, der muss die DS*-Varianten verwenden.

Kommen wir nochmal zurück zum Arbeitsspeicher. Wer z. B. eine VM zum Ausprobieren möchte, wo ein 64-Bit Betriebssystem zum Einsatz kommen kann, der braucht mindestens 2GB an Arbeitsspeicher.

Dieser Aufruf listet alle in Frage kommenden Größen auf:

Get-AzureRmVMSize -Location westeurope |where { $_.memoryinmb -ge 2048  }

Momentan sind es 59 Stück.

Ein weiterer Faktor bei einer VM sind auch die Anzahl der Kerne. Eine schöne Auflistung, was die einzelnen Größen hergeben erhält man z. B. so:

Get-AzureRmVMSize -Location westeurope|sort numberofcores| Format-Table -GroupBy Numberofcores -Property Name,MemoryInMB, OSDiskSizeInMB, ResourceDiskSizeInMB, MaxDataDiskCount

Man erhält dadurch

   NumberOfCores: 1

Name            MemoryInMB OSDiskSizeInMB ResourceDiskSizeInMB MaxDataDiskCount
—-            ———- ————– ——————– —————-
Standard_D1           3584        1047552                51200                2
Basic_A1              1792        1047552                40960                2
Standard_D1_v2        3584        1047552                51200                2
Standard_DS1_v2       3584        1047552                 7168                2
Standard_DS1          3584        1047552                 7168                2
Basic_A0               768        1047552                20480                1
Standard_A1           1792        1047552                71680                2
Standard_A0            768        1047552                20480                1

   NumberOfCores: 2

Name             MemoryInMB OSDiskSizeInMB ResourceDiskSizeInMB MaxDataDiskCount
—-             ———- ————– ——————– —————-
Standard_G1           28672        1047552               393216                4
Standard_D2_v2         7168        1047552               102400                4
Standard_GS1          28672        1047552                57344                4
Standard_A2            3584        1047552               138240                4
Standard_D11_v2       14336        1047552               102400                4
Standard_DS11         14336        1047552                28672                4
Standard_DS2_v2        7168        1047552                14336                4
Standard_DS11_v2      14336        1047552                28672                4
Standard_DS2           7168        1047552                14336                4
Standard_D11          14336        1047552               102400                4
Standard_D2            7168        1047552               102400                4
Standard_A5           14336        1047552               138240                4
Basic_A2               3584        1047552                61440                4

Weiß man also wie viel Arbeitsspeicher und wie viel Kerne eine VM haben soll, dann kann man hiermit ermitteln was in Frage kommt:

Get-AzureRmVMSize -Location westeurope |where { ($_.memoryinmb -ge 2048 -and $_.memoryinmb -le 4096) -and ($_.numberofcores -le 2) }

MaxDataDiskCount     : 4
MemoryInMB           : 3584
Name                 : Standard_A2
NumberOfCores        : 2
OSDiskSizeInMB       : 1047552
ResourceDiskSizeInMB : 138240

MaxDataDiskCount     : 4
MemoryInMB           : 3584
Name                 : Basic_A2
NumberOfCores        : 2
OSDiskSizeInMB       : 1047552
ResourceDiskSizeInMB : 61440

MaxDataDiskCount     : 2
MemoryInMB           : 3584
Name                 : Standard_D1
NumberOfCores        : 1
OSDiskSizeInMB       : 1047552
ResourceDiskSizeInMB : 51200

MaxDataDiskCount     : 2
MemoryInMB           : 3584
Name                 : Standard_D1_v2
NumberOfCores        : 1
OSDiskSizeInMB       : 1047552
ResourceDiskSizeInMB : 51200

MaxDataDiskCount     : 2
MemoryInMB           : 3584
Name                 : Standard_DS1
NumberOfCores        : 1
OSDiskSizeInMB       : 1047552
ResourceDiskSizeInMB : 7168

MaxDataDiskCount     : 2
MemoryInMB           : 3584
Name                 : Standard_DS1_v2
NumberOfCores        : 1
OSDiskSizeInMB       : 1047552
ResourceDiskSizeInMB : 7168

Obige Liste stellt eine einfache Auswahl an Konfigurationen dar die für einfache Tests mit 64-Bit Betriebssystemen sinnvoll sind. Natürlich kann man mit Cores und Speicher und Performance immer nach oben gehen aber dies ist immer auch eine Frage der Kosten.

Neben den Kosten ist ein weiterer Aspekt der sinnvollen VM Größen im Zusammenhang mit Hyper-V. Wer in Zukunft im Hyper-V virtuelle Maschinen einrichtet, der sollte sich vielleicht auch mit den verfügbaren Größen der Azure VMs auseinandersetzen. Denn wenn später ein Umzug einer VM von Hyper-V nach Azure ansteht, ist es sinnvoll die Grundausrichtung der Hyper-VM bereits an möglichen Azure-VMs vorzunehmen, dann fällt einem der Umzug leichter. Hier hat bereits jemand diesen Gedanken: https://github.com/adbertram/Random-PowerShell-Work/blob/master/Azure/ConvertTo-AzureSize.ps1.

WLAN bzw. WIFI mit Hyper-V

3 Mai 2016

Endlich wird es einfacher möglich auf Windows 10 seinen WLAN-Adapter für VMs unter Hyper-V zu verwenden. Hier die passende Beschreibung: https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/user_guide/setup_nat_network?f=255&MSPPError=-2147217396

Leider geht es aber erst ab Build 14295 oder später.

Im Prinzip braucht man drei Powershell-Aufrufe:

New-VMSwitch
https://technet.microsoft.com/de-de/library/hh848455.aspx
New-NetIPAddress
https://technet.microsoft.com/en-us/library/hh826150.aspx
New-NetNat
https://technet.microsoft.com/de-de/library/dn283361(v=wps.630).aspx

Die Sache mit dem Installationsnamen und dem Featurenamen bei DISM bzw. Powershell ServerManager-Modul

28 April 2016

Bereits früher hatte ich auf die Problematik mit den verschiedenen Namen der unterschiedlichen Installationstechniken mit DISM, Install-WindowsFeature usw. hingewiesen: https://newyear2006.wordpress.com/2016/01/25/unterschiede-zwischen-windows-funktionen-bzw-features-bei-der-installation/

Hier nun ein Script welches etwas mehr Licht ins Dunkel bringt und den Featurenamen mit dem Installationsnamen in Verbindung setzt:

Get-WindowsFeature *|% {$n=@()} { $n+= New-Object -TypeName psobject -Property ([ordered]@{Name=$_.Name; InstallName=$_.AdditionalInfo.Item("InstallName")}) }  {$n}

Dadurch erhält man dann schön eine Tabelle, was mit was korrespondiert. Oft ist es so, dass der Name mit dem Installationsnamen zusammenpasst wie bei File-Services. Aber manchmal läuft die Sache komplett auseinander, Beispiel FS-BranchCache dessen Installationsname SMBHashGeneration ist. Da würde man nie drauf kommen, wenn man es nicht wüsste!

In folgender Tabelle sind die Installationsnamen in geschweiften Klammern aufgeführt, weil es mehrere Installationsnamen geben kann, wie z. B. bei WDS-Transport, welcher dann als Installationsnamen Microsoft-Windows-Deployment-Services-Transport-Server und Microsoft-Windows-Deployment-Services umfasst.

Name        : ADLDS
InstallName : {DirectoryServices-ADAM}

Name        : AD-Domain-Services
InstallName : {DirectoryServices-DomainController}

Name        : ADRMS
InstallName : {RightsManagementServices-Role}

Name        : ADRMS-Server
InstallName : {RightsManagementServices, RightsManagementServices-AdminTools}

Name        : ADRMS-Identity
InstallName : {RMS-Federation}

Name        : ADFS-Federation
InstallName : {IdentityServer-SecurityTokenService}

Name        : AD-Certificate
InstallName : {ADCertificateServicesRole}

Name        : ADCS-Cert-Authority
InstallName : {CertificateServices}

Name        : ADCS-Online-Cert
InstallName : {OnlineRevocationServices}

Name        : ADCS-Device-Enrollment
InstallName : {NetworkDeviceEnrollmentServices}

Name        : ADCS-Enroll-Web-Pol
InstallName : {CertificateEnrollmentPolicyServer}

Name        : ADCS-Enroll-Web-Svc
InstallName : {CertificateEnrollmentServer}

Name        : ADCS-Web-Enrollment
InstallName : {WebEnrollmentServices}

Name        : Application-Server
InstallName : {Application-Server}

Name        : AS-NET-Framework
InstallName : {AS-NET-Framework}

Name        : AS-Ent-Services
InstallName : {AS-Ent-Services}

Name        : AS-TCP-Port-Sharing
InstallName : {Application-Server-TCP-Port-Sharing}

Name        : AS-WAS-Support
InstallName : {Application-Server-WAS-Support}

Name        : AS-HTTP-Activation
InstallName : {Application-Server-HTTP-Activation}

Name        : AS-MSMQ-Activation
InstallName : {Application-Server-MSMQ-Activation}

Name        : AS-Named-Pipes
InstallName : {Application-Server-Pipe-Activation}

Name        : AS-TCP-Activation
InstallName : {Application-Server-TCP-Activation}

Name        : AS-Web-Support
InstallName : {Application-Server-WebServer-Support}

Name        : AS-Dist-Transaction
InstallName : {AS-Dist-Transaction}

Name        : AS-WS-Atomic
InstallName : {AS-WS-Atomic}

Name        : AS-Outgoing-Trans
InstallName : {AS-Outgoing-Trans}

Name        : AS-Incoming-Trans
InstallName : {AS-Incoming-Trans}

Name        : FileAndStorage-Services
InstallName : {FileAndStorage-Services}

Name        : File-Services
InstallName : {File-Services}

Name        : FS-FileServer
InstallName : {CoreFileServer}

Name        : FS-SyncShareService
InstallName : {WorkFolders-Server}

Name        : FS-BranchCache
InstallName : {SMBHashGeneration}

Name        : FS-VSS-Agent
InstallName : {FileServerVSSAgent}

Name        : FS-DFS-Namespace
InstallName : {DFSN-Server}

Name        : FS-DFS-Replication
InstallName : {DFSR-Infrastructure-ServerEdition}

Name        : FS-iSCSITarget-Server
InstallName : {iSCSITargetServer}

Name        : iSCSITarget-VSS-VDS
InstallName : {iSCSITargetStorageProviders}

Name        : FS-Resource-Manager
InstallName : {FSRM-Infrastructure}

Name        : FS-NFS-Service
InstallName : {ServicesForNFS-ServerAndClient, ServerForNFS-Infrastructure}

Name        : Storage-Services
InstallName : {Storage-Services}

Name        : DHCP
InstallName : {DHCPServer}

Name        : DNS
InstallName : {DNS-Server-Full-Role}

Name        : Print-Services
InstallName : {Printing-Server-Foundation-Features}

Name        : Print-Server
InstallName : {Printing-Server-Role}

Name        : Print-Internet
InstallName : {Printing-InternetPrinting-Server}

Name        : Print-LPD-Service
InstallName : {Printing-LPDPrintService}

Name        : Print-Scan-Server
InstallName : {BusScan-ScanServer}

Name        : Fax
InstallName : {FaxServiceRole}

Name        : Hyper-V
InstallName : {Microsoft-Hyper-V-Offline, Microsoft-Hyper-V-Online}

Name        : NPAS
InstallName : {NPAS-Role}

Name        : NPAS-Policy-Server
InstallName : {IAS NT Service}

Name        : NPAS-Host-Cred
InstallName : {HCAP-Server}

Name        : NPAS-Health
InstallName : {HCSRuntime}

Name        : Remote-Desktop-Services
InstallName : {Remote-Desktop-Services}

Name        : RDS-Gateway
InstallName : {Gateway}

Name        : RDS-Licensing
InstallName : {Licensing}

Name        : RDS-RD-Server
InstallName : {AppServer}

Name        : RDS-Connection-Broker
InstallName : {SBMgr-UI, SessionDirectory}

Name        : RDS-Web-Access
InstallName : {WebAccess}

Name        : RemoteAccess
InstallName : {RemoteAccess}

Name        : DirectAccess-VPN
InstallName : {RemoteAccessServer}

Name        : Routing
InstallName : {RasRoutingProtocols}

Name        : Web-Application-Proxy
InstallName : {Web-Application-Proxy}

Name        : VolumeActivation
InstallName : {VolumeActivation-Full-Role}

Name        : Web-Server
InstallName : {IIS-WebServerRole}

Name        : Web-WebServer
InstallName : {IIS-WebServer}

Name        : Web-Common-Http
InstallName : {IIS-CommonHttpFeatures}

Name        : Web-Http-Errors
InstallName : {IIS-HttpErrors}

Name        : Web-Default-Doc
InstallName : {IIS-DefaultDocument}

Name        : Web-Static-Content
InstallName : {IIS-StaticContent}

Name        : Web-Dir-Browsing
InstallName : {IIS-DirectoryBrowsing}

Name        : Web-Http-Redirect
InstallName : {IIS-HttpRedirect}

Name        : Web-DAV-Publishing
InstallName : {IIS-WebDAV}

Name        : Web-Performance
InstallName : {IIS-Performance}

Name        : Web-Stat-Compression
InstallName : {IIS-HttpCompressionStatic}

Name        : Web-Dyn-Compression
InstallName : {IIS-HttpCompressionDynamic}

Name        : Web-Security
InstallName : {IIS-Security}

Name        : Web-Filtering
InstallName : {IIS-RequestFiltering}

Name        : Web-Client-Auth
InstallName : {IIS-ClientCertificateMappingAuthentication}

Name        : Web-Cert-Auth
InstallName : {IIS-IISCertificateMappingAuthentication}

Name        : Web-Digest-Auth
InstallName : {IIS-DigestAuthentication}

Name        : Web-IP-Security
InstallName : {IIS-IPSecurity}

Name        : Web-Basic-Auth
InstallName : {IIS-BasicAuthentication}

Name        : Web-CertProvider
InstallName : {IIS-CertProvider}

Name        : Web-Url-Auth
InstallName : {IIS-URLAuthorization}

Name        : Web-Windows-Auth
InstallName : {IIS-WindowsAuthentication}

Name        : Web-Health
InstallName : {IIS-HealthAndDiagnostics}

Name        : Web-Http-Logging
InstallName : {IIS-HttpLogging}

Name        : Web-Http-Tracing
InstallName : {IIS-HttpTracing}

Name        : Web-Request-Monitor
InstallName : {IIS-RequestMonitor}

Name        : Web-Custom-Logging
InstallName : {IIS-CustomLogging}

Name        : Web-ODBC-Logging
InstallName : {IIS-ODBCLogging}

Name        : Web-Log-Libraries
InstallName : {IIS-LoggingLibraries}

Name        : Web-App-Dev
InstallName : {IIS-ApplicationDevelopment}

Name        : Web-Net-Ext
InstallName : {IIS-NetFxExtensibility}

Name        : Web-Net-Ext45
InstallName : {IIS-NetFxExtensibility45}

Name        : Web-AppInit
InstallName : {IIS-ApplicationInit}

Name        : Web-ASP
InstallName : {IIS-ASP}

Name        : Web-Asp-Net
InstallName : {IIS-ASPNET}

Name        : Web-Asp-Net45
InstallName : {IIS-ASPNET45}

Name        : Web-CGI
InstallName : {IIS-CGI}

Name        : Web-ISAPI-Ext
InstallName : {IIS-ISAPIExtensions}

Name        : Web-ISAPI-Filter
InstallName : {IIS-ISAPIFilter}

Name        : Web-Includes
InstallName : {IIS-ServerSideIncludes}

Name        : Web-WebSockets
InstallName : {IIS-WebSockets}

Name        : Web-Ftp-Server
InstallName : {IIS-FTPServer}

Name        : Web-Ftp-Service
InstallName : {IIS-FTPSvc}

Name        : Web-Ftp-Ext
InstallName : {IIS-FTPExtensibility}

Name        : Web-Mgmt-Tools
InstallName : {IIS-WebServerManagementTools}

Name        : Web-Mgmt-Console
InstallName : {IIS-ManagementConsole}

Name        : Web-Scripting-Tools
InstallName : {IIS-ManagementScriptingTools}

Name        : Web-Mgmt-Compat
InstallName : {IIS-IIS6ManagementCompatibility}

Name        : Web-Metabase
InstallName : {IIS-Metabase}

Name        : Web-Lgcy-Scripting
InstallName : {IIS-LegacyScripts}

Name        : Web-Lgcy-Mgmt-Console
InstallName : {IIS-LegacySnapIn}

Name        : Web-WMI
InstallName : {IIS-WMICompatibility}

Name        : Web-Mgmt-Service
InstallName : {IIS-ManagementService}

Name        : ServerEssentialsRole
InstallName : {WSS-Product-Package}

Name        : UpdateServices
InstallName : {UpdateServices}

Name        : UpdateServices-WidDB
InstallName : {UpdateServices-WidDatabase}

Name        : UpdateServices-Services
InstallName : {UpdateServices-Services}

Name        : UpdateServices-DB
InstallName : {UpdateServices-Database}

Name        : WDS
InstallName : {Microsoft-Windows-Deployment-Services}

Name        : WDS-Deployment
InstallName : {Microsoft-Windows-Deployment-Services-Deployment-Server}

Name        : WDS-Transport
InstallName : {Microsoft-Windows-Deployment-Services-Transport-Server, Microsoft-Windows-Deployment-Services}

Name        : NET-Framework-Features
InstallName : {NetFx3ServerFeatures}

Name        : NET-Framework-Core
InstallName : {NetFx3}

Name        : NET-HTTP-Activation
InstallName : {WCF-HTTP-Activation}

Name        : NET-Non-HTTP-Activ
InstallName : {WCF-NonHTTP-Activation}

Name        : NET-Framework-45-Features
InstallName : {NetFx4ServerFeatures}

Name        : NET-Framework-45-Core
InstallName : {NetFx4}

Name        : NET-Framework-45-ASPNET
InstallName : {NetFx4Extended-ASPNET45}

Name        : NET-WCF-Services45
InstallName : {WCF-Services45}

Name        : NET-WCF-Pipe-Activation45
InstallName : {WCF-Pipe-Activation45}

Name        : NET-WCF-HTTP-Activation45
InstallName : {WCF-HTTP-Activation45}

Name        : NET-WCF-MSMQ-Activation45
InstallName : {WCF-MSMQ-Activation45}

Name        : NET-WCF-TCP-Activation45
InstallName : {WCF-TCP-Activation45}

Name        : NET-WCF-TCP-PortSharing45
InstallName : {WCF-TCP-PortSharing45}

Name        : User-Interfaces-Infra
InstallName : {User-Interfaces-Infra}

Name        : Server-Gui-Mgmt-Infra
InstallName : {ServerCore-FullServer, Server-Gui-Mgmt}

Name        : Desktop-Experience
InstallName : {DesktopExperience}

Name        : Server-Gui-Shell
InstallName : {Server-Gui-Shell}

Name        : BitLocker
InstallName : {BitLocker}

Name        : BitLocker-NetworkUnlock
InstallName : {BitLocker-NetworkUnlock}

Name        : BranchCache
InstallName : {PeerDist}

Name        : NFS-Client
InstallName : {ServicesForNFS-ServerAndClient, ClientForNFS-Infrastructure}

Name        : Data-Center-Bridging
InstallName : {DataCenterBridging}

Name        : Direct-Play
InstallName : {DirectPlay}

Name        : Simple-TCPIP
InstallName : {SimpleTCP}

Name        : EnhancedStorage
InstallName : {EnhancedStorage}

Name        : InkAndHandwritingServices
InstallName : {InkAndHandwritingServices}

Name        : GPMC
InstallName : {Microsoft-Windows-GroupPolicy-ServerAdminTools-Update}

Name        : Web-WHC
InstallName : {IIS-HostableWebCore}

Name        : ManagementOdata
InstallName : {ManagementOdata}

Name        : BITS
InstallName : {BITS}

Name        : BITS-IIS-Ext
InstallName : {BITSExtensions-Upload}

Name        : BITS-Compact-Server
InstallName : {LightweightServer}

Name        : Windows-Internal-Database
InstallName : {Windows-Internal-Database}

Name        : Internet-Print-Client
InstallName : {Printing-InternetPrinting-Client}

Name        : IPAM
InstallName : {IPAMServerFeature}

Name        : ISNS
InstallName : {iSNS_Service}

Name        : LPR-Port-Monitor
InstallName : {Printing-LPRPortMonitor}

Name        : Server-Media-Foundation
InstallName : {ServerMediaFoundation}

Name        : MSMQ
InstallName : {MSMQ}

Name        : MSMQ-Services
InstallName : {MSMQ-Services}

Name        : MSMQ-Server
InstallName : {MSMQ-Server}

Name        : MSMQ-HTTP-Support
InstallName : {MSMQ-HTTP}

Name        : MSMQ-Triggers
InstallName : {MSMQ-Triggers}

Name        : MSMQ-Multicasting
InstallName : {MSMQ-Multicast}

Name        : MSMQ-Routing
InstallName : {MSMQ-RoutingServer}

Name        : MSMQ-Directory
InstallName : {MSMQ-ADIntegration}

Name        : MSMQ-DCOM
InstallName : {MSMQ-DCOMProxy}

Name        : Multipath-IO
InstallName : {MultipathIo}

Name        : NLB
InstallName : {NetworkLoadBalancingFullServer}

Name        : PNRP
InstallName : {P2P-PnrpOnly}

Name        : CMAK
InstallName : {RasCMAK}

Name        : RDC
InstallName : {MSRDC-Infrastructure}

Name        : RSAT
InstallName : {ServerManager-Core-RSAT}

Name        : RSAT-Feature-Tools
InstallName : {ServerManager-Core-RSAT-Feature-Tools}

Name        : RSAT-SMTP
InstallName : {Smtpsvc-Admin-Update-Name}

Name        : RSAT-Clustering
InstallName : {FailoverCluster-AdminPak}

Name        : RSAT-Clustering-PowerShell
InstallName : {FailoverCluster-PowerShell}

Name        : RSAT-Clustering-Mgmt
InstallName : {FailoverCluster-Mgmt}

Name        : RSAT-Clustering-CmdInterface
InstallName : {FailoverCluster-CmdInterface}

Name        : RSAT-Clustering-AutomationServer
InstallName : {FailoverCluster-AutomationServer}

Name        : IPAM-Client-Feature
InstallName : {IPAMClientFeature}

Name        : RSAT-SNMP
InstallName : {Server-RSAT-SNMP}

Name        : RSAT-Bits-Server
InstallName : {BITSExtensions-AdminPack}

Name        : RSAT-NLB
InstallName : {NetworkLoadBalancingManagementClient}

Name        : RSAT-Feature-Tools-BitLocker
InstallName : {Bitlocker-Utilities}

Name        : RSAT-Feature-Tools-BitLocker-BdeAducExt
InstallName : {BdeAducExtTool}

Name        : RSAT-Feature-Tools-BitLocker-RemoteAdminTool
InstallName : {BitLocker-RemoteAdminTool}

Name        : RSAT-WINS
InstallName : {WINS-Server-Tools}

Name        : RSAT-Role-Tools
InstallName : {ServerManager-Core-RSAT-Role-Tools}

Name        : RSAT-AD-Tools
InstallName : {RSAT-AD-Tools-Feature}

Name        : RSAT-AD-PowerShell
InstallName : {ActiveDirectory-PowerShell}

Name        : RSAT-ADDS
InstallName : {RSAT-ADDS-Tools-Feature}

Name        : RSAT-AD-AdminCenter
InstallName : {DirectoryServices-AdministrativeCenter}

Name        : RSAT-ADDS-Tools
InstallName : {DirectoryServices-DomainController-Tools}

Name        : RSAT-NIS
InstallName : {RSAT-NIS}

Name        : RSAT-ADLDS
InstallName : {DirectoryServices-ADAM-Tools}

Name        : RSAT-Hyper-V-Tools
InstallName : {RSAT-Hyper-V-Tools-Feature}

Name        : Hyper-V-Tools
InstallName : {Microsoft-Hyper-V-Management-Clients}

Name        : Hyper-V-PowerShell
InstallName : {Microsoft-Hyper-V-Management-PowerShell}

Name        : RSAT-RDS-Tools
InstallName : {RSAT-RDS-Tools-Feature}

Name        : RSAT-RDS-Licensing-Diagnosis-UI
InstallName : {Licensing-Diagnosis-UI}

Name        : RSAT-RDS-Gateway
InstallName : {Gateway-UI}

Name        : RDS-Licensing-UI
InstallName : {Licensing-UI}

Name        : UpdateServices-RSAT
InstallName : {UpdateServices-RSAT}

Name        : UpdateServices-API
InstallName : {UpdateServices-API}

Name        : UpdateServices-UI
InstallName : {UpdateServices-UI}

Name        : RSAT-DHCP
InstallName : {DHCPServer-Tools}

Name        : RSAT-DNS-Server
InstallName : {DNS-Server-Tools}

Name        : RSAT-Fax
InstallName : {FaxServiceConfigRole}

Name        : RSAT-ADRMS
InstallName : {RightsManagementServicesManagementTools}

Name        : RSAT-ADCS
InstallName : {ADCertificateServicesManagementTools}

Name        : RSAT-Online-Responder
InstallName : {OnlineRevocationServicesManagementTools}

Name        : RSAT-ADCS-Mgmt
InstallName : {CertificateServicesManagementTools}

Name        : RSAT-File-Services
InstallName : {Server-Manager-RSAT-File-Services}

Name        : RSAT-DFS-Mgmt-Con
InstallName : {DfsMgmt}

Name        : RSAT-NFS-Admin
InstallName : {NFS-Administration}

Name        : RSAT-FSRM-Mgmt
InstallName : {FSRM-Management}

Name        : RSAT-CoreFile-Mgmt
InstallName : {CoreFileServer-RSAT}

Name        : RSAT-RemoteAccess
InstallName : {RemoteAccessMgmtTools}

Name        : RSAT-RemoteAccess-Mgmt
InstallName : {DamgmtTools}

Name        : RSAT-RemoteAccess-PowerShell
InstallName : {RemoteAccessPowerShell}

Name        : RSAT-Print-Services
InstallName : {Printing-AdminTools-Collection}

Name        : RSAT-NPAS
InstallName : {HCSUI, NPSManagementTools}

Name        : WDS-AdminPack
InstallName : {Microsoft-Windows-Deployment-Services-Admin-Pack}

Name        : RSAT-VA-Tools
InstallName : {Security-SPP-Vmw}

Name        : Remote-Assistance
InstallName : {RemoteAssistance}

Name        : RPC-over-HTTP-Proxy
InstallName : {RPC-HTTP_Proxy}

Name        : FS-SMBBW
InstallName : {SMBBW}

Name        : SMTP-Server
InstallName : {Smtpsvc-Service-Update-Name}

Name        : SNMP-Service
InstallName : {SNMP}

Name        : SNMP-WMI-Provider
InstallName : {WMISnmpProvider}

Name        : WindowsStorageManagementService
InstallName : {WindowsStorageManagementService}

Name        : Telnet-Client
InstallName : {TelnetClient}

Name        : Telnet-Server
InstallName : {TelnetServer}

Name        : TFTP-Client
InstallName : {TFTP}

Name        : FS-SMB1
InstallName : {SMB1Protocol}

Name        : qWave
InstallName : {QWAVE}

Name        : Windows-Identity-Foundation
InstallName : {Windows-Identity-Foundation}

Name        : PowerShellRoot
InstallName : {MicrosoftWindowsPowerShellRoot}

Name        : PowerShell
InstallName : {MicrosoftWindowsPowerShell}

Name        : PowerShell-V2
InstallName : {MicrosoftWindowsPowerShellV2}

Name        : PowerShell-ISE
InstallName : {MicrosoftWindowsPowerShellISE}

Name        : WindowsPowerShellWebAccess
InstallName : {WindowsPowerShellWebAccess}

Name        : DSC-Service
InstallName : {DSC-Service}

Name        : Search-Service
InstallName : {File-Services-Search-Service, SearchEngine-Server-Package}

Name        : Migration
InstallName : {ServerMigration}

Name        : Windows-Server-Backup
InstallName : {WindowsServerBackup}

Name        : Biometric-Framework
InstallName : {BiometricFramework}

Name        : WFF
InstallName : {WindowsFeedbackForwarder}

Name        : WAS
InstallName : {WAS-WindowsActivationService}

Name        : WAS-Process-Model
InstallName : {WAS-ProcessModel}

Name        : WAS-NET-Environment
InstallName : {WAS-NetFxEnvironment}

Name        : WAS-Config-APIs
InstallName : {WAS-ConfigurationAPI}

Name        : Windows-TIFF-IFilter
InstallName : {TIFFIFilter}

Name        : WinRM-IIS-Ext
InstallName : {Microsoft-Windows-Web-Services-for-Management-IIS-Extension}

Name        : WINS
InstallName : {WINSRuntime}

Name        : Wireless-Networking
InstallName : {WirelessNetworking}

Name        : WoW64-Support
InstallName : {ServerCore-WOW64}

Name        : XPS-Viewer
InstallName : {Xps-Foundation-Xps-Viewer}

Wider die Arbeitsmoral

28 April 2016

Wenn man mal keinen Bock hat eine Arbeit zu Ende zu führen, warum dann nicht einfach selbstgestrickte Fehlermeldungen erzeugen?

Da sich hier vieles um Powershell dreht, hier ein Zweizeiler, welcher die Möglichkeiten schön darstellt:

Add-Type -AssemblyName System.Windows.Forms

[System.Windows.Forms.MessageBox]::Show("Das Installationsprogramm hat einen Fehler festgestellt: 0xc80003f3","Eigenständiges Windows Update-Installationsprogramm", [System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Error)

Baut man dies in ein Script ein, Profis verschlüsseln die Sache vorab, damit es nicht gar so auffällig ist, dann kann man immer sagen: Geht jetzt nicht, hab ein unlösbares Problem! Muss erst nochmal recherchieren…

Viel Spaß mit der gewonnen Freizeit!

Festplatte bei virtuellem Rechner erweitern bzw. vergrößern

27 März 2016

Hier im Schnelldurchgang, um z. B. einem Rechner 10GB mehr zukommen zu lassen:

-Virtuellen Rechner offline nehmen
-dann auf dem Hyper-V

Resize-VHD –Path  PfadzuVHDXDatei -SizeBytes ((Get-VHD PfadzuVHDXDatei).Size + 10GB)

ausführen

-VM wieder hochfahren und dann die gewünscht Partition um die erweiterte Größe vergrößern. Dazu verwendet man die Datenträgererwaltung oder direkt diskmgmt.msc. Diese Operation könnte man auch per Powershell direkt nach obiger Erweiterung durchführen…


Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.