Dies ist eine alte Version des Dokuments!


Powershell

Windows Powershell

Gesperrte Benutzer

Import-Module activedirectory
 
Search-ADAccount –LockedOut
 
Search-ADAccount -LockedOut | Unlock-ADAccount
Alter Computer Konten 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

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")

Exchange Powershell

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"}
pub/powershell.1444198146.txt.gz · Zuletzt geändert: 2015/10/07 08:09 von Marco Krage