Ich benutze seit geraumer Zeit zum Backup meiner Heimcomputer den Windows Home Server. Eins der Neuerungen mit WHS 2011 ist, dass die Webseite ein offizielles Zertifikat von “Go Daddy” bekommt, dass auf den dynamischen DNS Eintrag vom WHS und somit von der offiziellen IP Adresse hört. Da die IP Adresse im allgemeinen per NAT am Router umgesetzt wird, teilen sich mehrere Computer diese externe IP und somit könnten auch mehrere Computer Dienste nach draußen anbieten und somit das Zertifikat teilen. Bis vor kurzen dachte ich, dass Zertifikat sei als nicht exportierbar markiert (was eigentlich aus MS Sicht mehr Sinn machen würde, da der Zertifikat eigentlich nur auf dem Homeserver sein muss).
SCCM 2012 (RC2) benötigt wie schon SCOM eine spezielle Sortierreihenfolge in der Datenbank. Der Prerequest Check während der Einrichtung weißt einem auch darauf hin. Trotz x-facher Installation von SCOM und SCCM falle ich immer wieder drauf herein.
In dem unwahrscheinlichen Fall, dass dies bei einer produktiven Installation passiert, würde ich den sauber Weg empfehlen und den SQL Server wieder deinstallieren und mit der richtigen Collation (=Sortierreihenfolge) neuinstallieren. Die Richtige ist übrigens SQL_Latin1_General_CP1_CI_AS:
Grundsätzlich darf auf einen Hyper-V Server nur ein Administrator zugreifen (Mitglied der lokalen Administratorengruppe). Setzt man den System Center Virtual Machine Manager (SCVMM) ein, so ermöglicht dieser einem u.a. ein rollenbasiertes Management. Dabei erfindet er das Rad nicht neu, sondern setzt ein Feature des Hyper-Vs ein, dass in meinen Augen zwar gut dokumentiert aber relativ unbekannt ist.
Dazu verwendet Hyper-V das rollenbasierte Accessmanagement (RBAC) und die dafür verfügbare GUI AzMan. Die Konfigurationsinformationen werden in einer XML Datei unter ProgramData\Microsoft\Windows\Hyper-V\InitialStorage.xml abgelegt. Achtung: Verwendet man den VMM Agent, so wird der Ort der XML Datei auf ProgramData\microsoft\Virtual Machine Manager\HyperVAuthStore.xml geändert!
Ich beschreibe hier die Vorgehensweise, wie man einer zusätzlichen benutzergruppe das Recht einräumen kann auf die Konsole der Virtuellen Maschinen zugreifen zu können:
Wer die Powershell Module von SCVMM und die Community Module zu Hyper-V gleichzeitig benutzen will, bekommt bei einigen Funktionen einen Konflikt.
Eigentlich sind alle Funktionen vom SCVMM eindeutig mit einem SC bezeichnet. So heißt die Funktion, um das Objekt einer Virtuellen Maschine zu erhalten get-SCVirtualMachine. Wahrscheinlich aus historischen Gründen gibt es aber eine Alias namens “get-VM” auf diese Funktion.
Die CodePlex Hyper-V Funktionen haben keinen gesonderten Namensraum. Hier heißt die Funktion für die Virtuelle Maschine einfach get-VM. Dies wäre nicht so schlimm, wenn die Funktion nicht auch intern fleißig genutzt wird. Möchte man die CodePlex Funktionen nutzen, um Differenzielle Disks zu erstellen (etwas was der SCVMM auch in 2012 nicht anbietet), so funktioniert dies nicht mehr, wenn beide Module geladen sind.
Die direkte Lösung wäre daher, den Alias auf get-SCVirtualMachine wieder zu entfernen. Neue Aliase sind einfach per “new-Alias” erstellbar. Eine Funktion namens “remove-Alias” existiert aber nicht, da ein Alias für die aktuelle Sitzung definiert und dort auch bis zum Ende bestehen bleibt.
Trotzdem kann man einen Alias mit der generischen Funktion remove-item entfernen. Hier heißt der Alias “Alias:get-VM”. D.h. wie bei der Bezeichnung “ftp:sdfsdf” oder “c:\get-vm” steht Alias: für das Protokoll bzw. den Namensraum, damit die Funktion weiß, an welches Modul sie den Löschbefehl weitergeben muss. Hier ein Beispiel:
$alias= Get-Alias | where {$_.name -eq "Get-VM"}
if ($alias -ne $null) {
$itemName=$alias.CommandType.ToString()+":"+$alias.name
Remove-Item $itemName
}
In diesem Blogpost werde ich die Arbeit mit den neuen Custom Properties im SCVMM 2012 vorstellen.
In Vergangenheit gab es eine Reihe von vordefinierten Custom Properties (1-10). Mit SCVMM 2012 gibt es beliebige Erweiterungsfelder, die als Objekt abgebildet sind und an Virtuellen Maschinen, Hosts, Clouds und anderen Objekten hängen können.
Diese Objekte kann man in Powershell mittels get-SCCustomProperty abrufen. Diese Objekte beinhalten aber noch keine Werte, sondern stellen nur die Schlüssel dar. Die eigentlich eingestellten Werte hängen in einer Hashtable an den zu erweiternden Objekten, also z.B. an der jeweiligen Virtuellen Maschine in der Hashtable Eigenschaft CustomProperty. Möchte man den Wert der selbsterstellten Eigenschaft “Kostenstelle” abfragen, so kann man dies über
In der ersten Zeile wird zur Sicherheit überprüft, ob überhaupt Custom Properties an diesem Objekt hängen (HashTable speichert die Anzahl der Einträge in Count). Danach werden alle CustomProperty Objekte aus der Key Eigenschaft ausgelesen und durchlaufen. Durch set-SCCustomPropertyValue wird das Objekt und der Wert an das Zielobjekt übertragen.
Ich habe gerade das Glück etwas mehr mit Powershell und System Center Virtual Machine Manager 2012 (SCVMM, RC) zu arbeiten. Daher werde ich hier wieder ein paar Codesnippsel posten, um bestimmte Funktionen zu automatisieren:
die erste Funktion soll eine neue Cloud für Hyper-V erzeugen . Zusätzlich wird ein neue Rolle für diese Cloud angelegt, die nur VMs verwalten darf.
#creates a new cloud and a corresponding usergroup
function createCloud([string]$name,[string]$hostgroupname)
{
#retrieving first GUID for creating the new cloud
$job= ([System.Guid]::NewGuid().toString())
#define Cloud limitations (here: no limit)
Set-SCCloudCapacity -JobGroup $job -UseCustomQuotaCountMaximum $true -UseMemoryMBMaximum $true -UseCPUCountMaximum $true -UseStorageGBMaximum $true -UseVMCountMaximum $true
#setting the used network (here: the network has the same name as the cloud)
$resources = @()
$resources += Get-SCLogicalNetwork -Name $Name
#defining that the cloud can be used on hyper-v server
$addCapabilityProfiles = @()
$addCapabilityProfiles += Get-SCCapabilityProfile -Name "Hyper-V"
#adding the settings to the cloud with the defined GUID
Set-SCCloud -JobGroup $job -RunAsynchronously -AddCloudResource $resources -AddCapabilityProfile $addCapabilityProfiles
#adding the cloud to the hostgroup
$hostGroups = @()
$hostGroups += Get-SCVMHostGroup -Name $hostgroupname
#creating the cloud and the rest from the first job
New-SCCloud -JobGroup $Job -VMHostGroup $hostGroups -Name $Name -RunAsynchronously
#creating the usergroup
#GUID for the second job
$job= ([System.Guid]::NewGuid().toString())
#the roleis for the newly created cloud
$scopeToAdd = @()
$scopeToAdd += Get-SCCloud -name $name
#the user of this role can start, stop and shutdown virtual machines in the cloud and start a remote control
Set-SCUserRole -JobGroup $job -AddScope $scopeToAdd -Permission @("RemoteConnect", "Shutdown", "Start", "Stop") -ShowPROTips $false
$cloud = Get-SCCloud -Name $name
#add all settings to the role
Set-SCUserRoleQuota -Cloud $cloud -JobGroup $job -QuotaPerUser -UseCPUCountMaximum -UseMemoryMBMaximum -UseStorageGBMaximum -UseCustomQuotaCountMaximum -UseVMCountMaximum
#create the role with the job guid
New-SCUserRole -Name $name -UserRoleProfile "SelfServiceUser" -Description "" -JobGroup $job
}
Für alle die schon darauf gewartet haben: Gestern Abend (deutscher Zeit) ist die öffentliche Beta vom System Center Service Manager veröffentlicht worden:
Ich arbeite als Systemingenieur in diversen Kundenprojekten bei der TechniData IT Service GmbH, die u.a. Standorte in Karlsruhe und Markdorf unterhält.