Kontextmenü für MSI Dateien erweitern
0Die folgende Registry Modifikation erweitert das Explorer Kontextmenü um nützliche Menüpunkte für die Installation von MSI Dateien.
Der Menüpunkt „Installation ohne Benutzerinteraktion“ führt ein beliebiges MSI automatisch im Silent-Modus und ohne Benutzerinteraktion aus.
Der Menüpunkt „Installation mit Protokollierung“ für ein beliebiges MSI incl. ausführlicher Protokollierung aus. Die Protokolldatei wird in diesem Fall in dem Verzeichnis erstellt in dem die .MSI Datei liegt, sie heißt wie die .MSI Datei selbst, jedoch mit der Endung .LOG.
Registry Modifikation:
[HKEY_CLASSES_ROOT\Msi.Package\shell\InstallLogging] @="Installation mit &Protokollierung" [HKEY_CLASSES_ROOT\Msi.Package\shell\InstallLogging\command] @=""%SystemRoot%\System32\msiexec.exe" /i "%1" /L*v "%1.log"" [HKEY_CLASSES_ROOT\Msi.Package\shell\InstallSilent] @="Installation ohne &Benutzerinteraktion" [HKEY_CLASSES_ROOT\Msi.Package\shell\InstallSilent\command] @=""%SystemRoot%\System32\msiexec.exe" /i "%1" /qb /norestart"
Download: MSIContextMenu.zip
Excel Dokumente in separaten Fenstern öffnen.
0Wenn man in Excel 2007 oder Excel 2010 mehrere Dokumente parallel öffnet, werden diese innerhalb eines einzelnen Excel Fensters geöffnet. Dies ist besonders auf Systemen mit mehreren Monitoren weniger praktisch, da man dort Excel Datei als separates Fenster auf jeweils einem Monitor haben will.
Die Lösung von Microsoft für diese Problematik sieht so aus, dass man in diesem Fall Excel zweimal starten muss, und in jedes Excel Fenster das gewünschte Dokument von Hand öffnen muss, dies ist jedoch relativ umständlich.
Eine elegantere Lösung stellt die folgende Registry Modifikation dar, die das Kontextmenü des Windows Explorers für Excel Dokumente um einen zusätzlichen „Öffnen als neu Instanz“ Eintrag erweitert, über den man komfortabel Excel Dokument in separaten Fenster öffnen kann.
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Excel.Backup\shell\Öffnen_als_neue_Instanz] @="Öffnen als neue Instanz" [HKEY_CLASSES_ROOT\Excel.Backup\shell\Öffnen_als_neue_Instanz\command] @="\"C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE\" \"%1\"" [HKEY_CLASSES_ROOT\Excel.OpenDocumentSpreadsheet.12\shell\Öffnen_als_neue_Instanz] @="Öffnen als neue Instanz" [HKEY_CLASSES_ROOT\Excel.OpenDocumentSpreadsheet.12\shell\Öffnen_als_neue_Instanz\command] @="\"C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE\" \"%1\"" [HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Öffnen_als_neue_Instanz] @="Öffnen als neue Instanz" [HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Öffnen_als_neue_Instanz\command] @="\"C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE\" \"%1\"" [HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Öffnen_als_neue_Instanz] @="Öffnen als neue Instanz" [HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Öffnen_als_neue_Instanz\command] @="\"C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE\" \"%1\"" [HKEY_CLASSES_ROOT\Excel.SheetBinaryMacroEnabled.12\shell\Öffnen_als_neue_Instanz] @="Öffnen als neue Instanz" [HKEY_CLASSES_ROOT\Excel.SheetBinaryMacroEnabled.12\shell\Öffnen_als_neue_Instanz\command] @="\"C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE\" \"%1\"" [HKEY_CLASSES_ROOT\Excel.SheetMacroEnabled.12\shell\Öffnen_als_neue_Instanz] @="Öffnen als neue Instanz" [HKEY_CLASSES_ROOT\Excel.SheetMacroEnabled.12\shell\Öffnen_als_neue_Instanz\command] @="\"C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE\" \"%1\""
Hinweis: Wenn Sie Office 2007 statt Office 2010 einsetzen, müssen Sie die Textstrings „Office14“ gegen „Office12“ ersetzen. Fall Sie diese Modifikation auf einem x64 Betriebssystem einsetzen, ihr Office jedoch als x86 Version, dann müssen Sie den Textstring „Program Files“ gegen „Program Files (x86)“ ersetzen.
Download: ExcelOpenAsInstance.zip
Das Kontextmenü nach der Modifikation:
Das Ergebnis, zwei Dokument mittels „Öffnen als neu Instanz“ geöffnet:
XenApp Policies per PowerShell importieren und exportieren
0Neben dem individuellen skripten von XenApp Policy per PowerShell welches ich in einem meiner vorangeangenen Beiträge gezeigt habe, gibt es auch die alternative Möglichkeit Policies incl. aller Einstellungen zu importieren und exportieren. Hierzu stell Citrix seit kurzem eine PowerShell Erweiterung zur Verfügung die ein einfachen Import und Export ermöglicht. Zu finden ist diese Erweiterung unter:
http://community.citrix.com/display/xa/Exporting+and+Importing+XenApp+Group+Policies
Eine Kurzbeschreibung gibt es zusätzlich hier:
Eingabeaufforderung bzgl. UAC einfärben
0Wenn man auf Systemen mit aktiver Benutzerkontensteuerung (User Account Control bzw. UAC) in der Eingabeaufforderung (CMD) arbeitet, kommt es vor, dass man diese mit normalen Rechten öffnet, oder aber auch mit erhöhten Rechten über „Als Administrator ausführen“.
Um die Fenster der Eingabeaufforderung entsprechend der Rechte besser unterschieden zu können, kann man diese entsprechend einfärben, dies ist mit folgendem einzeiligen Skript möglich:
whoami /groups | find "S-1-16-1228" >nul && color 4f
Dieses einzeilige Skript ermittelt die erhöhten Rechte über die Abfrage der Well-Known SID S-1-16-1228 und färbt das Fenster daraufhin rot ein, damit es sich problemlos von den schwarzen Fenstern die ohne erhöhte Rechte laufen unterscheiden lässt.
Wenn dieses Verhalten dauerhaft gewünscht ist, kann man dies durch erweitern des Startmenüeintrags der Eingabeaufforderung erreichen:
SSL am IIS automatisch per Skript einrichten
0Das folgende Beispiel zeigt wie man unter Windows 2008 oder 2008 R2 am IIS automatisch SSL per Script einrichtet.
# Installation eines Root Zertifikats (üblicherweise als .CER Datei)
%Systemroot%\System32\certutil.exe -addstore root C:\YourRootCertificateFile.cer
# Installation eines SSL Zertifkates incl. Privatem Schlüssel (üblicherweise als .PFX Datei)
%Systemroot%\System32\certutil.exe -p YourPassword -importPFX C:\YourCertificateFile.pfx
# SSL Zertifikat dem IIS hinzufügen (Hinweis: Bei dem Wert YourCertHash handelt es sich um den Fingerprint des Zertifikates)
%Systemroot%\System32\netsh.exe http add sslcert ipport=0.0.0.0:443 certhash=YourCertHash appid={4dc3e181-e14b-4a21-b022-59fc669b0914}
# Binden des Zertifkat an die Default Web Site des IIS
%Systemroot%\System32\inetsrv\AppCmd.exe set site "Default Web Site" /bindings:https://:443
# SSL Flags zum Erzwingen von SSL konfigurieren
%Systemroot%\System32\AppCmd.exe set config "Default Web Site" -commitPath:APPHOST -section:access -sslFlags: Ssl
XenApp per PowerShell konfigurieren
0Das folgende PowerShell Skript zeigt beispielhaft wie Sie eine Citrix XenApp 6.0 oder 6.5 Farm automatisch konfigurieren können, und wie Sie Farmobjekte wie Published Applications, Load Evaluatoren, Policies, Worker Groups, etc. automatisiert erstellen können.
Weiterführende Informationen finden Sie unter: http://community.citrix.com/display/xa/XenApp+6+PowerShell+SDK
# Load Snap-in's
Add-PSSnapin Citrix.XenApp.Commands
Add-PSSnapin Citrix.Common.Commands
Add-PSSnapin Citrix.Common.GroupPolicy
# Create server folders
New-XAFolder "Servers/Controllers" -ErrorAction SilentlyContinue
New-XAFolder "Servers/Workers" -ErrorAction SilentlyContinue
# Move server to server folders (based on computername)
if ($env:computername -like "XENAPP001" -or $env:computername -like "XENAPP002")
{Move-XAServer $env:computername -ToFolderPath Servers/Controllers -ErrorAction SilentlyContinue}
else
{Move-XAServer $env:computername -ToFolderPath Servers/Workers -ErrorAction SilentlyContinue}
# Set zone preference for primary controller
if ($env:computername -like "XENAPP001")
{Set-XAServerZone -Servername $env:computername -ElectionPreference MostPreferred}
# Set Zone Preference for backup controller
if ($env:computername -like "XENAPP002")
{Set-XAServerZone -ServerName $env:computername -ElectionPreference Preferred}
# Create new offline (full load) load evaluator
new-XALoadEvaluator "Offline" -Description "Offline" -MondaySchedule 00:00-00:00 -TuesdaySchedule 00:00-00:00 -WednesdaySchedule 00:00-00:00 -ThursdaySchedule 00:00-00:00 -FridaySchedule 00:00-00:00 -SaturdaySchedule 00:00-00:00 -SundaySchedule 00:00-00:00
# Create new custom load evaluator
new-XALoadEvaluator "CustomLE1" -Description "CustomLE1" -CpuUtilization 10,75 -MemoryUsage 10,75 -ServerUserLoad 20
# Assign load evaluators to serverss (NOTE! Only for XenApp 6.0, in newer version this setting is moved to the policy!)
if ($env:computername -like "XENAPP001" -or $env:computername -like "XENAPP002")
{Set-XAServerLoadEvaluator -LoadEvaluatorName "Offline" $env:computername}
else
{Set-XAServerLoadEvaluator -LoadEvaluatorName "CustomLE1" $env:computername}
# Add XenApp administrators
New-XAAdministrator "YourDomain\Domain Admins" -AdministratorType Full
New-XAAdministrator "YourDomain\Citrix Admins" -AdministratorType Full
New-XAAdministrator "YourDomain\Citrix Support" -AdministratorType ReadOnly
# Configure edition
Set-XAServerEdition -Name $env:computername -Edition Enterprise
# Create Application folders
New-XAFolder "Applications/Utilities"
New-XAFolder "Applications/Desktops"
# Create Desktop Publ. App.
New-XAApplication -SkipLogOnCheck -SkipPassThru -Force -ApplicationType ServerDesktop -DisplayName "Desktop" -Description "Desktop" -FolderPath "Applications/Desktops" -ServerNames $env:computername –Accounts "YourDomain\Domain Admins" -ClientFolder "Desktops" -AddToClientStartMenu $true -WindowType 75%
# Create Internet Explorer Publ.App incl. Custom Icon
New-XAApplication -Force -SkipLogOnCheck -SkipPassThru -ApplicationType ServerInstalled -DisplayName "Internet Explorer" -CommandLineExecutable """C:\Program Files\Internet Explorer\IEXPLORE.EXE"" http://www.mariotti.de/" -WorkingDirectory "C:\Program Files\Internet Explorer" -ServerNames $computername -Description "Internet Explorer" -FolderPath "Applications/Utilities" -ClientFolder "Pilot" -AddToClientStartMenu $true -AddToClientDesktop $true -Accounts "YourDomain\Domain Users " -EncodedIconData (Get-CtxIcon "C:\Program Files\Internet Explorer\IEXPLORE.EXE" -index 2)
#Create a policy drive object (to access the policy settings)
New-PSDrive -Name LocalFarmGPO -PSProvider CitrixGroupPolicy -FarmGPO $env:Computername -Root \
#Change some policy settings in the "Unfiltered" policy
Set-ItemProperty LocalFarmGPO:\Computer\Unfiltered\Settings\Licensing\LicenseServerPort Value "27000"
Set-ItemProperty LocalFarmGPO:\Computer\Unfiltered\Settings\Licensing\LicenseServerHostName Value "YourLicenseServer"
Set-ItemProperty LocalFarmGPO:\User\Printermapping\Settings\ICA\Printing\ClientPrinters\ClientPrinterAutoCreation Value "AllPrinters"
Set-ItemProperty LocalFarmGPO:\User\Printermapping\Settings\ICA\Printing\Drivers\InboxDriverAutoInstallation State "Disabled"
Set-ItemProperty LocalFarmGPO:\User\Printermapping\Settings\ICA\Printing\ClientPrinterRedirection State "Enabled"
Set-ItemProperty LocalFarmGPO:\User\Printermapping\Settings\ICA\Printing\UniversalPrinting\UniversalPrinting Value "Updonly"
Set-ItemProperty LocalFarmGPO:\User\Printermapping\Settings\ICA\Printing\WaitForPrintersToBeCreated State "Disabled"
Set-ItemProperty LocalFarmGPO:\User\Drivemapping\Settings\ICA\FileRedirection\AutoConnectDrives State "Enabled"
Set-ItemProperty LocalFarmGPO:\User\Drivemapping\Settings\ICA\FileRedirection\ClientDriveRedirection State "Enabled"
Set-ItemProperty LocalFarmGPO:\User\Drivemapping\Settings\ICA\FileRedirection\ClientFloppyDrives State "Disabled"
Set-ItemProperty LocalFarmGPO:\User\Drivemapping\Settings\ICA\FileRedirection\ClientFixedDrives State "Enabled"
Set-ItemProperty LocalFarmGPO:\User\Drivemapping\Settings\ICA\FileRedirection\ClientNetworkDrives State "Enabled"
Set-ItemProperty LocalFarmGPO:\User\Drivemapping\Settings\ICA\FileRedirection\ClientOpticalDrives State "Disabled"
Set-ItemProperty LocalFarmGPO:\User\Drivemapping\Settings\ICA\FileRedirection\ClientRemoveableDrives State "Disabled"
Set-ItemProperty LocalFarmGPO:\User\Drivemapping\Settings\ICA\FileRedirection\ClientDriveLetterPreservation State "Enabled"
Set-ItemProperty LocalFarmGPO:\User\Drivemapping\Settings\ICA\USBDevices\UsbDeviceRedirection State "Disabled"
Set-ItemProperty LocalFarmGPO:\User\Drivemapping\Settings\ICA\USBDevices\UsbPlugAndPlayRedirection State "Disabled"
# List all available policy settings (to get an idea what other policy settings can be configured)
Get-ChildItem LocalFarmGPO:\Computer\Unfiltered –Recurse
Get-ChildItem LocalFarmGPO:\User\Unfiltered -Recurse
# Create a worker group and assign a server
New-XAWorkerGroup -WorkerGroupName "WorkerGroupWithServer" -Description "WorkerGroupWithServer" -ErrorAction SilentlyContinue
Add-XAWorkerGroupServer "WorkerGroupWithServer" -ServerNames $env:computername
# Create a worker group with AD OU assignment
New-XAWorkerGroup -WorkerGroupName "WorkerGroupWithOU" -Description "WorkerGroupWithOU" -OUs 'OU=XenApp Server,DC=YourSubDomain,DC=YourTopLevelDomain' -ErrorAction SilentlyContinue
# Assign a worker group to all publ. apps
Get-XAApplication -FolderPath "Applications" | set-XAApplication -WorkerGroupNames "WorkerGroupWithServer"
# Create a new custom policy including a filter
New-Item "LocalFarmGPO:\Computer\CustomPolicy1" -ErrorAction SilentlyContinue
New-Item -Path "LocalFarmGPO:\Computer\CustomPolicy1\Filters\Workergroup" -value "WorkerGroupWithServer" -Type "Workergroup" -ErrorAction SilentlyContinue
Set-ItemProperty "LocalFarmGPO:\Computer\CustomPolicy1\Settings\ICA\Shadowing\Shadowing" State "Enabled"
100MB BitLocker Partition entfernen
1Seit Windows 7 bzw. Windows 2008 R2 wird beim Installieren eine versteckte 100MB Partition für BitLocker angelegt. Wenn Sie sicher sind, dass Sie BitLocker nicht für die Systempartition verenden werden, können Sie diese 100MB Partition wärend des Windows Setupvorgangs entfernen.
Gehen Sie hierzu wie folgt vor: Drücken Sie Shift+F10 wären des ersten Windows Setup Bildschirms, dadurch startet eine Eingabeaufforderung, in dieser geben Sie “Diskpart“ ein und führen darin folgende Befehle aus:
Select disk 0 Clean Create partition primary Select partition 1 Format fs=ntfs quick Exit
Nun kann die Windows Installation fortgesetzt werden.
Remote Applications per VBScript und WMI anlegen
0Das folgende Beispiel zeigt wie man unter Windows 2008 oder 2008 R2 Remote Applications (aka RemoteApps) automatisch per VBScript und WMI erzeugt
Weitere Informationen zu den Eigenschaften finden sie unter http://msdn.microsoft.com/en-us/library/windows/desktop/bb736365(v=vs.85).aspx
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2\TerminalServices") Set objNewApp = objWMIService.Get("Win32_TSPublishedApplication").SpawnInstance_() objNewApp.Name ="Notepad" objNewApp.Alias = "Notepad" objNewApp.Path = "C:\Windows\System32\Notepad.exe" objNewApp.VPath = "" objNewApp.IconPath = "C:\Windows\System32\Notepad.exe" objNewApp.IconIndex = 0 objNewApp.CommandLineSetting = "" objNewApp.RequiredCommandLine = 0 objNewApp.ShowInPortal = False objNewApp.Put_ If Err.Number <> 0 Then WScript.Quit(Err.Number)
Rechte in der Registry via PowerShell ändern
0Das folgende PowerShell Script zeigt wie man Berechtigungen innerhalb der Registry setzen kann. In diesem Beispiel erhält die Built-in Gruppe Netzwerkdienst Zugriffsrechte auf den Bereich HKEY_LOCAL_MACHINE\SOFTWARE\Test
$rule=New-Object System.Security.AccessControl.RegistryAccessRule("NT-AUTORITÄT\NETZWERKDIENST","FullControl","ContainerInherit","None","Allow")
$acl=get-acl HKLM:\SOFTWARE\Test
$acl.SetAccessRule($rule)
set-acl HKLM:\SOFTWARE\Test $acl
Windows Fehlercodes in Klartext-Fehlermeldungen umwandeln
0Da ich sehr oft Anfragen ala „Das Setup XY hat mit Error Code 5 abgebrochen, was bedeutet das?“ oder „Das Script XY hat mit Error Code 0x0000007B abgebrochen“ bekomme, möchte ich noch mal erklären wie man herausbekommt was der Error Code im Klartext bedeutet.
Der bereits erwähnte Error Code 5 bedeutet z.B. „Zugriff verweigert“ und der Error Code 0x0000007B bedeutet „Der Syntax für den Datei oder Verzeichnisnamen ist falsch“
Zum herausbekommen dieser Fehlermeldungen im Klartext kann man wie folgt vorgehen:
Variante 1
Der NET Befehl den jeder von „NET USE“ kennen sollte, hat einen Parameter namens HELPMSG, dieser kann zum Übersetzen der Error Codes verwendet werden.
Beispiel:
NET HELPMSG 5
Variante 2
Die Windows PowerShell kann ebenfalls Error Codes in Fehlermeldungen umwandeln, und zwar unter Zuhilfenahme des .NET Framework Namespace ComponentModel.Win32Exception.
Beispiel:
powershell.exe [ComponentModel.Win32Exception] 5
Variante 3
Man schlägt den Error Code in der Microsoft MSDN Dokumentation nach, und zwar hier: http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx




