POWERSHELL

Powershell Remoting with Exchange

Andres Bohren
Hallo zusammen, Für ein Powershell Script habe ich einen Befehl aus den Exchange cmdlets benötigt. Deshalb habe ich mich mal mit Powershell Remoting beschäftigt. Und so gehts: Zuerst wird eine Session erzeugt $MySession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://icesrv01.corp.icewolf.ch/PowerShell/ -Authentication Kerberos Nun wird die Session Importiert Import-PSSession -Session $MySession -DisableNameChecking | Out-Null Nun kann man die Exchange Cmdlets des Remote Servers benutzen Get-Mailbox -identity MAILBOX Um die Remote Session zu beenden benutzt man Remove-PSSession $MySession Um zu zeigen, dass die Exchange Cmdlets lokal nicht geladen sind führe ich den Exchange Befehl nochmals aus Get-Mailbox -identity MAILBOX Grüsse Andres Bohren

Powershell Remoting with Lync

Andres Bohren
Hallo zusammen, Wo ich gleich beim Powershell Remoting bin, zeige ich euch doch auch gleich wie man das mit Lync macht. Lync Powershell Remote Session vorbereiten $lyncOptions = New-PSSessionOption -SkipRevocationCheck -SkipCACheck -SkipCNCheck $lync = New-PSSession -ConnectionUri https://icesrv06.corp.icewolf.ch/ocspowershell -SessionOption $lyncOptions -Authentication NegotiateWithImplicitCredential Powershell Remote Session importieren Import-PSSession $lync | Out-Null Ein Lync cmdlet ausführen Get-CsUser -Identity boa Powershell Remote Session beenden Remove-PSSession $lync Grüsse Andres Bohren

Powershell FileOpenDialog

Andres Bohren
Hallo zusammen, Mit Powershell kann man auch grafische Elemente einbinden, wie etwa den FileOpenDialog um ein File auszuwählen. Und hier der Source Code dazu ############################################################################### #Open File Dialog ############################################################################### Function Get-FileName { PARAM ( [string]$initialDirectory ) [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog $OpenFileDialog.initialDirectory = $initialDirectory $OpenFileDialog.ShowHelp = $true $OpenFileDialog.filter = "All files (*.*)| *.*" $show = $OpenFileDialog.ShowDialog() If ($Show -eq "OK") { Return $OpenFileDialog.FileName } } ############################################################################### #Main Program

Powershell 3.0 Release Candidate (RC)

Andres Bohren
Hallo zusammen, Ich habe mir mal den Release Candidate (RC) der Powershell 3.0 auf einem Windows 7 installiert. Microsoft .NET Framework 4 (Prerequisit) http://www.microsoft.com/en-us/download/details.aspx?id=17851 Windows Management Framework 3.0 - RC http://www.microsoft.com/en-us/download/details.aspx?id=29939 What's New in Windows PowerShell 3.0 http://technet.microsoft.com/en-us/library/hh857339.aspx PowerShell V3 Guide - Technet Wiki http://social.technet.microsoft.com/wiki/contents/articles/4725.powershell-v3-guide-en-us.aspx Grüsse Andres Bohren

Script: Export Calendar Permissions

Andres Bohren
Hallo zusammen, Ich habe mir ein Powershell Script geschrieben, um die Kalenderberechtigungen von Benutzern einer CSV Liste zu exportieren. Ich habe das unter Exchange 2010 getestet und natürlich wird dazu die Exchange Management Shell benötigt. ############################################################################### # ExportCalendarPermissions # Version 1.0 / 29.08.2012 # Andres Bohren / www.icewolf.ch / blog.icewolf.ch / info@icewolf.ch ############################################################################### $logpath = "T:\Visual Basic\PowerShell\ExportCalendarPermissions\ExportCalendarPermissions.log" $sw = new-object system.IO.StreamWriter($LogPath, 1) $mbx = Import-Csv "T:\Visual Basic\PowerShell\ExportCalendarPermissions\ExportCalendarPermissions.csv" ForEach ($Mailbox in $mbx)

Reset Active Directory User Password with Powershell

Andres Bohren
Hallo zusammen, Eine neue Scripting Aufgabe hat heute auf mich gewartet. Ich sollte ein Script eintwickeln, welches ein CSV File einliest und ein default Passwort vergibt und dort ein zusätzlichen Wert zum Passwort hinzufügt. Ausserdem soll auch gleich noch das Häcklein "User must change password at next logon" gesetzt werden. Das CSV File sieht so aus: SamaccountName,Password f.willy,1001 test50,1002 Und hier kommt das Script welches mit dem Quest Active Roles Powershell Snapin realisiert habe

EWS Managed API Demo: Delete Items in Recycle Bin older than 30 days

Andres Bohren
Hallo zusammen, Wo ich gerade schon dabei bin mit dem EWS Managed API herumzuspielen, habe ich mir einen lang ersehnten Wunsch erfüllt. Ich habe ein Powershell Script geschrieben, welches das Active Directory nach Mailboxen durchsucht und die Elemente im Outlook Papierkorb löscht, welche vor mehr als 30 Tagen zuletzt geändert wurden. Disclaimer Das Script habe ich selbst entwickelt und löscht Daten. Ausprobieren auf eigene Gefahr! Und hier das Script - kann aber auch heruntergeladen werden.

EWS Managed API Demo: Impersonation

Andres Bohren
Hallo zusammen, Ich habe mich die letzten Tage ein bisschen mit dem Exchange Web Service Managed API beschäftigt. Dabei habe ich mit Visual Basic 2008 Express und Powershell herumgetüftelt. Die grösste Herausforderung war jeweils funktionierenden Code von Visual Basic nach Powershell zu portieren. Will man auf andere Mailboxen zugreifen benötigt man Impersonation. Das ist unter folgenden URLs Dokumentiert: http://msdn.microsoft.com/en-us/library/dd633680(v=exchg.80).aspx http://msdn.microsoft.com/en-us/library/bb204095(EXCHG.140).aspx Damit Impersonation genutzt werden kann muss die Rolle "ApplicationImpersonation" zugewiesen werden

EWS Managed API Demo: Searchfilter

Andres Bohren
Hallo zusammen, Nachdem ich mich ein bisschen in die Managed API von EWS eingearbeitet habe, wollte ich nach bestimmten Elementen suchen. Das geht am besten über einen SearchFilter. Das Kernstück ist hier in untenstehendem Code dargestellt. #Suche nach Elementen welche eine bestimmte MessageClass aufweisen $MySearchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ItemClass, "IPM.Schedule.Meeting.Resp.Pos") #Suche nach Elementen welche den gesuchten String im Subject enthalten $MySearchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+ContainsSubstring([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::Subject, "TechTalk") $View = New-Object Microsoft.Exchange.WebServices.Data.ItemView(100) $ExResult = $EWService.

EWS Managed API Demo: SearchFilterCollection

Andres Bohren
Hallo zusammen, Wie SerachFilter funktionieren habe ich euch ja schon im vorhergehenden Artikel erklärt. Was wenn man aber nun mehr als nur ein Suchkriterium anwenden möchte? Dann nimmt man eine SearchFilterCollection. Der relevante Code dazu ist untenstehend: $SearchFilter1 = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ItemClass, "IPM.Schedule.Meeting.Request") $SearchFilter2 = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ItemClass, "IPM.Schedule.Meeting.Resp.Pos") $SearchFilter3 = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ItemClass, "IPM.Schedule.Meeting.Resp.Tent") $SearchFilter4 = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ItemClass, "IPM.Schedule.Meeting.Resp.Neg") $MySearchFilterCollection = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+SearchFilterCollection([Microsoft.Exchange.WebServices.Data.LogicalOperator]::Or) $MySearchFilterCollection.Add($SearchFilter1) $MySearchFilterCollection.Add($SearchFilter2) $MySearchFilterCollection.Add($SearchFilter3) $MySearchFilterCollection.Add($SearchFilter4) $View = New-Object Microsoft.Exchange.WebServices.Data.ItemView(1000) $ExResult = $EWService.