Problem:
Wir wollten einen physikalischen Server inkl. Applikation auf einen virtuell Server umziehen und from scratch neu installieren (kein P2V). Hierzu mussten wir die originalen Installationsmedien des Herstellers verwenden, da es sich um eine ROK-Lizenzen gehandelt. Bei der Installation in einer VM unter VirtualBox kam der Hinweis, dass das installationsmedium Vendor branded ist und die Installation bricht ab.
Lösung:
Man kann der VM unter VirtualBox einen Vendor BIOS Tag mitgeben, damit die Installation funktioniert. Das konnten wir bei Fujitsu und HP sauber abbilden.
Folgende Befehle haben hier den Vendor im BIOS gesetzt:
Fujitsu
VBoxManage setextradata "Analysis" "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor" "FUJITSU"
VBoxManage setextradata "Analysis" "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor" "FUJITSU // Phoenix Technologies Ltd."
HP
VBoxManage setextradata "VM Name" "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor" "HP"
VBoxManage setextradata "VM Name" "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor" "HP"
Ein überblick aller Befehle findet man hier:
Configuring the BIOS DMI Information
Problem:
Ich habe nach einer Möglichkeit gesucht den Internet Explorer von der Taskleiste auf unseren Terminalservern zu entfernen und den Edge dafür zu setzen. Die Ernüchterung war, dass Unpin funktioniert, aber Pin nicht mehr unterstützt wird. Somit konnte ich zumindest den Internet Explorer von der Taskleiste entfernen.
Unpin App from Tasskbar
Deutsches OS
$appname = "Internet Explorer"
((New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | ?{$_.Name -eq $appname}).Verbs() | ?{$_.Name.replace('&','') -match 'Von Taskleiste lösen'} | %{$_.DoIt(); $exec = $true}
Englisches OS
$appname = "Internet Explorer"
((New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | ?{$_.Name -eq $appname}).Verbs() | ?{$_.Name.replace('&','') -match 'Unpin from taskbar'} | %{$_.DoIt(); $exec = $true}
Ich stelle hier ein paar Skripte zur Verfügung, welche einem die Migration eines Printservers etwas vereinfachten. Selbstverständlich kann man das auch mir Printmig oder anderen Tools durchführen. Ich wollte meinen neuen Printserver from scratch neu installieren, daher der etwas andere Weg. Die Migration wird in vier Teile erfolgen:
Part #1: Export TCP- und LPR-Ports
Part #2: Export Drucker mit allen Settings in eine XML-Datei
Part #3: Import TCP- und LPR-Ports
Part #4: Import aller Drucker mit allen Settings
WICHTIG: Vor dem nächsten schritt müssen erst alle nötigen Druckertreiber installiert werden. Sollte sich der Name oder die Version der Druckertreiber ändern, dann müssen diese vorher in der exportierten CSV-Datei angepasst werden.
Nachdem die Druckertreiber installiert wurden, kann man mit einem
Get-PrinterDriver dir Druckertreiber anzeigen lassen. Hier findet man unter dem Punkt "Name" den Namen, welcher in der CSV entsprechend ausgetauscht werden muss. Sollte der Name nicht übereinstimmen, dann erhält man einen Fehler bei der Erstellung des Druckers, dass der Treiber nicht gefunden wurde. Nachdem dir Treiber installiert sind und die CSV ggf. angepasst wurde, können dir Drucker nun per Powershell erstellt werden (inkl. Konfiguration aus der XML).
Hinweis: Es hat sich gezeigt, dass Etikettendrucker nochmals gesondert geprüft werden müssen, da manche Informationen nicht im Windows-Treiber gespeichert wird (Druckkopf-Konfiguration).
Außerdem benötigt die Erstellung von Druckern, welche offline sind, ca. 1 Minute (TCP-Timeout).
Create-Printers_from_CSV.ps1
<#
.NAME
Create-Printers_from_CSV.ps1
.AUTHOR
Ralf Entner
.SYNOPSIS
Script creates all printers from a csv file. Config will be restored by import xml file.
.DESCRIPTION
Script creates all printers with all settings from a csv and xml file.
With the testmode $true you can run the script without any changes. It will only show whatif
A log file will be created
.NOTES
You have to install the printer drivers on the system before you run the script.
printer driver names must be changed in the csv file if it differs from the original names.
If the pritner is offline the creation will take approximal 1 mintue.
.COMPONENT
No powershell modules needed
.LINK
No Links
.Parameter ParameterName
$CSVPath - Define export path of the csv file
$Testmode - Defines testmode: $true = test | $false = live
$Logpath - Path for log file
#>
#Testmode ($true = active | $false = inactive)
$Testmode = $false
# CSV Import path
$CSVPath = "C:\tgswinv\Printmig\Printers.csv"
# XML import path
$XMLPath = "C:\tgswinv\Printmig\"
# Log File
$Logpath = "C:\tgswinv\Printmig\CreatePrinter.log"
#Start transciption
Start-Transcript -Path $Logpath -Append
# Import Printers
$Printers = Import-Csv -Path $CSVPath -Delimiter ";"
foreach($Printer in $Printers){
if(!(Get-Printer -Name $Printer.Name -ErrorAction SilentlyContinue))
{
Write-Host "Generating new pritner" $Printer.Name -ForegroundColor Green
# If port not exists create a new one with parameters from csv import
Add-Printer -Name $Printer.Name -PortName $Printer.Portname -DriverName $Printer.Drivername -Location $Printer.Location -Comment $Printer.Comment -WhatIf:$Testmode
Start-Sleep -Seconds 2
Write-Host "Import printer configuration from xml" $Printer.Name -ForegroundColor Green
# If port not exists create a new one with parameters from csv import
# Generate printer configuration path to xml file
$XMLConfigFile = $XMLPath + $Printer.Name + ".xml"
# Import printer configuration from xml file
$XMLConfig = Get-Content $XMLConfigFile | Out-String
# Set printer configuration from xml file
Set-PrintConfiguration -PrinterName $Printer.Name -PrintTicketXml $XMLConfig -WhatIf:$Testmode
}
}
Stop-Transcript