blog.icewolf.ch

Let's talk about IT!
posts - 1348, comments - 295, trackbacks - 0

My Links

Archives

Post Categories

icewolf

Powershell

Scripting - the new way
Powershell on Linux

Hallo zusammen, Als ich den nachfolgenden Artikel gelesen habe wurde ich extrem neugierig. Das .NET Core Framework auf Linux? Nun ja, mit Windows 10 und Windows Server 2016 kommt ja auch die Bash auf Windows. PowerShell ist jetzt Open Source und für Linux verfügbar https://blogs.msdn.microsoft.com/microsoft_developer_schweiz_news/2016/09/06/powershell-ist-jetzt-open-source-und-fur-linux-verfugbar/?wt.mc_id=AID520637_EML_4519506 Mehr dazu gibt es hier https://github.com/PowerShell/PowerShell/tree/master/docs/learning-powershell Auf meinem CentOS7 habe ich Powershell installiert yum install https://github.com/PowerShell/PowerShell/releases/download/v6.0.0-alpha.9/powershell-6.0.0_alpha.9-1.el7.centos.x86_64.rpm Nach der Installation habe ich die Powershell gestartet und einige Befehle getestet powershell get-host get-process Grüsse Andres Bohren

posted @ Friday, September 16, 2016 8:18 PM | Feedback (0) | Filed Under [ Powershell Linux ]

Powershell to Exchange Online and Exchange On Premises at the same time

Hallo zusammen, Wer in einer Exchange Hybrid Umgebung arbeitet, hat sicher schon gemerkt, dass man nicht gleichzeitig mit Exchange Online und mit Exchange OnPremise über Powershell verbunden sein kann. Ausser man verwendet ein Prefix - und das zeige ich euch nun hier /*ExOnline*/ $cred = Get-Credential a.bohren@serveralive.onmicrosoft.com $ExSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/PowerShell/ -Credential $cred -Authentication Basic -AllowRedirection Import-PSSession -Session $ExSession –Prefix o365 /*OnPrem*/ $onpremcred = Get-Credential "corp\administrator" $MySession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://icesrv10.corp.icewolf.ch/PowerShell/ -Credential $onpremcred Import-PSSession -Session $MySession -DisableNameChecking | Out-Null Die Sessions können nun mit folgendem Befehl angezeigt werden Get-PSSession Nun kommt das Prefix zum Einsatz Anstatt den Befehl "Get-Mailbox" verwendet man "Get-o365Mailbox" um die Exchange Online Session anzusteuern. Grüsse Andres...

posted @ Tuesday, September 29, 2015 9:40 PM | Feedback (0) | Filed Under [ Exchange Powershell O365 ]

Show SMB Version with Get-SmbConnection

Hallo zusammen, Um die SMB Version des Fileservers herauszufinden kann man den folgenden Powershell Befehl verwenden. Er muss allerdings "als Administrator" ausgeführt werden und zeigt die SMB Version der verbundenen Netzlaufwerke an. Get-SmbConnection Grüsse Andres Bohren

posted @ Wednesday, August 19, 2015 9:31 PM | Feedback (0) | Filed Under [ Windows Powershell ]

New PowerShell cmdlets in Windows Server 2016 TP2

Hallo zusammen, Kürzlich bin ich über den folgenden Blog Artikel auf dem TechNet Blog gestolpert. Jose Bareto zeigt dort all die neuen Powershell cmdlets verglichen zu einem Windows 2012 R2 Server. New PowerShell cmdlets in Windows Server 2016 TP2 http://blogs.technet.com/b/josebda/archive/2015/05/25/new-powershell-cmdlets-in-windows-server-2016-tp2-compared-to-windows-server-2012-r2.aspx Grüsse Andres Bohren

posted @ Monday, June 01, 2015 10:01 PM | Feedback (0) | Filed Under [ Powershell ]

Using Powershell to access Twitter REST API

Hallo zusammen, Nachdem ich mir nun die Grundlagen von REST beigebracht habe, wollte ich nun das REST API von Twitter ausprobieren. Als erstes muss man in seinem Twitter Account die Mobilnummer registrieren Und danach den Verifikationscode welcher per SMS versendet wird eingeben Nun muss eine neue Applikation erstellt werden https://apps.twitter.com/app/new Läuft alles glatt, so wird eine neue Applikation angelegt. Die Details, welche ich benötige sind unter "manage keys and access tokens" versteckt. Um eine Anmeldung zu machen, muss man sich erst einen Access Token holen. Wie das geht ist hier beschrieben: https://dev.twitter.com/oauth/application-only Und so sieht der Powershell Code dazu aus #Get Bearer Token #https://dev.twitter.com/oauth/application-only $oAuthConsumerKey = "ConsumerKey" $oAuthConsumerSecret = "ConsumerSecret" $BearerToken...

posted @ Tuesday, May 26, 2015 10:56 PM | Feedback (1) | Filed Under [ Powershell ]

Use Powershell to shorten URI with bitly REST API

Hallo zusammen, Ich habe mich ein wenig mit der REST Schnittstelle von Webapplikationen befasst. Hier ein paar wichtige Grundlagen  Representational State Transfer (REST) http://de.wikipedia.org/wiki/Representational_State_Transfer REST Web Services http://www.oio.de/public/xml/rest-webservices.htm Intro to Rest (Video below) http://www.restapitutorial.com/lessons/whatisrest.html Ich habe mir mal die REST Schnittstelle von Bitly angeschaut http://dev.bitly.com/get_started.html Danach habe ich mir das Powershell Command "Invoke-RestMethod" angeschaut Invoke-RestMethod https://technet.microsoft.com/en-us/library/hh849971.aspx Nachdem ich mir einen www.bitly.com  Account angelegt hatte und ein wenig rumprobiert habe, ist folgender Powershell Code rausgekommen. ## HTTP Basic Authentication Flow ##http://dev.bitly.com/authentication.html $user = "username" $pass= "SecredPassword" $uri = "https://api-ssl.bitly.com/oauth/access_token" $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$pass))) $Accesstoken = Invoke-RestMethod -Method Post -uri $uri -Headers...

posted @ Tuesday, May 26, 2015 8:52 PM | Feedback (0) | Filed Under [ Powershell ]

Powershell Remoting with Azure AD

Hallo zusammen, Ich habe mir mal angeschaut, wie man mit der Powershell auf Azure AD zugreifen kann. Dazu muss man den "Microsoft Online Service Sign-In Assistant" und das "Azure Active Directory Module for Windows PowerShell" installieren. Manage Azure AD using Windows PowerShell https://msdn.microsoft.com/en-us/library/azure/jj151815.aspx Microsoft Online Services Sign-In Assistant for IT Professionals RTW http://www.microsoft.com/en-us/download/confirmation.aspx?id=41950 Azure Active Directory Module for Windows PowerShell (64-bit version), http://go.microsoft.com/fwlink/p/?linkid=236297 Entweder man startet dann den Shortcut auf dem Desktop oder Importiert das MsOnline Powershell Modul Import-Module MsOnline Die Verbindung mit dem Azure AD erstellt man mit folgendem befehl $cred = Get-Credential Connect-MsolService -Credential $cred Welche Befehle es gib, kann man sich mit folgendem Befehl anzeigen...

posted @ Tuesday, March 03, 2015 9:27 PM | Feedback (0) | Filed Under [ Powershell Office ]

DNS Lookups with Powershell

Hallo zusammen, Mit Powershell 4.0 gibt es endlich ein cmdlet welches alle DNS Querys erlaubt. Resolve-DnsName https://technet.microsoft.com/en-us/library/jj590781.aspx Resolve-DnsName -Name icewolf.ch -Type NS Resolve-DnsName -Name icewolf.ch -Type SOA Resolve-DnsName -Name icewolf.ch -Type MX Resolve-DnsName -Name icewolf.ch -Type TXT Resolve-DnsName -Name www.icewolf.ch -Type A Resolve-DnsName -Name _ldap._tcp.corp.icewolf.ch -Type SRV Resolve-DnsName -Name 172.21.175.20 -Type PTR Grüsse Andres Bohren

posted @ Sunday, March 01, 2015 2:10 PM | Feedback (0) | Filed Under [ Powershell ]

Powershell Remoting with Lync Online

Hallo zusammen, Ich habe mir mal angeschaut, wie man mit der Powershell auf Lync Online zugreifen kann. Dazu muss man das Windows PowerShell Module für Lync Online installieren. Windows PowerShell Module for Lync Online http://www.microsoft.com/en-us/download/details.aspx?id=39366 Danach kann man eine Remote PowerShell Session auf Lync Online herstellen $cred = Get-Credential $lyncSession = New-CsOnlineSession -Credential $cred Import-PSSession $LyncSession Remove-PSSession $LyncSession Eine Dokumentation der Lync Online Commandlets gibt es hier Lync Online cmdlets https://technet.microsoft.com/en-us/library/jj994021.aspx Grüsse Andres Bohren

posted @ Saturday, February 07, 2015 5:36 PM | Feedback (0) | Filed Under [ Powershell UM/Mobile ]

Powershell Remoting with Exchange Online

Hallo zusammen, Ich habe mir mal angeschaut, wie man mit der Powershell auf Exchange Online zugreifen kann $cred = Get-Credential $ExSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/PowerShell/ -Credential $cred -Authentication Basic -AllowRedirection Import-PSSession -Session $ExSession Remove-PSSession $ExSession Grüsse Andres Bohren

posted @ Saturday, February 07, 2015 5:30 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

Dotnet Framework Regular Expressions (RegEx) Quick Reference

Hallo zusammen, Beim sufen bin ich über folgendes gestolpert - kann man sicherlich beim nächsten Powershell Script brauchen .NET Framework Regular Expressions - Quick Reference http://www.microsoft.com/en-us/download/details.aspx?id=43119 Grüsse Andres Bohren

posted @ Monday, June 16, 2014 10:37 PM | Feedback (0) | Filed Under [ Windows Powershell ]

Powershell Update-Help

Hallo zusammen, Ich habe kürzlich mal wieder mit der Powershell rumgespielt. In der Zwischenzeit habe ich auf Powershell 4.0 aktualisiert. Nun muss also erstmal die Hilfe aktualisiert werden. Update-Help http://technet.microsoft.com/en-us/library/hh849720.aspx Danach erhalte ich erstmal eine heftige rote Fehlermeldung Also die Powershell als Administrator starten und den Befehl nochmals ausführen Update-Help Die aktualisierten Hilfedateien landen hier C:\Windows\System32\WindowsPowerShell\v1.0\en-US Nun ist die Hilfe aktualisiert. Grüsse Andres Bohren

posted @ Wednesday, February 26, 2014 7:04 PM | Feedback (0) | Filed Under [ Powershell ]

Zip a File with Powershell 3.0

Hallo zusammen, Mit dem folgenden Code kann man ohne zusätzliche Komponenten Files in ein ZIP Archiv packen. Add-Type -As System.IO.Compression.FileSystem [System.IO.Compression.CompressionLevel]$Compression = "Optimal" #ZIP a File [String]$ZipFilePath = "c:\temp\test.zip" [String]$File = "c:\temp\Mailboxes.txt" $Archive = [System.IO.Compression.ZipFile]::Open( $ZipFilePath, "Update" ) $null = [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($Archive, $file, "Mailboxes.txt", $Compression) $archive.Dispose() Grüsse Andres Bohren

posted @ Wednesday, January 08, 2014 8:23 PM | Feedback (1) | Filed Under [ Powershell ]

Remove AelitaEMW Messages in Public Folder with EWS Managed API

Hallo zusammen,  Ich habe ein Powershell Script entwickelt um die Quest Migration Manager Messages nach der Migration im Public Folder zu entfernen. Das Script nutzt die EWS Managed API http://www.microsoft.com/en-us/download/details.aspx?id=35371 ############################################################################### # Remove Quest Migration Manager Hidden Messages in Public Folders # Remove Messages with Subject "AelitaEMW_" in Associated Content Store # # Script Uses EWS Managed API # http://www.microsoft.com/en-us/download/details.aspx?id=35371 # # Version 1.0 / 27.10.2013 # Andres Bohren / www.icewolf.ch / blog.icewolf.ch / info@icewolf.ch ###############################################################################   ############################################################################### # PFRootListFolders # List Public Folder Root Folders ############################################################################### Function PFRootListFolders {     $View = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1000)                 $psPropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::IdOnly)     $psPropertySet.Add([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName)     $psPropertySet.Add([Microsoft.Exchange.WebServices.Data.FolderSchema]::ChildFolderCount)     $View.PropertySet = $psPropertySet                                             $ExResult = $EWService.FindFolders([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::PublicFoldersRoot, $View)                 If ($ExResult -ne $Null)                {        ...

posted @ Sunday, October 27, 2013 9:59 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

Powershell DNS reverse and MX lookup

Hallo zusammen, Kürzlich musste ich eine grössere Liste von IP Adressen auflösen - dazu habe ich mir kurzerhand ein Powershell Script geschrieben. Die IP's sind in einer CSV Datei Das CSV wird eingelesen und für jede IP wird ein DNS Reverse Lookup gemacht. Die Ausgabe erfolgt direkt in die Konsole. ############################################################################### # Reverse DNS Lookup with Powershell v1.0 # 27.01.2013 A.Bohren - http://blog.icewolf.ch ############################################################################### $List = Import-CSV C:\Temp\ip.csv Foreach ($entry in  $list) {  Try  {   Try   {    $x = [System.Net.Dns]::GetHostbyAddress($entry.IP)    write-host $entry.IP $x.Hostname -ForegroundColor green   } catch {    throw $_.exception   }  } catch [System.Management.Automation.MethodInvocationException] {   #Write-Host "MethodInvocationException " -ForegroundColor cyan   write-host $entry.IP "DNS Entry not found" -ForegroundColor red  } } Leider kann man mit den Dotnet Klassen per Default nur Forward und Reverse...

posted @ Monday, May 27, 2013 10:17 PM | Feedback (0) | Filed Under [ Powershell ]

Download File from Internet with powershell and proxyauthentication

Hallo zusammen, Heute musste ich ein Powershell Script erstellen, welches ein File aus dem Internet herunterlädt. Und dies auch noch über einen Authenticated Proxy. Am besten so, dass weder Benutzername noch Passwort im Script hinterlegt werden muss. #/*NoProxy*/ $source = "http://www.funkykitchenclub.ch/robots.txt" $dest = "c:\temp\file.txt" $WebClient = New-Object System.Net.WebClient $WebClient.DownloadFile($source,$dest) #/*Proxy with Authentication*/ $source = "http://www.funkykitchenclub.ch/robots.txt" $dest = "c:\temp\file.txt" $WebClient = New-Object System.Net.WebClient $WebProxy = New-Object System.Net.WebProxy("http://ICESRV03.corp.icewolf.ch:8080",$true) $WebProxy.UseDefaultCredentials = $true $WebClient.Proxy = $WebProxy $WebClient.DownloadFile($source,$dest) Grüsse Andres Bohren

posted @ Monday, May 27, 2013 5:54 PM | Feedback (0) | Filed Under [ Powershell ]

Configure Account Lockout feature in Forefront TMG

Hallo zusammen, Meine Account Lockout Policy erlaubt 5 falsche Anmeldungen, danach wird der Account für 30 Minuten gesperrt. Damit ein Account nicht durch fehlgeschlagene Anmeldeversuche vom OWA gesperrt wird, habe ich das Lockout Feature auf dem Forefront TMG aktiviert. Im folgenden Blog wird das genau erklärt. http://blog.powershell.no/2012/08/07/configure-account-lockout-feature-in-forefront-tmg-using-windows-powershell/ Das dazugehörige Script findet man hier: http://gallery.technet.microsoft.com/scriptcenter/Retrieve-and-modify-18a029ba $FPC =  New-Object -ComObject FPC.root $array = $FPC.GetContainingArray() $listener = $array.RuleElements.WebListeners | Where-Object {$_.Name -eq “My Listener”} $listener.Properties | fl *account* Meldet man sich zu oft falsch an (AccountLockoutThreshold) wird das in den Alerts angezeigt Und auch im Application Eventlog findet sich ein entsprechender Eintrag Source: Microsoft Forefront TMG Web Proxy Event ID: 32581 Level: Error Text: limit for...

posted @ Tuesday, May 07, 2013 11:18 PM | Feedback (0) | Filed Under [ Security Powershell ]

Create AD Account, Exchange Mailbox, Lync Account with Powershell

Hallo zusammen, Habe mir mal gedacht, man könnte ein Script schreiben um einen AD Account, Exchange Mailbox und Lync Account zu erstellen. Dies hier ist der erste Versuch und kann sicher als Vorlage für ein eigenes Script dienen.... ############################################################# # /*Setting Up Variables*/ ############################################################# $Password = ConvertTo-SecureString "Pass@word1" -AsPlainText -Force $Firstname = "Bruce" $Lastname = "Springsteen" $Initials = $Firstname.Substring(0,1) + $Lastname.Substring(0,1) $SAMAccountName = $Lastname.Substring(0,6) + $Firstname.Substring(0,2) $UPN = $SAMAccountName + "@corp.icewolf.ch" $Company = "Icewolf" $Displayname = $Lastname+", " + $Firstname + " ("+ $Company + ")" $Office = "2.11" $PhoneNumber = "+41 31 123 45 67" $MobileNumber = "+41 31 123 45 67" $Street = "Streename" $City = "Bern" $PLZ = "3006" $Kanton = "BE" $Country = "CH" $JobTitle = "System...

posted @ Wednesday, May 01, 2013 9:57 PM | Feedback (0) | Filed Under [ Exchange Windows Powershell UM/Mobile ]

Active Roles Powershell work with Connection Object

Hallo zusammen, Wenn man in einem Script mit mehreren Domains arbeitet dann muss man entweder immer wieder die Verbindung mit Connect-QADService wechseln oder man erzeugt sich entsprechende Connection Objekte.  $pwDest = read-host "Enter password" -AsSecureString $connDest = connect-QADService -service destination.internal -ConnectionAccount Destination\administrator -ConnectionPassword $pw $pwIcewolf = read-host "Enter password" -AsSecureString $connIcewolf = connect-QADService -service corp.icewolf.ch -ConnectionAccount CORP\administrator -ConnectionPassword $pwIcewolf Im obigen Beispiel muss das Passwort Interaktv eingegeben werden. Um ein Passwort in einem Script zu hinterlegen kann man auch folgenden Code verwenden. $Password = ConvertTo-SecureString Pass@word1 -AsPlainText -Force Nun kann man mit dem -Connection Parameter ganz einfach die Domain wechseln Get-QADUser -Identity User34 -Connection $connDest Get-QADUser -Identity User34 -Connection $connIcewolf Grüsse Andres...

posted @ Thursday, April 25, 2013 10:26 PM | Feedback (0) | Filed Under [ Powershell ]

Using Lync 2010 SDK with Powershell

Hallo zusammen, Ich habe ein bisschen mit Powershell und dem Lync 2010 SDK herumgespielt. Damit kann man den Lync Client quasi fernsteuern. Das SDK benötigt aber einen gestarteten Lync Client. Eine übersicht über die verschiedenen Lync API's gibt der folgende Link http://www.codelync.com/an-overview-of-the-lync-apis/ Lync 2010 SDK Documentation http://msdn.microsoft.com/en-us/library/lync/gg421054(v=office.14).aspx Lync 2010 SDK http://www.microsoft.com/en-us/download/details.aspx?id=18898 #Importing SDK Dll [string]$LyncModelDll = "C:\Program Files (x86)\Microsoft Lync\SDK\Assemblies\Desktop\Microsoft.Lync.Model.dll" Import-Module -Name $LyncModelDll #Get Lync Client State $objLyncClient = [Microsoft.Lync.Model.LyncClient]::GetClient() Write-Host = "State: " $objLyncClient.State # Sign Lync in to Lync Server 2010, if Lync is not already signed in to the server. if...

posted @ Sunday, February 24, 2013 9:12 PM | Feedback (0) | Filed Under [ Powershell UM/Mobile ]

Free Disk Space with WMI

Hallo zusammen, Kürzlich musste ich eine Abfrage des freien Speicherplatzes machen. Da bietet sich natürlich Windows Management Instrumentation (WMI) an. Das kann man entweder per VBS oder per Powershell machen. Ich habe mal für beide Arten ein Beispiel erstellt. VBS Code strComputer = "." Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk WHERE DriveType=3") For Each objDisk in colDisks  result = result & "SystemName: " & objDisk.SystemName & vbcrlf  result = result & "DeviceID: " & objDisk.DeviceID & vbcrlf  result = result & "VolumeName: " & objDisk.VolumeName & vbcrlf  result = result & "Size: " & FormatNumber((objDisk.Size/1024/1024/1024),2) & vbcrlf  result = result...

posted @ Sunday, February 17, 2013 10:28 AM | Feedback (0) | Filed Under [ Windows Powershell ]

Manage ActiveSync Devices

Hallo Zusammen, Beim Risk and Health Assessment Program for Exchange Server  (ExRAP) wurde bemängelt, dass ich auf der ActiveSync Mailbox Policy die Option "Allow Non Provisionable Devices" aktiviert habe. Als Solution habe ich nun eine zweite ActiveSync Mailbox Policy erstellt, welche diese Option aktiv hat, in der Default Policy ist die Option jedoch deaktiviert. Es wäre auch möglich die ActiveSync Device Access Rules anzuwenden. Aber zuerst mal zu den Basics... Ich kann mir die Active Sync Devices welche eine Partnerschaft mit einer Mailbox haben, mit folgendem Befehl anzeigen lassen. Get-ActiveSyncDevice -Mailbox a.bohren | fl deviceOS, deviceType, DeviceModel,FriendlyName Auf dem Konto sind mehrere ActiveSync Devices, ich lasse mir mal alle Details...

posted @ Friday, January 11, 2013 10:30 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

Mark Updates on WSUS as optional with Powershell

Hallo zusammen Der eine oder andere hat wohl das Windows Management Framework 3.0 auf dem WSUS freigegeben. Leider erst ein paar Tage später macht das Exchange Team Blog darauf aufmerksam, dass dies unter Exchange 2007 / 2010 noch nicht unterstützt ist. Per zufall bin ich über den folgenden Artikel gestolpert, hier wird gezeigt, wie man auch in WSUS Updates als optional kennzeichnen kann: http://blogs.technet.com/b/rmilne/archive/2012/12/18/exchange-2010-powershell-3-0-and-wsus.aspx # Load up the required .NET assembly [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") #  Connect to the local WSUS instance $Wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer() #$Wsus.SearchUpdates('Windows Management Framework 3.0 for Windows Server 2008 R2 for x64-based Systems (KB2506143)') $Update = $wsus.SearchUpdates('Windows Management Framework 3.0 for Windows Server 2008...

posted @ Tuesday, December 18, 2012 8:52 PM | Feedback (0) | Filed Under [ Windows Powershell ]

Powershell and SQL commands / SQL transactions

Hallo zusammen, Ich habe mal ein bisschen mit SQL und Powershell rumgespielt. Man sieht im SQL Management Studio, dass es nur eine Zeile gibt. ############################################################################### # SQL Query's with Powershell ############################################################################### #Setup SQL Connection $SqlConnection = New-Object System.Data.SqlClient.SqlConnection #$SqlConnection.ConnectionString = "Data Source=ICESRV02;database=db_test;Uid=myusername;Pwd=mypassword" #Use this Windows Authentication $SqlConnection.ConnectionString = "Data Source=ICESRV02;database=db_test;Integrated Security=SSPI;"   $SqlConnection.Open()   #SQL SELECT $qSQL = "SELECT fID, fVorname, fNachname FROM tUsers" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = $qSQL $SqlCmd.Connection = $SqlConnection $SQLReader = $SqlCmd.ExecuteReader() while ($sqlReader.Read()) { $Count = $sqlReader["SearchForPST"] } $SQLReader.close() #SQL INSERT $qSQL = "INSERT INTO tUsers (fVorname, fNachname) VALUES ('Hans', 'Muster')" $SqlCmd.CommandText = $qSQL $Result = $SqlCmd.ExecuteNonQuery() Write-Host "Result INSERT: " $Result #SQL UPDATE $qSQL = "UPDATE tUsers SET fVorname = 'Fritz', fNachname = 'Meier' WHERE fNachname = 'Muster'" $SqlCmd.CommandText = $qSQL $Result = $SqlCmd.ExecuteNonQuery() Write-Host "Result...

posted @ Thursday, November 29, 2012 11:05 PM | Feedback (0) | Filed Under [ Powershell ]

Powershell Output truncation

Hallo zusammen, Bei verschiedenen Powershell cmdlets wird der Output nach einer bestimmten Anzahl Elemente abgeschnitten. Get-QADUser -Identity w.tell | fl memberof Dies kann umgangen werden indem man den Parameter "ExpandProperty" verwendet. Get-QADUser -Identity w.tell | select -ExpandProperty Memberof Oder man passt die Variable $FormatEnumerationLimit an. Durch setzen von $FormatEnumerationLimit = -1 wird das EnumerationLimit auf unlimited gesetzt. $FormatEnumerationLimit $FormatEnumerationLimit = -1 Get-QADUser -Identity w.tell | fl memberof Danke an Roger Buchser für den Hinweis! Grüsse Andres Bohren

posted @ Tuesday, November 27, 2012 11:04 PM | Feedback (1) | Filed Under [ Powershell ]

Powershell Basics

Hallo zusammen, Damit ich mir nicht immer die verschiedensten Powershell Grundbefehle zusammensuchen muss, habe ich mir diese jetzt mal in einem Blogpost zusammengefasst. /*Integrierte Hilfe*/ Get-Help Get-Help Get-Date Get-Help * /*Liste aller verfügbaren cmdlets*/ Get-command /*Powershell Version*/ get-host | select version /*Execution Policy*/ Get-Help about_signing Get-ExecutionPolicy Set-ExecutionPolicy Unrestricted | RemoteSigned | AllSigned | Restricted | Default | Bypass | Undefined Set-ExecutionPolicy RemoteSigned   Policy Wert Beschreibung ...

posted @ Sunday, October 14, 2012 12:40 PM | Feedback (3) | Filed Under [ Powershell ]

Powershell Remoting with Lync

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

posted @ Tuesday, September 11, 2012 11:14 PM | Feedback (0) | Filed Under [ Powershell UM/Mobile ]

Powershell Remoting with Exchange

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

posted @ Tuesday, September 11, 2012 11:06 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

Powershell FileOpenDialog

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 ############################################################################### Write-Host ("Select File") $Filename = Get-FileName ("%systemdrive%") #$Filename = Get-FileName ("C:\") Write-Host("Filename: " + $Filename) -foregroundcolor Green Grüsse Andres Bohren

posted @ Monday, September 10, 2012 11:36 PM | Feedback (0) | Filed Under [ Powershell ]

Powershell 3.0 Release Candidate (RC)

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

posted @ Thursday, August 30, 2012 12:00 AM | Feedback (0) | Filed Under [ Powershell ]

Script: Export Calendar Permissions

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) {  $Cal = Get-MailboxFolderStatistics -Identity $Mailbox.Email | Where {$_.Foldertype -eq "Calendar"} | select folderpath  $NormalizedFolder = $Cal.FolderPath.Replace("/","\")  $NormalizedIdentity = $Mailbox.Email + ":" + $NormalizedFolder  Write-Host $NormalizedIdentity -foregroundcolor Green  $sw.writeline($NormalizedIdentity)      $permissions = get-mailboxfolderpermission -identity $NormalizedIdentity | select foldername, User, AccessRights          Foreach ($permission in $permissions)  {        ...

posted @ Wednesday, August 29, 2012 9:50 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

Reset Active Directory User Password with Powershell

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 #Check if QAD Snapin is already loaded $Snapins = get-pssnapin if ($Snapins -match "Quest.ActiveRoles.ADManagement") { Write-Output $("Quest ActiveRoles PS Snapin already loaded") } else { Write-Output $("Loading Quest ActiveRoles PS Snapin") Add-PsSnapin Quest.ActiveRoles.ADManagement } $Password = "MyPass" $csv = Import-Csv D:\scripts\password.csv foreach ($Item in $CSV) { $pw =...

posted @ Tuesday, August 14, 2012 9:28 PM | Feedback (1) | Filed Under [ Powershell ]

EWS Managed API Demo: SearchFilterCollection

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.FindItems([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MySearchFilterCollection,$View) Und so sieht dann das ganze Script aus - kann ebenfalls heruntergeladen werden. ############################################################################### # EWS SearchfilterCollection in Inbox # EWS Managed API DEMO # Version 1.0 / 15.07.2012 # Andres Bohren / www.icewolf.ch / blog.icewolf.ch / info@icewolf.ch ############################################################################### ############################################################################### # Function WriteLog ############################################################################### Function WriteLog {  PARAM (  [string]$pLogtext  )       $pDate...

posted @ Sunday, July 15, 2012 5:32 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

EWS Managed API Demo: Searchfilter

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.FindItems([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MySearchFilter,$View) Also mal schnell so ein Script basteln - kann auch heruntergeladen werden. ############################################################################### # EWS Searchfilter in Inbox # EWS Managed API DEMO # Version 1.0 / 15.07.2012 # Andres Bohren / www.icewolf.ch / blog.icewolf.ch / info@icewolf.ch ############################################################################### ############################################################################### # Function WriteLog ############################################################################### Function...

posted @ Sunday, July 15, 2012 5:11 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

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

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 Delete Items in RecycleBin older than xx Days # EWS Managed API DEMO # Version 1.0 / 15.07.2012 # Andres Bohren / www.icewolf.ch / blog.icewolf.ch / info@icewolf.ch ############################################################################### ############################################################################### # Function WriteLog ############################################################################### Function WriteLog...

posted @ Sunday, July 15, 2012 4:10 PM | Feedback (1) | Filed Under [ Exchange Powershell ]

EWS Managed API Demo: Impersonation

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 New-ManagementRoleAssignment –Name:EWServiceImpersonation –Role:ApplicationImpersonation –User:ewservice Welche Accounts denn für ApplicationIpersonation berechtigt sind, kann man mit folgendem Befehl abfragen Get-ManagementRoleAssignment -Role ApplicationImpersonation Aber man kann es auch einfacher per ECP machen So sieht die Ordnerstruktur des Benutzers "boa" in...

posted @ Sunday, July 15, 2012 1:20 PM | Feedback (1) | Filed Under [ Exchange Powershell ]

Get All Mailbox Permissions with Powershell

Hallo zusammen, Ich habe mir ein Powershell Script gebaut, welches die wichtigsten Mailboxpermissions ausliest und darstellt. Hier das Script - falls etwas mit dem Copy Paste nicht funktioniert kann es hier heruntergeladen werden. ################################################################################ # Show Mailbox and MAPI Permissions of specified Mailbox in Exchange 2010 # Version 1.0 / 07.03.2012 Andres Bohren - Intitial Version ################################################################################ #/*MBX Permission*/ [string]$Email = "boa@icewolf.ch" [string]$Mailbox = Get-Mailbox -Identity $Email [string]$sam = $Mailbox.SamAccountName Write-Host "*******************************************************************************" -foregroundcolor magenta Write-Host "* Get Mailbox Permission for $Email" -foregroundcolor magenta Write-Host "*******************************************************************************" -foregroundcolor magenta #/*Full Access*/ $FullAccess = Get-MailboxPermission -Identity $Email | where { ($_.AccessRights -eq "FullAccess") -and ($_.IsInherited -eq $false) -and -not ($_.User -like "NT AUTHORITY\SELF") } | Select User Write-Host "Full...

posted @ Wednesday, March 07, 2012 11:15 PM | Feedback (1) | Filed Under [ Exchange Powershell ]

Exchange Environment Report

Hallo zusammen, Ich habe nach einem Exchange Report gesucht, welcher mir folgende Daten liefert: Serverinformationen Anzahl Mailboxen pro Datenbank DB Whitespace Freier Disk Space Da habe ich was cooles gefunden - Steve Goodman hat ein super Powershell Script erstellt. Damit kann man sich die Reports auch bequem mailen lassen. http://www.stevieg.org/2011/06/exchange-environment-report/ Mit dem Parameter "-ScheduleAs:DOMAIN\user" wird auch gleich ein Sheduled Task angelegt. powershell -c "pushd C:\Install\EnvironmentReport; C:\Install\EnvironmentReport\Get-ExchangeEnvironmentReport.ps1 -HTMLReport c:\report.html -SendMail:$true -MailFrom:admin@icewolf.ch -MailTo:a.bohren@icewolf.ch -MailServer:172.21.175.11" Grüsse Andres Bohren

posted @ Tuesday, September 27, 2011 9:41 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

Powershell pipe output to Clipboard

Hallo zusammen. Ich bin kürzlich über eine coole Powershell funktion gestolpert. Mit | clip kann der output direkt in die Zwischenablage (clipboard) gepiped werden. Das erstpart mühsames markieren und kopieren. clip /? Get-Service | clip Nun ist der Output von Get-Service in der Zwischenablage. Toll oder? Grüsse Andres Bohren

posted @ Sunday, July 31, 2011 1:54 PM | Feedback (2) | Filed Under [ Powershell ]

Tail with Powershell

Hallo zusammen, Wer kennt das nicht, ein Logfile wird von einem Programm geschrieben. Dauernd den Texteditor zu öffnen und wieder zu schliessen, nur um zu sehen ob eine neue Zeile geschrieben wurde, das kann es auf die Dauer nicht sein. Unix Unter Unix gibt es den Tail Befehl. http://de.wikipedia.org/wiki/Tail_(Unix) tail -f [Pfad / Dateiname] Powershell Das ganze geht aber auch mit Powershell Get-Content [Pfad / Dateinahme] -Wait Baretail Oder man greift gleich zu einer Freeware wie Baretail, bei welcher auch gleich ein Syntax Highlighting möglich ist. http://www.baremetalsoft.com/baretail/ Grüsse Andres Bohren

posted @ Wednesday, June 22, 2011 7:14 PM | Feedback (0) | Filed Under [ Powershell Linux ]

How to document your Powershell Scripts

Hallo zusammen, Fügt man einem Powershell Script den PARAM Bloch hinzu, so kann man die Parameter mit den Tabs auswählen und mit help [scriptfile.ps1] wird die Synthax ausgegeben. PARAM (  [string]$Domain = "test.com",  [string]$Email = "@test.com" ) Fügt man noch die folgenden Zeilen hinzu, so hat man eine vollständige Online Dokumentation. <# .SYNOPSIS      A summary of what this script does      Appears in all basic, -detailed, -full, -examples  .DESCRIPTION      A more in depth description of the script      Should give script developer more things to talk about           Becomes: "DETAILED DESCRIPTION"      Appears in basic, -full and -detailed  .NOTES      Additional Notes, eg      File Name ...

posted @ Thursday, June 16, 2011 12:04 AM | Feedback (0) | Filed Under [ Powershell ]

Pharse XML Files with Powershell and show results in a chart

Hallo zusammen, Habe mir aufgrund des Eurotiefstands mal ein Powershell zur Anzeige des Eurokurses geschrieben. Den Eurokurs gibts als XML zum Pharsen hier: http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml Schon cool, wie einfach es ist XML Files mit Powershell zu pharsen. $xml = New-Object xml $xml.Load('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml') $xml.Envelope.Cube.Cube $xml.Envelope.Cube.Cube Das ganze kann in ein Array ($allrates) gepackt werden und dann ausgewertet werden $xml = New-Object xml $xml.Load('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml') $allrates = @{} $xml.Envelope.Cube.Cube.Cube | ForEach {  $currency = $_.currency;  $rate = $_.rate;  $allrates.$currency = $rate } $datum = $xml.Envelope.Cube.Cube.time Write-Host "Datum:" $datum write-Host "All exchange rates:" $allrates write-Host "Specific exchange rate CHF:" $allrates["CHF"] Oder man lädt sich die Microsoft Chart Controls for Microsoft .NET Framework 3.5 herunter und lässt die Wechselkurse in einem Chart darstellen. # load the appropriate...

posted @ Friday, May 27, 2011 11:34 PM | Feedback (1) | Filed Under [ Powershell ]

Remove sIDHistory

Hallo zusammen, Die sIDHistory wird ja in Migrationsszenarien verwendet um mit dem neuen Benutzer auf Ressourcen in der alten Domain zugreifen zu können. Versucht man das Attribut sIDHistory im AD zu ändern... ...erhält man ein "Access denied" Dies ist auch in ADSI Edit so. Fazit: Das Attribut sIDHistory lässt sich weder in "ADSI Edit" noch in "Active Directory Users and Computers" bearbeiten. Und das, obwohl der Account Miglied von "Schema Admins, Enterprise Admins, Domain Admins" ist, wie der folgende Befehl zeigt: gpresult /r Wie man aber das sIDHistory Attribut nach der Migration wieder loswird, wird mit den folgenden Powershell befehlen gezeigt. Add-PSSnapin quest.activeroles.admanagement Get-QADUser -Identity "test01" -IncludeAllProperties | fl *sid* Get-QADUser...

posted @ Wednesday, May 25, 2011 12:01 PM | Feedback (0) | Filed Under [ Windows Powershell ]

Log your commands in Powershell with start-transcript

Hallo zusammen, Die Tips in der Exchange Management Shell sind doch immer wieder spannend. Der Tip Nummer 47 fand ich besonders spannend. get-tip 47 Das Start-Transcript ist auch auf der Technet Library dokumentiert. http://technet.microsoft.com/en-us/library/dd347721.aspx start-transcript [Filename] -append do your work stop-transcript Und so sieht das Transcript File dann aus. Grüsse Andres Bohren

posted @ Friday, May 13, 2011 10:45 PM | Feedback (0) | Filed Under [ Powershell ]

Search Active Directory with Powershell

Hallo zusammen Wie einfach es ist mit Powershell die AD zu durchsuchen habe ich in dem folgenden kleinen Script dokumentiert. $SearchVal = "a.bohren" $resolve = "(|(sAMAccountName=$SearchVal)(cn=$SearchVal)(displayName=$SearchVal)(givenName=$SearchVal)(employeeID=$SearchVal))" $filter = "(&(objectCategory=Person)(objectClass=User)$resolve)"     $searcher = New-Object System.DirectoryServices.DirectorySearcher $filter $searcher.PageSize = 1000 $searcher.SearchScope = "Subtree" $userlist = $searcher.FindAll() write-host "Found: " $userlist.count $userlist Grüsse Andres Bohren

posted @ Thursday, April 07, 2011 10:16 PM | Feedback (0) | Filed Under [ Powershell ]

Exchange Web Services Managed API 1.1 How To

Hallo zusammen Ich habe mir mal die Exchange Webservices Managed API 1.1 angeschaut MSDN Exchange Web Services Managed API 1.1 Exchange Web Services Managed API 1.1 Download Installation der Web Services Managed API Programmieren mit VB 2008 Express Beim Programmieren mit Visual Basic 2008 Express / Visual Basic 2010 Express muss eine Referenz zu der Web Services Managed API DLL hinzugefügt werden. Auf Durchsuchen klicken und die DLL (Microsoft.Exchange.WebServices.dll) auswählen. In den Projekteigenschaften sieht das dann anschliessend so aus. Ich habe mir ein kleines Tool gebastelt und einige Eingenschaften über die EWS Managed API abgefragt. Imports Microsoft.Exchange.WebServices.Data Imports Microsoft.Exchange.WebServices '# Connect to EWS Managed...

posted @ Monday, January 03, 2011 11:28 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

Export AD User and Title to CSV

Hallo zusammen Weil die Titel der Mitarbeiter überprüft werden sollen musste ich heute einen Export der Active Directory User mit den Titeln machen. Das geht mit Quest ActiveRoles Management Shell for Active Directory wirklich locker von der Hand. Add-PSSnapin quest.activeroles.admanagement $cred=Get-Credential Connect-QADService ‘server.domain.tld:389’ –credential $cred Get-QADUser | select-object sn, givenName, title | export-csv C:\ad-name-title.csv -encoding "unicode" Grüsse Andres Bohren

posted @ Monday, January 03, 2011 3:58 PM | Feedback (0) | Filed Under [ Powershell ]

Create Active Directory OU's with Powershell

Hallo zusammen, Mich hat interessiert wie man mit Powershell AD OU's erstellen kann. Wie immer führen mehrere Wege zum Ziel. Powershell #****************************************************************************** # Create a Set of AD OU's with Powershell #****************************************************************************** $NewOU = Read-Host "Enter New Organizational Unit (OU) Name" $MainOU = [ADSI] "LDAP://OU=units,dc=ads,dc=int" $ou = $MainOU.Create("OrganizationalUnit", "ou="+$NewOU) $ou.SetInfo() $UsersOU = [ADSI]($ou.psbase.path) $newOU = $UsersOU.Create("OrganizationalUnit","ou=Users") $newOU.SetInfo() $ComputersOU = [ADSI]($ou.psbase.path) $newOU = $ComputersOU.Create("OrganizationalUnit","ou=Computers") $newOU.SetInfo() $GroupsOU = [ADSI]($ou.psbase.path) $newOU = $GroupsOU.Create("OrganizationalUnit","ou=Groups") $newOU.SetInfo() Powersehell und AD Module #****************************************************************************** # Create a Set of AD OU's with Powershell and AD Module # http://blog.icewolf.ch/archive/2010/10/18/AD-Module-for-Powershell.aspx #****************************************************************************** Import-Module ActiveDirectory $NewOU = Read-Host "Enter New Organizational Unit (OU) Name" $BaseOU = Get-ADOrganizationalUnit "OU=units,DC=ads,DC=int" New-ADOrganizationalUnit -name $NewOU -path $BaseOU $MainOUstr = "OU=" + $NewOU + "," + $BaseOU $MainOU = Get-ADOrganizationalUnit $MainOUstr New-ADOrganizationalUnit -name "Users" -path $MainOU New-ADOrganizationalUnit...

posted @ Friday, December 03, 2010 8:39 AM | Feedback (0) | Filed Under [ Windows Powershell ]

Quest ActiveRoles Management Shell for Active Directory

Hallo zusammen, "Quest ActiveRoles Management Shell for Active Directory" ist ein Powershell Snapin welches von Quest als Freeware angeboten wird. Herunterladen kann man diese hier: http://www.quest.com/powershell/activeroles-server.aspx Installation Anwendung Um das Powershell Snapin zu laden wird folgender befehl benötigt Add-PSSnapin quest.activeroles.admanagement Die Active Directory User können  so angezeigt werden Get-QADUser Bei einem User setzen wir das "extensionAttribute1 "auf "abc" Abfragen kann man die user mit bestimmten extensionAttributen oder ob ein extensionAttribut einen Wert hat. Get-QADUser -IncludedProperties extensionAttribute1 | Where {$_.extensionAttribute1 -eq "abc"} Get-QADUser -IncludedProperties extensionAttribute1 | Where {$_.extensionAttribute1 -ne $NULL} Und so können die extensionAttribute gesetzt werden: Get-QADUser -Identity test01 | Set-QADUser -ObjectAttributes @{extensionattribute1="BCD"} Get-QADUser -Identity test01 | Set-QADUser -ObjectAttributes @{extensionattribute1=$NULL} Und mit dem untenstehenden Befehl...

posted @ Thursday, December 02, 2010 10:16 PM | Feedback (1) | Filed Under [ Windows Powershell ]

AD Module for Powershell

Hallo zusammen, Beim Surfen bin ich über das Active Directory Powershell Blog gestolpert. Das wollte ich auch mal ausprobieren. Hier nun die Anleitung: Man benötigt die Remote Server Administration Tools (RSAT) von Windows 7. Nach der Installation der RSAT muss man in den Windows Features die "Active Directory Module für Windows Powershell" aktivieren. Das ganze funktioniert aber erst mit einem Domain Controller ab Windows 2008 R2 weil erst dort die Active Directory Webservices verfügbar sind. Entweder über das Startmenü ausführen. Oder die Powershell starten und das Modul laden. Import-Module ActiveDirectory Auch wenn es da viele Filter gibt [Active Directory Powershell – Advanced Filter (Part – II)] hat mich...

posted @ Monday, October 18, 2010 12:17 AM | Feedback (0) | Filed Under [ Windows Powershell ]

Powershell List AD Group Members

Hallo zusammen Kürzlich habe ich Code für eine ASP.Net Website gepostet, welche die Gruppenmitgliedschaft eines "Windows Authenticated" Users auflistet. http://blog.icewolf.ch/archive/2010/09/02/asp.net-get-group-membership-from-windows-authenticated-user.aspx Heute zeige ich euch wie man in Powershell die Gruppenmitglieder einer Gruppe mit Powershell auflisten lassen kann. Dies geschieht über die Dotnet Klasse System.DirectoryServices.AccountManagement. Ich habe eine Gruppe "L-Test" mit zwei Mitgliedern. Der Unstenstehende Powershell Code listed die Mitglieder nun auf. Add-Type -AssemblyName  System.DirectoryServices.AccountManagement $ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain $group = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($ct,'L-Test') $group.GetMembers($true) Grüsse Andres Bohren

posted @ Wednesday, September 22, 2010 9:29 PM | Feedback (0) | Filed Under [ Powershell ]

Managed Service Accounts in Windows 2008 R2

Hallo zusammen, Ich habe mir die Managed Service Accounts in Windows 2008 R2 mal ein bisschen näher angeschaut. Auf dieser Technet Website gibt es eine Step-By-Step Anleitung: http://technet.microsoft.com/en-us/library/dd548356(WS.10).aspx import-Module ActiveDirectory New-ADServiceAccount -SamAccountName MyService -Name MyService Remove-ADServiceAccount -Identity MyService Install-ADServiceAccount -Identity MyService Remove-ADServiceAccount -Identity MyService Beim Install-ADServiceAccount kommt es zu einem Fehler. Ursache ist hier, dass der AccountName länger als 15 Zeichen ist. Davon steht aber leider nirgends etwas. So sieht das dann in der AD Management Console aus. Die Accounts sind unter "Managed Service Accounts" abgelegt. Also machen wir doch mal den Test und legen den neuen Managed Service Account für einen Service fest. Entweder direkt im Feld...

posted @ Tuesday, August 03, 2010 12:15 AM | Feedback (0) | Filed Under [ Windows Powershell ]

AD Replikation mit Powershell überwachen

Hallo zusammen, Ich habe mir kürzlich ein Powershell Script geschrieben, welches mir einmal Täglich die Replikation prüft und das Ergebnis per Mail sendet. Eigentlich macht das Script nichts anderes, als den untenstehenden Befehl aufzurufen und das Resultat in eine TXT Datei zu schreiben und diese dann per Email zu versenden. repadmin /replsummary Und hier das Script (oder hier als Download) ################################################################################ # Monitor Replmon # Runs "repadmin /replsummary" and sends the Output per Mail as Attachement # # (c) 2010 Andres Bohren ################################################################################ #Definitions $Outfile = "c:\scripts\replmon\replmon.txt" $SmtpServer = "smtpservername" $From = "absender@example.com" $To = "empfaenger@example.com" $Subject = "REPLMON Script" $Message = "Attached you find the Replsummary" #Delete Old Replmon File write-Host ("Delete File: "...

posted @ Monday, June 14, 2010 10:07 PM | Feedback (3) | Filed Under [ Powershell ]

Mailbox Provisioning from CSV File

Hallo zusammen, Heute zeige ich euch mal, wie man User und Mailboxen aus einem CSV File anlegt. Als erstes machen wir ein CSV (Comma Separated Value) File und speichern es unter C:\mitarbeiter.csv ab Name,FirstName,LastName,UPN,OU Albert Einstein,Albert,Einstein,a.einstein@foo.com,TestOU Niels Bohr,Niels,Bohr,n.bohr@foo.com,TestOU So sieht das Script aus: $Pwd = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force $csv = Import-Csv c:\mitarbeiter.csv $csv | ForEach-Object{New-Mailbox -Name $_."Name" -FirstName $_."FirstName" -Lastname $_."LastName" -UserPrincipalName $_."UPN" -OrganizationalUnit $_."OU" -Password $Pwd} Und nun lassen wir das ganze mal laufen... Grüsse Andres Bohren

posted @ Monday, May 10, 2010 11:10 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

How to get Exchange Version by Powershell

Hallo zusammen, Wie finde ich denn raus was für eine Exchange Version dass ich installiert habe? Gerade nach einem Update? Gemäs dem Exchange Team Blog ist das das verlässlichste Mittel nicht die AdminDisplayVersion sondern die Version von ExSetup.Exe aus dem \Exchange\bin Ordner.  Get-ExchangeServer | fl Name,AdminDisplayVersion Ich habe deshalb mal schnell ein Powershell Script geschrieben, welches die Version von Exchange 2007/2010 erkennen kann. ############################################################################### # Get Exchange Product Version # # Andres Bohren / www.icewolf.ch / blog.icewolf.ch ############################################################################### #$key = Get-Item HKLM:\Software\Microsoft\Exchange\Setup\ #$key = Get-Item HKLM:\Software\Microsoft\ExchangeServer\v14\Setup\ #Check Registry Keys If (test-path HKLM:\Software\Microsoft\ExchangeServer\v14\Setup\)     {         $key = Get-Item HKLM:\Software\Microsoft\ExchangeServer\v14\Setup\     } else     {         If (test-path HKLM:\Software\Microsoft\Exchange\Setup\)             {                 $key = Get-Item HKLM:\Software\Microsoft\Exchange\Setup\             }        Else        {        Write-Host ("Exchange Path not found")        }     } #Get...

posted @ Saturday, March 20, 2010 1:05 AM | Feedback (2) | Filed Under [ Exchange Powershell ]

Scripts for Forefront Management Shell

Hallo zusammen, Ich habe da ein paar Scripts für die Forefront Management Shell erstellt. Wenn man eine ganz normale Powershell geladen hat, muss mann zuerst die Snap-ins für Forefront laden. Das geschieht mit dem folgenden Befehl: Add-PsSnapin FSSPSSnapin Anschliessend habe ich das Get-FseSpamReport CMDlet ausgeführt mit den Parametern -Starttime und -Endtime. Get-FseSpamReport -Starttime "01.02.2010 00:00" -Endtime "28.02.2010 00:00" War ein bisschen viel für meinen Geschmack - ich lasse mir also nur noch das anzeigen, was ich möchte. Get-FseSpamReport -Starttime "01.02.2010 00:00" -Endtime "28.02.2010 00:00" | fl ConnectionFilterMessagesReceived,ConnectionFilterMessagesBlocked,SmtpRecipientFilterMessagesBlocked,ContentFilterRejected,MessagesMarkedSclNegative1 Nun wäre, es ja noch cool, wenn ich das Datum nicht mehr selbst setzen müsste, sonder ein Script anstossen könnte, welche die Start-...

posted @ Friday, March 12, 2010 10:02 PM | Feedback (0) | Filed Under [ Powershell ]

Powershell ScriptSigning

Hallo zusammen, Wie kann man die Sicherheit von Scripts im Unternehmen erhöhen? Klar mit CodeSigning! Die Scripts werden signiert und der Interpreter kann die Signatur prüfen. Dazu habe ich mir mal ein CodeSigning Zertifikat ausgestellt. Ich habe da mal ein einfaches Powershell Script vorbereitet. Beim Versuch das Script auszuführen kommt eine Fehlermeldung. In der Standarteinstellung kann Powershell keine Scripts ausführen - dies muss explizit erlaubt werden. Eine Powershel als Admin starten und den folgenden Befehl eingeben: Set-ExecutionPolicy unrestricted Damit dürfen nun alle Scripts ausgeführt werden. So, nun klappt es also mit dem Powershell Script. Nun wird das Script mit dem CodeSigning Zertifikat signiert: Set-AuthenticodeSignature d:\temp\helloworld.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0] So sieht...

posted @ Thursday, November 12, 2009 9:12 PM | Feedback (0) | Filed Under [ Security Windows Powershell ]

Exchange 2007 SP1 OWA "Sie sind nicht berechtigt, diese Aktion durchzuführen"

Hallo zusammen, Heute wollte ich mich mal wieder an OWA anmelden, und habe die folgende Fehlermeldung erhalten: "Sie sind nicht berechtigt, diese Aktion durchzuführen" Ist vermutlich seit dem Letzten Update Rollup (Update Rollup 7 für Exchange Server 2007 SP1) Also mal geschaut was denn so auf der Mailbox definiert ist: Get-CASMailbox -Identity a.bohren | Format-List Siehe da, alle Properties welche mit OWA* anfangen sind nicht gesetzt... Okay, dann mal setzen der Properties: set-casmailbox -identity "corp\a.bohren" -OWAChangePasswordEnabled:$true -OWAPremiumClientEnabled:$false -OWACalendarEnabled:$true -OWAContactsEnabled:$true -OWATasksEnabled:$true -OWAJournalEnabled:$true -OWANotesEnabled:$true -OWARemindersAndNotificationsEnabled:$true -OWASpellCheckerEnabled:$true -OWASearchFoldersEnabled:$true -OWASignaturesEnabled:$true -OWAThemeSelectionEnabled:$true -OWAJunkEmailEnabled:$true -OWAUMIntegrationEnabled:$true -OWAWSSAccessOnPublicComputersEnabled:$true -OWAWSSAccessOnPrivateComputersEnabled:$true -OWAUNCAccessOnPublicComputersEnabled:$true -OWAUNCAccessOnPrivateComputersEnabled:$true -OWAActiveSyncIntegrationEnabled:$true -OWAAllAddressListsEnabled:$true So und nochmals abfragen: Get-CASMailbox -Identity a.bohren | Format-List Sieht doch schon viel besser aus...

posted @ Friday, May 01, 2009 5:35 PM | Feedback (0) | Filed Under [ Exchange Powershell ]

Windows 2008 R2

Hallo zusammen, Die Beta von Windows Server 2008 R2 ist verfügbar. Microsoft hat auch schon eine Website mit Informationen dazu aufgeschaltet: http://www.microsoft.com/windowsserver2008/en/us/R2-resources.aspx Wird es nur noch in 64 Bit geben Unterstützt bis zu 256 CPUs Power Shell 2.0 - geht nun auch im Server Core   mehr als 85 Powershell cmdlets fürs AD Management Papierkorb fürs AD Kann einzelne CPUs in Sleep Mode setzen um Strom zu sparen Hyper-V unsterstütz LiveMigration (wie VMotion unter ESX) ...

posted @ Monday, January 12, 2009 9:30 PM | Feedback (0) | Filed Under [ Web Windows Powershell Network ]

Powershell - SQL DB

Hallo zusammen, Ich habe kürzlich die Benachrichtigung über Geburtstage auf meiner Website auf Powershell umgestellt. Dabei musste ich mit Powershell auf die MS SQL 2005 Datenbank zugreifen. Hier ein kleines Script welches genau das demonstriert. ############################################################################################# # GetMovies ############################################################################################# Function GetMovies {  # Setup SQL Connection  $SqlConnection = New-Object System.Data.SqlClient.SqlConnection  $SqlConnection.ConnectionString = "Data Source=ICESRV02;database=db_home_icewolf;Uid=myusername;Pwd=mypassword"    #SQL String  $qSQL = "SELECT TOP 10 [fID], [fTitle], [fKategorie],[fBewertung],[fDatum],[fURL] FROM tMovies ORDER BY [fDatum] DESC"    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand  $SqlCmd.CommandText = $qSQL  $SqlCmd.Connection = $SqlConnection    # Setup .NET SQLAdapter to execute and fill .NET Dataset  $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter  $SqlAdapter.SelectCommand = $SqlCmd  $DataSet = New-Object System.Data.DataSet    #Execute and Get Row Count  $nRecs = $SqlAdapter.Fill($DataSet)    $Anzahl = $nRecs.ToString()    Write-Host ($anzahl + " Records retrieved.") -foregroundcolor Cyan  $SqlConnection.Close();    if ($nRecs...

posted @ Saturday, March 01, 2008 1:10 PM | Feedback (0) | Filed Under [ Powershell ]

Powershell - Send Email

Um ein Email mit Powershell zu versenden benötigt man nur einige wenige Zeilen Code: $SmtpServer = "localhost" $From = "someone@here.com" $To = "someone@internet.com" $Subject = "Greetings from MSH" $Body = "Hello, SomeOne `n Greetings from MSH" $Attachment = new-object Net.Mail.Attachment("C:\test.txt") $message = New-Object system.net.mail.mailmessage ($from,$to,$subject,$body) $message.attachments.add($attachment) $SmtpClient = new-object system.net.mail.smtpClient $SmtpClient.host = $SmtpServer $SmtpClient.Send($message)   That's it ;o)

posted @ Saturday, January 19, 2008 2:26 PM | Feedback (0) | Filed Under [ Powershell ]

Powered by:
Powered By Subtext Powered By ASP.NET