Dies ist eine alte Version des Dokuments!
Powershell
Ausgabe aus mehreren Befehlen zusammen
Get-VM | Get-NetworkAdapter | Where-object {$_.Type -ne "Vmxnet3"} | Select @{N="VM";E={$_.Parent.Name}},Name,Type
Windows Powershell
Remote Session
Enter-PSSession -ComputerName $computerName -Credential adi@marien-kh.mkh
$cred = Get-Credential adi@marien-kh.mkh Enter-PSSession -ComputerName $computerName -Credential $cred
Get Registry Value
Get-ItemPropertyValue "$path" -name "$key"
Log Date
Write-Host (get-date).DateTime
Delete if no matching JPG exists
Get-ChildItem *.arw | % { if (-not (Test-Path $_.Basename+".jpg")) {Remove-Item $_} }
Drucker Migration
Drucker von altem Printserver zu neuem Printserver migieren inklusive Standarddrucker.
$Printers = Get-WmiObject win32_printer $oldPrintserver = "svrv-print" # OLD Printserver !Hostname! $newPrintserver = "print" # New Printserver !Hostname! foreach($oldPrinter in $Printers) { Write-Host "Bearbeite Drucker: "$oldPrinter.Name if( $oldPrinter.Name.StartsWith("\\$oldPrintserver") ) { Write-Host "Migriere Drucker: "$oldPrinter.Name $pos = $oldPrinter.Name.LastIndexOf("\") $PrinterHost = $oldPrinter.Name.Substring(0, $pos) $PrinterName = $oldPrinter.Name.Substring($pos+1) Write-Host "Verbinde Drucker \\$newPrintserver\$PrinterName" $WMIPrinter = [WMIClass]"\\.\root\cimv2:Win32_Printer" $res = $WMIPrinter.AddPrinterConnection("\\$newPrintserver\$PrinterName") $newPrinter = Get-WMIObject -query "Select * From Win32_Printer Where Name = '\\\\$newPrintserver\\$PrinterName'"; if($newPrinter) { if($oldPrinter.Default) { Write-Host "Setzte Standarddrucker: \\$newPrintserver\$PrinterName" $newPrinter.SetDefaultPrinter() } Write-Host "Lösche Drucker: "$oldPrinter.Name $oldPrinter.Delete() }else{ Write-Host "Fehler beim Verbinden. "$oldPrinter.Name" wurde nicht gelöscht." } } } Write-Host "Press any key to continue ..." $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Active Directory
Gesperrte Benutzer
Import-Module activedirectory Search-ADAccount –LockedOut Search-ADAccount -LockedOut | Unlock-ADAccount
Alte Computerkonten finden
$then = (Get-Date).AddDays(-60) # The 60 is the number of days from today since the last logon. Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then} Set-ADComputer -Enabled $false
Exchange
Die Powershell und auch die Exchange-Verwaltungsshell nutzen s.g. Cmdlets. Diese setzt sich aus einem Verb und einem Hauptwort zusammen. Zum Beispiel Get-Mailbox
oder Set-Mailbox
. Die Exchnage CMDlets funktionieren nur in der Exchange-Verwaltungsshell und nicht in der normalen Powershell.
Postfach durch E-Mail Adresse finden
Folgender Befehlt gibt alle Postfächer aus, welche die Zeichenfolge „NACHNAME“ in einer der zugewiesenen Email-Adressen enthalten.
Get-Mailbox -filter "EmailAddresses -like '*NACHNAME*'" Name Alias ServerName ProhibitSendQuota ---- ----- ---------- ----------------- NACHNAME, V. (ABT) nachname mailserver unlimited
Um nicht nur eine kurze tabelarische Übersicht über diese Postfächer zu bekommen, sondern alle jeweiligen Details anzuzeigen wird | format-list
an den Befehl gehängt.
Get-Mailbox -filter "EmailAddresses -like '*NACHNAME*'" | format-list Database : MAILERVER\SG1\SG1DB01 DeletedItemFlags : DatabaseDefault UseDatabaseRetentionDefaults : True RetainDeletedItemsUntilBackup : False [...] Name : Nachname, V. (Abt.) DistinguishedName : CN=Nachname\, V. (Abt.),OU=OU-User,DC=Domain,DC=TLD Identity : Domain.TLD/OU-User/Nachname, V. (Abt.) Guid : f5ef952f-b491-443f-a392-e3617731c48f ObjectCategory : Domain.TLD/Configuration/Schema/Person ObjectClass : {top, person, organizationalPerson, user} WhenChanged : 24.03.2010 11:06:27 WhenCreated : 01.04.2008 11:53:17
Ein alternativer, aber sehr unperformater, Lösungsweg ist der folgende.
Zuerst werden alle Postfächer ausgelesen und im nachhinein gefiltert. Je mehr Postfächer man hat um so länger dauert der Befehl dann natürlich. Auch hier kann mit | format-list
eine detailierter Ansicht erzeugt werden
Get-Mailbox | where {$_.EmailAddresses -match "NACHNAME"} Name Alias ServerName ProhibitSendQuota ---- ----- ---------- ----------------- NACHNAME, V. (ABT) nachname mailserver unlimited
Getrennte Mailboxen auflisten
Anders als in der Onlinehilfe beschrieben, tauchen getrennte Mailboxen oft nicht von selbst im Zweig “Getrenntes Postfach” der Verwaltungskonsole auf. Ähnlich wie in den Vorgängerversionen kann man Exchange dann auffordern, nach den Mailboxen zu suchen. Hierzu verwendet man in der Exchange-Shell folgendes Kommando:
Clean-MailboxDatabase "Name-der-Datenbank"
Danach sollten die getrennten Mailboxen auch im GUI sichtbar sein. Um diese direkt per PowerShell aufzulisten, eignet sich folgendes Kommando:
Get-MailboxStatistics -server SERVERNAME | Where {$_.DisconnectDate -ne $null}
Wichtig ist dabei der Servername – die TechNet-Dokumentation gibt das leider falsch an.
Getrennte Mailboxen entstehen, wenn man eine Mailbox von dem zugehörigen AD-Benutzerkonto trennt (Befehl “Deaktivieren” in der Konsole bzw. “Disable-Mailbox” in der Shell). Im Gegensatz zum Entfernen einer Mailbox bleibt das AD-Benutzerkonto hierbei erhalten.
Quelle: http://www.faq-o-matic.net/2010/03/31/exchange-2010-getrennte-mailboxen-auflisten/
Postfachgrößen
Postfachgröße eines bestimmten Postfachs
Get-MailboxStatistics kragem | ft DisplayName, ItemCount, TotalItemSize -AutoSize DisplayName ItemCount TotalItemSize ----------- --------- ------------- Nachname, V. 130 16402905B Müller, F. 2 27172B
Postfachgrößen aller Postfächer sortiert und in Größe in MB
Get-MailboxDatabase | Get-MailboxStatistics | Sort-Object -Descending -Property TotalItemSize | ft DisplayName, ItemCount, @{Expression={$_.TotalItemSize.Value.ToMb()};label="Size(MB)"} -autosize DisplayName ItemCount Size(MB) ----------- --------- -------- Nachname, V. 9170 1081 Müller, F. 1224 935
Postfachgrößen als CSV (Komma) exportieren
Get-MailboxStatistics | Select-Object DisplayName, LastLogonTime, LastLogoffTime, ItemCount, TotalItemSize, @{Expression={$_.TotalItemSize.Value.ToMb()}} | export-csv \\server\temp\export.txt -notype
Datenbank
Übersicht über Datenbanken und deren Größe.
Get-MailboxDatabase -Status | ft name,server,databasesize
Postfach
Postfach suchen
Get-Mailbox -filter "EmailAddresses -like '*NACHNAME*'"
Getrennte Mailboxen auflisten
Get-MailboxStatistics -server SERVERNAME | Where {$_.DisconnectDate -ne $null}
Mailbox Cleanup um getrennte Postfächer sofort in der GUI anzuzeigen
Clean-MailboxDatabase "Name-der-Datenbank"
Postfachgröße
Get-MailboxStatistics kragem | ft DisplayName, ItemCount, TotalItemSize -AutoSize
Postfachgrößen aller Postfächer sortiert und in Größe in MB
Get-MailboxDatabase | Get-MailboxStatistics | Sort-Object -Descending -Property TotalItemSize | ft DisplayName, ItemCount, @{Expression={$_.TotalItemSize.Value.ToMb()};label="Size(MB)"} -autosize
Postfachgrößen als CSV (Komma) exportieren
Get-MailboxStatistics | Select-Object DisplayName, LastLogonTime, LastLogoffTime, ItemCount, TotalItemSize, @{Expression={$_.TotalItemSize.Value.ToMb()}} | export-csv \\server\temp\export.txt -notype
Postfachfunktionen
Postfächer mit Active Sync
Get-CASMailbox | where {$_.ActiveSyncEnabled -eq $true }
Postfächer mit OWA
Get-CASMailbox | where {$_.OWAEnabled -eq $true }
Geräte
Alle Geräte-Details anzeigen
Get-ActiveSyncDevice | fl UserDisplayName, DeviceId, DeviceType, DeviceModel, DeviceOS, FriendlyName, Name, DeviceAccessState
Alle Geräte-Details einer Mailbox anzeigen
Get-ActiveSyncDevice -Mailbox "kragem" | fl UserDisplayName, DeviceId, DeviceType, DeviceModel, DeviceOS, FriendlyName, Name, DeviceAccessState
Alle Geräte einer Mailbox anzeigen mit LastSync Datum. Alte Geräte oben.
Get-ActiveSyncDeviceStatistics -Mailbox "kragem" | fl DeviceID, DeviceType, DeviceModel, FirstSyncTime, LastSuccessSync
Alte Geräte finden
Get-ActiveSyncDevice -Result Unlimited | Get-ActiveSyncDeviceStatistics | Where {$_.LastSuccessSync -le (Get-Date).AddDays("-30")} | fl DeviceID, DeviceType, DeviceModel, FirstSyncTime, LastSuccessSync, Identity
zum löschen der Geräte statt an Format-List
an Remove-ActiveSyncDevice
pipen oder manuell löschen
Device manuell über ID löschen (Achtung: Wird aus allen evtl. aktiven Mailboxen gelöscht!)
Get-ActiveSyncDevice | where {$_.DeviceId -eq "1140B5A5508D422741F2E87CE114E115"} | Remove-ActiveSyncDevice
Device aus bestimmter Mailbox löschen (über Identity)
Get-ActiveSyncDevice | where {$_.Identity -eq "Marien-kh.MKH/Haus/Hilsmann, M. (PDL)/ExchangeActiveSyncDevices/iPhone§O9VKDO3G7D3HJ0V8JQ9V0TSTGO"} | Remove-ActiveSyncDevice
http://technet.microsoft.com/en-us/library/bb266947(v=exchg.141).aspx
Set-CasMailbox pponzeka –ActiveSyncAllowedDeviceIDs number1,number2 Set-CasMailbox pponzeka –ActiveSyncAllowedDeviceIDs:$null
Zertifikat erneuern
TODO
To renew the certificate perform following steps:
Open Exchange Management Shell
Check status of existing certificate(s). Make note of the „Thumbprint“ value:
Get-ExchangeCertificate | List
Get a new self-signed certificate. Use „Thumbprint“ from the old certificate:
Get-ExchangeCertificate –thumbprint "C9A4BB6094A167BD324618D8492C4C5281FDD34A" | New-ExchangeCertificate
Examine properties of the new certificate. Make sure all required services are enabled.
Get-ExchangeCertificate | List
If some of the required services are not enabled you can enable them with following cmdlet (Use „Thumbprint“ from the new certificate):
Enable-ExchangeCertificate -thumbprint "A0BB986024A347BAC24438D8432C1B123AFDF11B" -services IIS, POP, SMTP, IMAP
Ensure that all required services are working with new certificate and then remove the old certificate:
Remove-ExchangeCertificate -thumbprint "C9A4BB6094A167BD324618D8492C4C5281FDD34A"
VMware
RDM + LUN ID
$RDMs = @() foreach($vm in (Get-View -ViewType "VirtualMachine")) { foreach($dev in ($vm.Config.Hardware.Device | where {($_.gettype()).Name -eq "VirtualDisk"})) { if(($dev.Backing.CompatibilityMode -eq "physicalMode") -or ($dev.Backing.CompatibilityMode -eq "virtualMode")) { $objRdm = "" | select VMName, VMDK, UUID, DiskLabel, SCSIBus, SCSIDevice, Mode $objRdm.VMName = $vm.Name $objRdm.VMDK = $dev.Backing.FileName $objRdm.UUID = $dev.Backing.LunUuid $objRdm.DiskLabel = $dev.DeviceInfo.Label $objRdm.SCSIBus = ( $vm.Config.Hardware.Device | ? { $_.Key -eq $dev.ControllerKey }).BusNumber $objRdm.SCSIDevice = $dev.UnitNumber $objRdm.Mode = $dev.Backing.CompatibilityMode $RDMs += $objRdm } } } foreach ($cluster in (Get-View -ViewType "ClusterComputeResource")) { $vmhostsview = $cluster.host | % { Get-View $_ } $vmhostview = $vmhostsview | Select -first 1 $ScsiLuns = $vmhostsview | % { $_.Config.StorageDevice.ScsiLun } | Select -unique * $UUIDs = $ScsiLuns | Select -unique UUID $Datastores = $vmhostsview | % { $_.Config.FileSystemVolume.MountInfo } | % { $_.Volume } | Select -Unique * $HostLUN = $vmhostsview | % { $_.Config.StorageDevice.ScsiTopology.Adapter } | % { $_.Target | % { $_.LUN } } | Select -unique * foreach ($UUID in $UUIDs) { $Lun = $ScsiLuns | ? { $_.UUID -eq $UUID.UUID } | Select -first 1 $objVolume = "" | Select Cluster, VolumeName, CanonicalName, DisplayName, VolumeType, CapacityGB, BlockSizeMb, VMFSVersion, LunType, Vendor, Model, HostLUN, VM, VMDiskLabel, VMSCSIBus, VMSCSIDevice, Revision, ScsiLevel, UUID $objVolume.Cluster = $cluster.Name $objVolume.CanonicalName = $Lun.CanonicalName $objVolume.HostLUN = ($HostLUN | ? { $_.ScsiLun -eq $Lun.Key } | select -unique LUN).LUN $objVolume.UUID = $Lun.Uuid $objVolume.CapacityGB = $Lun.Capacity.Block * $Lun.Capacity.BlockSize / 1GB $objVolume.DisplayName = $Lun.DisplayName $objVolume.LunType = $Lun.LunType $objVolume.Vendor = $Lun.Vendor $objVolume.Model = $Lun.Model $objVolume.Revision = $Lun.Revision $objVolume.ScsiLevel = $Lun.ScsiLevel foreach ($vol in $Datastores) { if ($vol.extent | % { $_.diskname -eq $Lun.CanonicalName}) { $objVolume.VolumeName = $vol.Name $objVolume.BlockSizeMb = $vol.BlockSizeMb $objVolume.VMFSVersion = $vol.Version $objVolume.VolumeType = "vmfs" } } foreach ($rdm in $RDMs) { if ($Lun.Uuid -eq $rdm.UUID) { $objVolume.VolumeName = $rdm.VMDK $objVolume.VM = $rdm.VMName $objVolume.VMDiskLabel = $rdm.DiskLabel $objVolume.VMSCSIBus = $rdm.SCSIBus $objVolume.VMSCSIDevice = $rdm.SCSIDevice if ($rdm.Mode -eq "virtualMode" ) { $objVolume.VolumeType = "rdm" } if ($rdm.Mode -eq "physicalMode") { $objVolume.VolumeType = "rdmp" } } } $objVolume } }
[vSphere PowerCLI] C:\> .\rdm.ps1 | where {$_.HostLUN -match "220"}