$theTitle=wp_title(" - ", false); if($theTitle != "") { ?>
About Virtualization, VDI, SBC, Application Compatibility and anything else I feel like
Twitter has opened access to Analytics for all users. However when you use an Ad Blocker, like Adblock Plus, you’ll get the following error:
For Adblock Plus you can fix this by adding a filter: go to Filter Preferences and on the "Custom filters" tab add a new filter within a filter group (or create a filter group for this rule).
Use this as a filter rule:
@@||ads.twitter.com/stylesheets/ads-allow.css
And don’t forget to Enable the rule!
EDIT: Twitter user @Ertraeglichkeit mentioned a different method:
This morning Aaron Parker was wondering if Hash Tables could be used to work with ini files:
I thought it was a great idea because in Hash Tables you can use the . operator to get or set a Hash Table entry. But I wondered what to do with sections in ini files. Then I got the idea to use nested Hash Tables for that.
The result is two functions, one to read an ini file into a nested Hash Table and one function to write it back to an ini file.
22 Jul // php the_time('Y') ?>
In a PowerShell script I needed to sort a hash table by byte value (not alphabetically, lowercase parameters will be listed after uppercase ones). An example for this requirement is the Amazon Product Advertising API.
Consider the following hashtable as an example:
1 2 3 4 5 | $params = @{} $params.Add("AssociateTag", "dummy") $params.Add("AWSAccessKeyId", "AKIAIOSFODNN7EXAMPLE") $params.Add("IdType", "0679722769") $params.Add("Operation", "ItemLookup") |
If we use the Sort-Object to order the list (note that we need to use the GetEnumerator method):
1 | $params.GetEnumerator() | Sort-Object Name |
We will get the following result:
1 2 3 4 5 6 | Name Value ---- ----- AssociateTag dummy AWSAccessKeyId AKIAIOSFODNN7EXAMPLE IdType 0679722769 Operation ItemLookup |
If you use the -CaseSensitive
switch the resulting order will remain the same.
To get the best performance out of Virtual Desktops it is essential that the power configuration in the system BIOS and the HyperVisor are configured for maximum performance.
Many people have blogged about the importance of these settings like, Andrew Wood, Helge Klein and Didier Van Hoye. So I will not go into details again.
But how do you check from a Virtual Machine if you are actually running at full clock speed or not?
I have written a PowerShell script to do just that (requires at least PowerShell v3).
Here are some screenshots:
Running with "High Performance profile":
Running with "Balanced" power profile:
18 Jul // php the_time('Y') ?>
In a SCOM Management Pack Custom Properties can be used for Alert Description and Notification as described in this blog by Kevin Holman.
In my case I wanted to add the Display Name and the Performance Counter Value in a Performance Threshold Monitor. In XML it would look this this:
1 2 3 4 5 6 7 8 9 10 | <alertsettings alertmessage="Memory.Usage.AlertMessage"> <alertonstate>Error</alertonstate> <autoresolve>true</autoresolve> <alertpriority>Normal</alertpriority> <alertseverity>MatchMonitorHealth</alertseverity> <alertparameters> <alertparameter1>$Target/Host/Property[Type="System!System.Entity"]/DisplayName$</alertparameter1> <alertparameter2>$Data/Context/Value$</alertparameter2> </alertparameters> </alertsettings> |
But how to add these parameters when using the System Center 2012 Visual Studio Authoring Extensions?
16 Jul // php the_time('Y') ?>
I am currently implementing Sophos UTM and I quite like this solution. It is free up for home usage and can easily be installed on a hypervisor.
I wanted to scan encrypted traffic (ssl) as well so I activated the "Decrypt and scan" option:
When testing this on one of my iPad’s I noticed that the App Store didn’t work properly anymore.
When I tried to update applications I got the following error: "Cannot connect to iTunes Store". Additionally when I searched for Apps the search would return no results.
13 Jul // php the_time('Y') ?>
Today I encounterd what seems to be a bug in the System Center 2012 Visual Studio Authoring Extensions. I wanted to define a Performance Collection Rule that reads out the percentage of free memory from an SNMP device.
Since the device returns only the percentage of used memory I needed to use the ComputedPerfProvider provider to substract the used memory percentage from 100.
I could of course report used memory instead of free memory but I wanted the resulst to appear in the default SCOM Performance View, which only lists Free Memory:
13 Jul // php the_time('Y') ?>
I am currently working on a Management Pack for SCOM and I have studies a few examples on adding processor and memory counters.
These examples all reference a Management Pack named "System.NetworkManagement.Monitoring.mp" but this Management Pack is not bundled with the System Center 2012 Visual Studio Authoring Extensions.
8 Jul // php the_time('Y') ?>
I am currently working on a Management Pack for System Center Operations Manager (aka SCOM). I am using the System Center 2012 Visual Studio Authoring Extensions and during build of my project I suddenly got the following error: “MSB4018: The “MergeFragments” task failed unexpectedly“:
I searched on this error message but wasn’t able to find anything helpful. In order to get more detailed output from MSBuild I changed the MSBuild project build output verbosity. To do this go to the Tools menu in Visual Studio and select Options. Navigate to the “Build and Run” node under “Projects and Solutions” and set both options to “Diagnostic”:
Aaron Parker was talking about the uninstall guid in his session “Hands off my Golden Image Redux” at Citrix Synergy.
I remembered that I had written a small PowerShell script to read out the uninstall GUID from an MSI file. This way you do not need to actually install the software to determine the uninstall GUID.
How does that work?
There is a logical relation between the MSI Product Code property and the install guid. In this example I’ve taken install_flash_player_11.8.800.174_active_x.msi as an example.
The Uninstall key is HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\A2E504D3D31C0D5409F28F3FDD565AD9
The interesting part of it is the GUID:
A2E504D3D31C0D5409F28F3FDD565AD9
If we look into the MSI properties with (Super)Orca we see:
If we compare those GUIDS:
Uninstal {A2E504D3-D31C-0D54-09F2-8F3FDD565AD9}
Product Code{3D405E2A-C13D-45D0-902F-F8F3DD65A59D}
We can see that we need to apply the following logic:
· First 8 bytes must be swapped right to left
· Next 4 bytes (skipping the hyphen) also swapped right to left
· Next 4 bytes (skipping the hyphen) also swapped right to left
· Next 4 bytes (skipping the hyphen) also swapped right to left
· Last 12 bytes must be byte swapped per byte (F8 -> 8F, F3 -> 3F etc).
Knowing that we can make life easier with PowerShell:
[posh]function Get-Property ($Object, $PropertyName, [object[]]$ArgumentList)
{
return $Object.GetType().InvokeMember($PropertyName, ‘Public, Instance, GetProperty’, $null, $Object, $ArgumentList)
}
function Invoke-Method ($Object, $MethodName, $ArgumentList)
{
return $Object.GetType().InvokeMember($MethodName, ‘Public, Instance, InvokeMethod’, $null, $Object, $ArgumentList)
}
function GetMsiProductCode([string]$path)
{
$msiOpenDatabaseModeReadOnly = 0
$Installer = New-Object -ComObject WindowsInstaller.Installer
$Database = Invoke-Method $Installer OpenDatabase @($path, $msiOpenDatabaseModeReadOnly)
$View = Invoke-Method $Database OpenView @(“SELECT Value FROM Property WHERE Property=’ProductCode'”)
Invoke-Method $View Execute | Out-Null
$Record = Invoke-Method $View Fetch
if ($Record)
{
Write-Output (Get-Property $Record StringData 1)
}
}
cls
$path = “c:\Users\rweijnen\Desktop\install_flash_player_11.8.800.174_active_x.msi”
$item = “” | Select-Object Path, ProductCode, UninstallGuid, UninstallRegistry
$item.Path = $path
$item.ProductCode = (GetMsiProductCode $item.Path)
$DestGuid = ([regex]::Matches($item.ProductCode.Substring(1,8),’.’,’RightToLeft’) | ForEach {$_.value}) -join ”
$DestGuid += ([regex]::Matches($item.ProductCode.Substring(10,4),’.’,’RightToLeft’) | ForEach {$_.value}) -join ”
$DestGuid += ([regex]::Matches($item.ProductCode.Substring(15,4),’.’,’RightToLeft’) | ForEach {$_.value}) -join ”
$DestGuid += ([regex]::Matches($item.ProductCode.Substring(20,2),’.’,’RightToLeft’) | ForEach {$_.value}) -join ”
$DestGuid += ([regex]::Matches($item.ProductCode.Substring(22,2),’.’,’RightToLeft’) | ForEach {$_.value}) -join ”
for ($i=25 ; $i -lt 37 ; $i = $i + 2)
{
$DestGuid += ([regex]::Matches($item.ProductCode.Substring($i,2),’.’,’RightToLeft’) | ForEach {$_.value}) -join ”
}
$item.UninstallGuid = “{” + ([Guid]$DestGuid).ToString().ToUpper() + “}”
$item.UninstallRegistry = “HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\{0}” -f $DestGuid
$item | Format-List
Sample output:
Path : c:\Users\rweijnen\Desktop\install_flash_player_11.8.800.174_active_x.msi
ProductCode : {3D405E2A-C13D-45D0-902F-F8F3DD65A59D}
UninstallGuid : {A2E504D3-D31C-0D54-09F2-8F3FDD565AD9}
UninstallRegistry : HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\A2E504D3D31C0D5409F28F3FDD565AD9
[/posh]