Dies ist eine alte Version des Dokuments!


Powershell

Windows Powershell

noch nix da ;-)

AD Powershell

$store = @()
$domain = New-Object System.DirectoryServices.DirectoryEntry
$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.SearchRoot = $domain
$searcher.PageSize = 100
$searcher.Filter = "(objectCategory=Computer)"
 
$proplist = ("name","pwdLastSet", "Distinguishedname")
foreach ($i in $propList){$prop=$searcher.PropertiesToLoad.Add($i)}
 
$results = $searcher.FindAll()
 
foreach ($result in $results){
 $pwdlastset=[Int64]($result.properties.Item("pwdlastset")[0])
 $pwdAge=New-TimeSpan $([datetime]::FromFileTime([int64]::Parse($pwdlastset))) $(Get-Date)
 if($pwdAge.days -gt 60){
    $obj = New-Object System.Object
    $obj | Add-Member -type NoteProperty -name Name -value $($result.properties.Item("Name"))
    $obj | Add-Member -type NoteProperty -name Alter -value $($pwdAge.days)
    $obj | Add-Member -type NoteProperty -name DN -value $($result.properties.Item("Distinguishedname"))
    $store += $obj
 }
}
 
return $store;

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

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.1384412655.txt.gz · Zuletzt geändert: 2013/12/06 19:12 (Externe Bearbeitung)