blog.icewolf.ch

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

My Links

Archives

Post Categories

icewolf

Powershell

Scripting - the new way
Fix PSRepository and PSGallery

Hallo zusammen, Kürzlich habe ich auf einem Windows Server 2012 R2 das Windows Management Framework 5.1 installiert https://blog.icewolf.ch/archive/2021/01/21/windows-management-framework-5-1-for-windows-server-2012r2.aspx Nicht zu vergessen sind die TLS 1.2 Einträge https://blog.icewolf.ch/archive/2020/12/03/admins-setzt-endlich-die-tls-1-2-eintrage-fur-dotnetpowershell.aspx Allerdings stimmt auf diesem Server etwas mit der PowerShell Gallery nicht. Wie man sieht ist kein Repository hinterlegt. Get-PackageProvider -ListAvailavle Get-PSRepository Es braucht also ein PowerShell Repository. Anscheinend geht das ab PowerShell 5.1 so Register-PSRepository -Default Nun wird das Repository angezeigt und ich mache die PSGallery gleich noch zu trusted Get-PSRepository Set-PSRepository -Name PSGallery -InstallationPolicy Trusted Schaut man sich das Modul PowerShellGet an, so ist das in der Version 1.0.0.1 installiert. Das muss noch aktualisiert werden, geht jedoch nur mit dem Force...

posted @ Thursday, May 20, 2021 9:49 PM | Filed Under [ Powershell ]

PowerShell blank screen when logon to M365

Hallo zusammen, Ich hatte kürzlich auf einem Server bei der Anmeldung bei AzureAD einen weissen Bildschirm (blank screen). Zuerst dachte ich, es hätte einen Zusammenhang mit der Deinstallation vom Internet Explorer https://blog.icewolf.ch/archive/2021/04/02/how-to-uninstall-internet-explorer-via-powershell.aspx Aber nachdem ich die Internet Security Settings auf den Standard zurückgesetzt hatte ging es dann. Falls nicht vielleicht auch noch die Internet Explorer "Enhanced Security Configuration (IE ESC)" prüfen. Dann klappt es auch wieder beim Anmelden Grüsse Andres Bohren

posted @ Thursday, May 20, 2021 9:24 PM | Filed Under [ Powershell ]

MicrosoftTeams PowerShell Module 2.3.1 - still problems with Certificate Based Authentication (CBA)

Hallo zusammen, Es gibt schon wieder eine neue Version vom MicrosoftTeams PowerShell Module. Anzeigen des aktuell installierten PowerShell Moduls Get-Module MicrosoftTeams -ListAvailable Aktuelles Modul in der PSGallery suchen Find-Module MicrosoftTeams Modul aus der PowerShell Gallery aktualisieren Update-Module MicrosoftTeams Wie man sieht, wird mit dem Update-Module Befehl einfach die neue Version installiert, ohne die alte Version zu entfernen. Aus meiner Sicht ist ein Uninstall-Module / Install-Module besser. Get-Module MicrosoftTeams -ListAvailable Lade ich das Modul, dann wird jedoch die neuste Version geladen. Import-Module MicrosoftTeams Get-Module Nun melde ich mich interaktiv mit einem Account an, welcher die Rollen "Teams Administrator" und "Skype for Business Administrator" hat. Connect-MicrosoftTeams Nun kann ich mit folgendem Befehl die Teams im Tenant abfragen Get-Team Oder...

posted @ Monday, May 10, 2021 9:57 PM | Filed Under [ Powershell Teams ]

Powershell v7.1.3 released

Hallo zusammen, Schon eine paar Wochen her, dass PowerShell 7.1.3 veröffentlicht wurde. Bin aber erst jetzt dazu gekommen, das zu bloggen. Hier habe ich zusätzlich zum default "Enable Powershell remoting" aktiviert Grüsse Andres Bohren

posted @ Sunday, April 4, 2021 8:54 AM | Filed Under [ Powershell ]

Send S/MIME Signed Mail with Powershell

Hallo zusammen, Vor etwa einem Monat habe ich mir ein neues Email Zertifikat gekauft um meine Emails Signiert versenden zu können. Das Zertifikat habe ich als PFX exportiert und mit einem Passwort versehen.   Ich habe mich gefragt, ob man S/MIME Signierte Emails nicht auch über PowerShell versenden könnte. Bin dann auf eine Implementierung von Rob Kalmer gestossen https://www.powershellgallery.com/packages/smtp.smime.lib/1.0.4/Content/smtp.smime.lib.ps1 Ich habe das ganze ein bisschen gekürzt und eigentlich nur einen Wrapper darum herum geschrieben, welcher es ermöglicht die Mails über ein Script mit allen Parametern zu versenden. Den Code dazu findet ihr auf meiner GitHub Seite https://github.com/BohrenAn/Send-SMIMESignedMail Uns so sieht das Mail dann...

posted @ Sunday, March 21, 2021 11:54 AM | Filed Under [ Powershell ]

Microsoft Teams v2 PowerShell Module

Hallo zusammen, Seit etwa zwei Wochen gibt es das Microsoft Teeams V2 PowerShell Modul https://www.powershellgallery.com/packages/MicrosoftTeams/2.0.0 Ich habe noch die Version 1.1.11 Installiert und prüfe, welche Version in der PowerShell Gallery vorhanden ist Get-Module MicrosoftTeams -ListAvailable Find-Module MicrosoftTeams -AllowPrerelease Mit folgenden Befehlen wird die alte Version deinstalliert und dann die neue Version installiert Uninstall-Module MicrosoftTeams Install-Module MicrosoftTeams -AllowPrerelease Get-Module MicrosoftTeams -ListAvailable Neu hat das Modul alle Skype for Business Befehle inkludiert Get-Command -Module MicrosoftTeams | measure Auch Teams Templates kann man sich anzeigen lassen. Leider kann man immer noch kein neues Team mit einem Template anlegen. Get-CsTeamTemplateList Get-CsTeamTemplate -OdataId /api/teamtemplates/v1.0/f84c3b9f-ec2b-4f40-ada6-9b750f85ba35/Tenant/de-DE Teams und Channels kann man sich wie bisher anzeigen lassen. Get-Team Get-Team -GroupId 1033969f-90bf-45bd-96c1-f7308b345ebe Get-TeamChannel -GroupId 1033969f-90bf-45bd-96c1-f7308b345ebe Move...

posted @ Thursday, March 18, 2021 9:19 PM | Filed Under [ Powershell Teams ]

Microsoft 365 Whiteboard Admin PowerShell Module

Hallo zusammen, Neu gibt es ein PowerShell Module für Microsoft 365 Whiteboard. Um das Module nach der Installation nutzen zu können muss man Mitglied der folgenden Rolle sein: SharePoint administrator Install and use the Microsoft Whiteboard cmdlets https://docs.microsoft.com/de-de/powershell/whiteboard/overview?view=whiteboard-ps Installation des Moduls Find-Module -Name WhiteboardAdmin Install-Module -Name WhiteboardAdmin Get-Command -Module WhiteboardAdmin Whiteboards eines Users anzeigen Get-Whiteboard -UserId <ObjectID> Mir ist dabei aufgefallen, dass bei allen Whiteboards die Titel fehlen. In den Folgenden Screenshots zeige ich euch, wie man den Titel eines Whiteboards setzt Nun sieht man auch den Titel des Whiteboards Grüsse Andres Bohren

posted @ Monday, March 8, 2021 10:43 PM | Filed Under [ Powershell O365 ]

ExchangeOnlineManagement 2.0.4 PowerShell Module now supported with PowerShell 7

Hallo zusammen, Ich habe gestern die PowerShell Version 7.1.2 installiert. Es wurde ja angekündigt, dass das ExchangeOnlineManagement (V2) PowerShell Modul irgendwann die PowerShell 7 unterstützen soll. Wie man sieht, ist der Versuch fehlgeschlagen. Für die Installation eines neuen Moduls muss die PowerShell als Administrator gestartet werden. Ich mache das immer so: cmd (als Administrator starten) Start PowerShell -NoProfile -NoLogo Abfragen des installierten Moduls Get-Module ExchangeOnlineManagement -ListAvailable Abfragen der PowerShell Gallery nach dem neusten Modul https://www.powershellgallery.com/packages/ExchangeOnlineManagement/2.0.4 Find-Module ExchangeOnlineManagement -AllowPrerelease Deinstallieren des alten PowerShell Moduls Uninstall-Module ExchangeOnlineManagement Installieren des aktuellsten Moduls Install-Module ExchangeOnlineManagement So nun versuchen wir das nochmals mit dem neuen PowerShell Modul Beim Login hat sich etwas geändert. Anstatt in einem Popup muss das...

posted @ Friday, February 19, 2021 1:44 PM | Filed Under [ Exchange Powershell ]

Powershell v7.1.2 released

Hallo zusammen, Es gibt eine neue Version von PowerShell 7 https://github.com/PowerShell/powershell/releases Grüsse Andres Bohren

posted @ Thursday, February 18, 2021 11:27 PM | Filed Under [ Powershell ]

Exchange Managed API and OAuth Authentication

Hallo zusammen, In der Vergangenheit habe ich einige Scrips für Exchange Web Services (EWS) geschrieben. Da die Deaktivierung von Basic Auth immer näher rückt (auch wenn das jetzt wieder ein bisschen zurückgestellt wurde), macht es Sinn, mich mit der OAuth Authentifizierung von EWS zu beschäftigen. Authenticate an EWS application by using OAuth https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an-ews-application-by-using-oauth In Azure AD habe ich eine Applikation erstellt, welche keine Rechte besitzt. Um die EWS Impersonation zu setzen, muss man das Manifest bearbeiten und zwar den Parameter "requiredResourceAccess" Es muss folgendes dort eingefügt werden "requiredResourceAccess": [  {  "resourceAppId": "00000002-0000-0ff1-ce00-000000000000",  "resourceAccess": [   {    "id": "dc890d15-9560-4a4c-9b7f-a736ec74ec40",    "type": "Role"   }   ]  } ], Das bewirkt, dass das "full_access_as_app" als Application Permission vergeben wird. Dann muss man noch den...

posted @ Saturday, February 6, 2021 11:01 AM | Filed Under [ Exchange Powershell O365 ]

Limit Microsoft Graph Access to specific Exchange Mailboxes

Hallo zusammen, Letztes Jahr habe ich einen Artikel geschrieben, wie man mit einer Application im AzureAD über die ClientID und einem ClientSecret via GraphAPI auf die Outlook Kalender zugreifen kann. Schaut man sich die Permissions an, so kann man mit diesem Account auf alle Kalender der Exchange Organisation zugreifen. Eine Art von "Application Impersonation" Recht für Kalender. Dieses unbeschränkte Recht lässt sich durch das Exchange Cmdlet "New-ApplicationAccessPolicy" einsch New-ApplicationAccessPolicy https://docs.microsoft.com/en-us/powershell/module/exchange/new-applicationaccesspolicy?view=exchange-ps Dazu wird eine Mailenabled Security Group benötigt. Für Exchange sollte es eine Universal Group vom Typ Security sein, welche Mail Enabled ist, also eine Emailadresse besitzt. Die Gruppe hat zwei Mitglieder a.bohren@icewolf.ch und postmaster@icewolf.ch Bisschen schade, dass eine...

posted @ Saturday, February 6, 2021 12:12 AM | Filed Under [ Exchange Powershell O365 ]

Improve Microsoft Documentation with GitHub (example New-CsOnlineAudioFile)

Hallo zusammen, Viele wissen gar nicht, dass man mithelfen kann die Microsoft Dokumentation unter https://docs.microsoft.com. Bei folgendem Beispiel  habe ich das gemacht: New-CsOnlineAudioFile https://docs.microsoft.com/en-us/powershell/module/skype/new-csonlineaudiofile?view=skype-ps Klickt man auf den Feedback for "This page" Knopf, kommt man auf GitHub und kann ein Issue eröffnen (benötigt ein kostenloses GitHub Konto). In diesem Fall habe ich mal nachgefragt, was denn der Unterschied zwischen New-CsOnlineAudioFile und Import-CsOnlineAudioFile. https://github.com/MicrosoftDocs/office-docs-powershell/issues/7196 Ich glaube ich habe es mittlerweile verstanden: New-CsOnlineAudioFile erstellt ein AudioFile Objekt, welches dann beim Import-CsOnlineAudioFile verwendet werden kann. #Create AudioFile Object $content = Get-Content "E:\Temp\CallQueueDemo02.mp3" -Encoding byte -ReadCount 0 $AudioFile = New-CsOnlineAudioFile -FileName "CallQueueDemo02.mp3" -Content $content $AudioFile Die Eigenschaften des $AudioFile Objekts kann man mit Get-Member anschauen $AudioFile | Get-Member Man...

posted @ Friday, February 5, 2021 11:38 PM | Filed Under [ Powershell Teams ]

Create Teams Auto Attendant and Call Queue with Powershell

Hallo zusammen, Vor zwei Wochen habe ich einen Blog Artikel über Teams Auto Attendnant und Call Queue geschrieben. Seither habe ich nebenbei daran gearbeitet, das ganze auch per PowerShell anzulegen. Ich bin ja ein grosser Fan von PowerShell und Automatisierung. Erstmal muss man sich mit dem Teams Modul mit Skype for Business Online verbinden ###################################################################### # Connect to SkypeForBusiness Online (Teams Module) ###################################################################### Import-Module MicrosoftTeams $sfbSession = New-CsOnlineSession -OverrideAdminDomain icewolfch.onmicrosoft.com Import-PSSession $sfbSession Resource Accounts Es müssen Resource Accounts für den Autoattendant und Call Queue angelegt ###################################################################### # Create Resource Account ###################################################################### #ApplicationID #Auto Attendant: ce933385-9390-45d1-9512-c8d228074e07 #Call Queue: 11cd3e2e-fccb-42ad-ad00-878b93575e07   New-CsOnlineApplicationInstance https://docs.microsoft.com/en-us/powershell/module/skype/new-csonlineapplicationinstance?view=skype-ps   New-CsOnlineApplicationInstance -UserPrincipalName CallQueueDemo02@icewolf.ch -DisplayName "CallQueueDemo02" -ApplicationId "11cd3e2e-fccb-42ad-ad00-878b93575e07"   New-CsOnlineApplicationInstance -UserPrincipalName AutoattendantDemo02@icewolf.ch -DisplayName "AutoattendantDemo02@icewolf.ch" -ApplicationId "ce933385-9390-45d1-9512-c8d228074e07" Um den Resource Accounts...

posted @ Saturday, January 30, 2021 10:38 AM | Filed Under [ Powershell Teams ]

Request Let's Encrypt Certificate with PowerShell

Hallo zusammen, In diesem Blog Artikel zeige ich euch, wie man ein SSL/TLS Zertifikat mit PowerShell von Let's Encrypt bereitstellt. Es braucht einen ACME Client. Für Windows stehen da mehrere Optionen zur Verfügung. Ich habe mich für eines der zwei PowerShell Module entschieden. Find-Module Posh-ACME Mit folgenden Befehlen wird das PowerShell Modul installiert und die cmdlets vom Modul angezeigt. Install-Module Posh-ACME Import-Module Posh-ACME Get-Command -Module Posh-ACME Es muss ein Account mit der Emailadresse angelegt werden. New-PAAccount -Contact a.bohren@icewolf.ch -AcceptTOS -KeyLenght 4096 Nun kann ein Zertifikat angefordert werden. Die Validierung erfolgt über einen DNS TXT Record. New-PACertificate edge.serveralive.ch -AcceptTOS -Contact "a.bohren@icewolf.ch" -DnsSleep 15 Den TXT Record habe ich in meiner DNS Zone in...

posted @ Sunday, January 24, 2021 7:51 AM | Filed Under [ Security Powershell ]

Windows Management Framework 5.1 for Windows Server 2012R2

Hallo zusammen, In meinem LAB habe ich einen Windows Server 2012 R2. Damit die PowerShell Module über die PowerShell Gallery installiert werden können, muss das Windows Management Framework 5.1 installiert werden. Wie man sieht ist auf dem Server PowerShell 4.0 installiert. Get-Host Nun wird das Windows Management Framework 5.1 (WMF 5.1) heruntergeladen. https://www.microsoft.com/en-us/download/details.aspx?id=54616 Nun kann das WMF installiert werden. Die Installation erfordert einen Neustart. Nach dem Neustart sieht man, dass die PowerShell 5.1 installiert wurde. Natürlich müsst ihr dafür sorgen, dass die TLS1.2 Settings für DotNet und PowerShell gesetzt sind. Wie das geht ist in folgendem Blog Artikel beschrieben http://blog.icewolf.ch/archive/2020/12/03/admins-setzt-endlich-die-tls-1-2-eintrage-fur-dotnetpowershell.aspx Nun kann man prüfen ob man mit dem...

posted @ Thursday, January 21, 2021 9:49 PM | Filed Under [ Exchange Powershell System Management ]

Export AAD Connect config and read it with PowerShell

Hallo zusammen, In diesem Blog Artikel erkläre ich euch, wie man die Konfiguration von Azure Active Directory Connect exportiert und mit PowerShell die XML Files durchsucht und die Konfiguration anzeigt. Als erstes muss auf dem AAD Connect Server die Konfiguration exportiert werden Import-Module ADSync Get-ADSyncServerConfiguration -Path C:\Install\AADicewolf\ Im Verzeichnis werden drei weitere Ordner angelegt "Connectors", "GlobalSettings" und "SynchronizationRules". In den Connectors gibt es zwei. Einen für Azure AD und den anderen für Active Directory. In den Global Settings gibt es nur ein XML In den Synchronization Rules gibt es ganz viele XML Files Schauen wir uns mal die Connectoren an. Wie man sieht, handelt es sich um den...

posted @ Monday, January 18, 2021 9:38 PM | Filed Under [ Powershell Azure ]

PowerShell 7.1.1 released

Hallo zusammen, Vor zwei Tagen wurde die neuste Version von PowerShell 7 mit der Version 7.1.1 veröffentlicht. v7.1.1 Release of PowerShell https://github.com/PowerShell/PowerShell/releases/tag/v7.1.1 Hier die Screenshots der Installation Grüsse Andres Bohren

posted @ Saturday, January 16, 2021 9:51 AM | Filed Under [ Powershell ]

Analyze Traffic of Powershell Remoting with Fiddler

Hallo zusammen, Für einen Blog Artikel wollte ich sehen, ob das Teams Modul für einige Befehle ein Rest API im Hintergrund anspricht. Das kann man mit Fiddler tun. Fiddler ist nichts anderes als ein lokaler Proxy welcher auf TCP127.0.0.1:8888 hört. Sieht man hier am Beispiel mit dem Sysinternals Process Explorer In den Optionen vom Fiddler ist eingestellt, auch HTTPS Traffic zu intercepten. Dazu wird der Traffic mit einem Fiddler Root CA Zertifikat signiert, welches in den Trusted Root Certificates auf dem Computer installiert wird. Startet man den "Capture Traffic" so wird im Hintergrund der Systemproxy gesetzt. Dies sieht man im folgenden Beispiel. Der Trick ist nun,...

posted @ Saturday, January 16, 2021 12:02 AM | Filed Under [ Powershell O365 ]

Parse Teams Logs with Powershell

Hallo zusammen, Im folgenden Blog Artikel zeige ich euch, wie man die Logs von Microsoft Teams mit PowerShell durchsuchen kann. Verwenden von Protokolldateien bei der Problembehandlung in Microsoft Teams https://docs.microsoft.com/de-de/microsoftteams/log-files Beim Desktop Client von Teams kann man die Protokolle mit Rechtsklick auf das Teams Symbol in der Taskleiste neben der Uhr herunterladen. Beim Windows Client befinden sich die Logs hier: %APPDATA%\Microsoft\Teams\logs.txt Die Datei ist jedoch ziemlich umfangreich. Aber es gibt Kategorien "-- info --" oder "-- event --" oder "-- warning --" und auch "-- error --". Mit dem PowerShell code, kann man sich die Zeilen welche "-- error --" enthalten anzeigen. $content = Get-Content -Path E:\SBB\INC\logs.txt -Encoding...

posted @ Thursday, January 14, 2021 9:27 PM | Filed Under [ Powershell Teams ]

Autodiscover with Powershell

Hallo zusammen, Wie Autodiscover funktioniert habe ich schon in verschiedenen Artikeln erklärt http://blog.icewolf.ch/archive/2010/08/06/exchange-autodiscover.aspx http://blog.icewolf.ch/archive/2020/05/26/exchange-autodiscover-request-with-postman.aspx http://blog.icewolf.ch/archive/2020/12/09/autodiscover-v2-json-requests.aspx Aber man hat ja nicht immer ein Postman zur Hand. Geht ja auch mit einem PowerShell Script. Man braucht nur die Emailadresse und die Credentials einzugeben. Das Script habe ich jetzt in einer halben Stunde zusammengeschustert und erhebt keinen Anspruch auf Vollständigkeit. Wenn es funktioniert - Toll. Wenn nicht, dann müsst ihr selbst schauen wie ihr weiterkommt. ############################################################################### # Exchange Autodiscover with Powershell # 15.12.2020 V1.0 Initial Version - Andres Bohren ############################################################################### ############################################################################### #Certificate Validation Overload - TrustAllCertificates ############################################################################### if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type) { $certCallback = @"     using...

posted @ Tuesday, December 15, 2020 9:16 PM | Filed Under [ Exchange Powershell ]

Admins setzt endlich die TLS 1.2 Einträge für Dotnet/Powershell

Hallo zusammen, Ich sehe in letzter Zeit öfters eine Fehlermeldung beim Installieren von einem Modul aus der PowerShell Gallery. Die Ursache ist, dass hier eine TLS 1.2 Verbindung verlangt wird, und Dotnet und PowerShell noch nicht entsprechend konfiguriert sind. Find-Module MSOnline WARNING: Unable to resolve package source 'https://www.powershellgallery.com/api/v2'. PackageManagement\Find-Package : No match was found for the specified search criteria and module name 'MSOnline'. Try Get-PSRepository to see all available registered module repositories. At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1360 char:3 +         PackageManagement\Find-Package @PSBoundParameters | Microsoft ... +         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     + CategoryInfo          : ObjectNotFound: (Microsoft.Power...ets.FindPackage:FindPackage) [Find-Package], Exceptio    n     + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.FindPackage Eigentlich kann man das ganz einfach mit dem folgenden Befehl lösen. Damit wird [Net.ServicePointManager]::SecurityProtocol =...

posted @ Thursday, December 3, 2020 11:57 PM | Filed Under [ Security Powershell ]

Microsoft does not recommend to use SMS for MFA

Hallo zusammen, Kürzlich hat Alex Weinert (Director of Identity Security Microsoft) erklärt, weshalb Telefon und SMS basierte Multifaktor (MFA) Authentifizierung weniger Sicherheit bieten. It's Time to Hang Up on Phone Transports for Authentication https://techcommunity.microsoft.com/t5/azure-active-directory-identity/it-s-time-to-hang-up-on-phone-transports-for-authentication/ba-p/1751752  Das hat mich dazu Inspiriert, mal anzuschauen, wie es denn in meinem M365 Tenant so aussieht. Das lässt sich mit ein paar Zeilen PowerShell herausfinden Import-Module MSOnline Connect-MsolService $User = Get-MsolUser -UserPrincipalName a.bohren@icewolf.ch $User | fl strong* $User.StrongAuthenticationMethods $User.StrongAuthenticationUserDetails $User.StrongAuthenticationRequirements Mit einem kleinen Script hat man dann einen Report ############################################################################### # MFAReport # 24.11.2020 V1.0 - Initial Version - Andres Bohren ############################################################################### Import-Module MSOnline Connect-MsolService   #OutputFile $OutputFile = (Get-Location).Path + "\MFAReport.csv" If (Test-Path -path $OutputFile) { Remove-Item $OutputFile }   #Header Anlegen Add-Content -Path $OutputFile -Value ("UPN;MFAState;DefaultMFAMethod;MFAMethods")   $Users = Get-MsolUser -All | where {$_.StrongAuthenticationRequirements.State -eq...

posted @ Tuesday, November 24, 2020 10:52 PM | Filed Under [ Security Powershell O365 ]

Exchange Online Powershell Module V2 Preview6 has new MyAnalytics commands

Hallo zusammen, Seit ein paar Wochen gibt es eine neue Preview Version des Exchange Online Moduls. ExchangeOnlineManagement 2.0.4-Preview6 https://www.powershellgallery.com/packages/ExchangeOnlineManagement/2.0.4-Preview6 Die Installierten Module kann man sich mit folgendem Befehl anzeigen Get-Module ExchangeOnlineManagement -ListAvailable Das Modul aus der PowerShell Gallery kann man sich mit folgendem Befehl anzeigen lassen Find-Module ExchangeOnlineManagement -AllowPrerelease Um das aktuellste Modul zu installieren und die alten Module zu deinstallieren, muss man folgende Befehle verwenden cmd (Als Administrator starten) start PowerShell -NoLogo -NoProfile Uninstall-Module ExchangeOnlineManagement Uninstall-Module ExchangeOnlineManagement Install-Module ExchangeOnlineManagement  -AllowPrerelease Nun können wir die Befehle vom Modul anschauen Get-Command -Module ExchangeOnlineManagement Wie man sieht, gibt es ein paar neue Befehle für die MyAnalytics Configuration. Das Command Get/Set-UserBriefingConfig ist schon wieder überholt und wird mit Get/Set-MyAnalyticsFeatureConfig...

posted @ Tuesday, November 24, 2020 4:39 PM | Filed Under [ Exchange Powershell ]

Use Powershell to activate Privileged Identity Management Role

Hallo zusammen, Wie Privileged Identity Management funktioniert, habe ich bereits hier beschrieben. Nun dachte ich, vielleicht gibt es ja mit PowerShell eine einfache Möglichkeit die PIM Rollen zu aktivieren. Es gibt PIM Commands im AzureAD Modul (denke es muss die Preview Version sein) PowerShell for Azure AD roles in Privileged Identity Management https://docs.microsoft.com/en-us/azure/active-directory/privileged-identity-management/powershell-for-azure-ad-roles Get-Command *AzureADMSPrivilegedRole* Mit folgendem Command verbindet man sich mit dem AzureAD Import-Module AzureAD Connect-AzureAD Mit folgendem Befehl kann man sich die Rollen welche "Eligible" sind anzeigen lassen Get-AzureADMSPrivilegedRoleAssignment -ProviderId "aadRoles" -ResourceId "46bbad84-29f0-4e03-8d34-f6841a5071ad" | where {$_.AssignmentState -eq "Eligible"} Leider steht da dann nicht wie was für eine Rolle das ist, sondern man muss mit der ID die Rollendefinition abfragen Get-AzureADMSPrivilegedRoleDefinition...

posted @ Tuesday, November 24, 2020 4:28 PM | Filed Under [ Powershell Azure ]

PowerShell 7.1 released

Hallo zusammen, Kürzlich wurde PowerShell 7.1 veröffentlicht.  Announcing PowerShell 7.1 https://devblogs.microsoft.com/powershell/announcing-powershell-7-1/ What's New in PowerShell 7.1 https://docs.microsoft.com/de-de/powershell/scripting/whats-new/what-s-new-in-powershell-71?view=powershell-7.1   v7.1.0 Release of PowerShell https://github.com/PowerShell/PowerShell/releases/tag/v7.1.0 C:\Program Files\PowerShell\7\pwsh.exe -NoProfile Grüsse Andes Bohren

posted @ Friday, November 13, 2020 12:11 AM | Filed Under [ Powershell ]

Microsoft Compliance Configuration Analyzer (MCCA) Preview Module

Hallo zusammen, Ich bin per Zufall über folgendes PowerShell Modul gestolpert. Microsoft Compliance Configuration Analyzer (MCCA) https://github.com/OfficeDev/MCCA   Microsoft Compliance Configuration Analyzer (MCCA) Preview Module https://www.powershellgallery.com/packages/MCCAPreview/1.2 Find-Module MCCA* Install-Module -Name MCCAPreview Den Report führt man folgendermassen aus Import-Module MCCAPreview Get-MCAReport Anschliessend wird der Browser mit dem Report geöffnet. Das Ganze erinnert irgendwie an den O365 ATP Recommendend Configuration Analizer (ORCA) Grüsse Andres Bohren

posted @ Thursday, October 22, 2020 10:53 AM | Filed Under [ Powershell O365 ]

New Teams PowerShell Module 1.1.6 includes Skype for Business Online

Hallo zusammen, Vor etwa einem Monat wurde das neue Teams PowerShell Module V1.1.6 veröffentlicht. Wie man sieht habe ich bereits ein paar Versionen vom Modul installiert. Geladen wird aber das neuste. Get-Module MicrosoftTeams -ListAvailable Get-Module Find-Module MicrosoftTeams Mit folgendem Befehl lassen sich die Befehle der Version 1.1.4 anzeigen Get-Command -Module MicrosoftTeams Um Module zu installieren, muss die PowerShell als Administator gestartet sein. Da ich ein PowerShell Profil habe, welches die Module beim Start lädt, muss ich die PowerShell als Admin und ohne Profil laden. Das geht am besten über ein als Administrator gestartetes cmd Cmd (Als Administrator starten) start powershell -noprofile -nologo Nun müssen die alten Module deinstalliert werden. So lange,...

posted @ Monday, October 19, 2020 4:53 PM | Filed Under [ Powershell Teams ]

Cloud Shell in M365 Admin Center

Hallo zusammen, Die Cloud Shell im M365 Admin Center gibt es zwar schon fast ein Jahr. Wie viele von euch haben das schon entdeckt und genutzt? Damit lässt sich eine Cloudshell öffnen und die PowerShell für verschiedene Services im Browser nutzen ohne die Module lokal installiert zu haben. Folgende M365 Module sind schon vorhanden: Azure Active Directory (Connect-AzureAD) Exchange Online (Connect-EXOPSession) Microsoft Teams (Connect-MicrosoftTeams) PowerBI (Connect-PowerBIServiceAccount) Die Connect Commands kann man sich mit folgendem Command anzeigen Get-Command connect-* Exchange Online Weil man sich im Admin Portal schon angemeldet hat, muss man hier keine erneute...

posted @ Friday, October 9, 2020 10:36 AM | Filed Under [ Powershell O365 ]

Exchange Online PowerShell V2 Module supports Powershell 7 and Linux

Hallo zusammen, An der Ignite 2020 wurde angekündigt, dass das EXO V2 PowerShell Module nun auch PowerShell 7 unterstützt. Exchange Online Admin News at Microsoft Ignite 2020 https://techcommunity.microsoft.com/t5/exchange-team-blog/exchange-online-admin-news-at-microsoft-ignite-2020/ba-p/1687700   PowerShell Core support in the EXO V2 module https://docs.microsoft.com/en-us/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps#powershell-core-support-in-the-exo-v2-module Aktuell wird das PreRelease Module 2.0.4 benötigt https://www.powershellgallery.com/packages/ExchangeOnlineManagement/2.0.4-Preview2 Ich starte deshalb eine PowerShell als Admin ohne PS Profile start PowerShell -nologo -noprofile Um das neueste PreRelease Modul zu installieren benötigt man folgende Befehle Get-Module ExchangeOnlineManagement -ListAvailable Uninstall.-Module ExchangeOnlineManagement Find-Module -Name ExchangeOnlineManagement -AllowPrerelease Install-Module -Name ExchangeOnlineManagement -AllowPrerelease Get-Module ExchangeOnlineManagement -ListAvailable Nun kann das EXO V2 PowerShell Modul in der PowerShell 7 geladen und benutzt werden Import-Module ExchangeOnlineManagement Connect-ExchangeOnline Get-EXOMailbox -identity <Identity> Linux Das ganze funktioniert auch auf Linux PowerShell 7.x auf Linux starten pwsh get-host Das EXO V2 Modul...

posted @ Friday, September 25, 2020 11:08 PM | Filed Under [ Exchange Powershell O365 ]

PowerShell 7.0.3

Hallo zusammen, Schon vor ein paar Wochen ist PowerShell 7.0.3 erschienen. v7.0.3 Release of PowerShell https://github.com/PowerShell/PowerShell/releases/tag/v7.0.3 Übrigens kann PowerShell ja auch auf Linux installiert werden yum install https://github.com/PowerShell/PowerShell/releases/download/v7.0.3/powershell-7.0.3-1.centos.8.x86_64.rpm Anschliessend kann man die PowerShell mit dem befehl "pwsh" starten Grüsse Andres Bohren

posted @ Friday, September 25, 2020 9:10 PM | Filed Under [ Powershell ]

PowerShell v7.1.0 Preview 6

Hallo zusammen, Gestern wurde der PowerShell v7.1.0 Preview 6 Release veröffentlicht https://github.com/PowerShell/powershell/releases Grüsse Andres Bohren

posted @ Tuesday, August 18, 2020 9:29 PM | Filed Under [ Powershell ]

Exchange Recover Deleted Items (Exchange Admin Center & PowerShell)

Hallo zusammen, Ich habe ja schon kürzich über das neue Exchange Admin Center in Microsoft 365 berichtet. Kürzlich wurde dazu ein Artikel im Exchange Team Blog veröffentlicht. Neu kann man über das Exchange Admin Center auch im GUI gelöschte Objekte wiederherstellen. A New RecoverableItems Experience Comes to Exchange Online! https://techcommunity.microsoft.com/t5/exchange-team-blog/a-new-recoverableitems-experience-comes-to-exchange-online/ba-p/1505353 Dazu braucht es aber erstmal ein paar Grundlagen.   Recoverable Items folder in Exchange Server https://docs.microsoft.com/en-us/exchange/policy-and-compliance/recoverable-items-folder/recoverable-items-folder?view=exchserver-2019 Ein Mail kommt erst in die Recoverable Items (Exchange Papierkorb) von Exchange, wenn der Benutzer das Objekt mit Shift + Delete direkt löscht oder nachdem es aus den "Deleted Items" (Gelöschte Objekte) im Postfach gelöscht wird. In diesem Falle landet das Objekt im "Deletions" Order....

posted @ Wednesday, July 15, 2020 8:49 AM | Filed Under [ Exchange Powershell ]

Exchange Online PowerShell V2 and Modern Auth with Application in AzureAD (Step-by-step)

Hallo zusammen, Vor ein paar Tagen hat Microsoft auf dem Exchange Team Blog erklärt, wie man mit sich mit Modern Auth und dem Exchange Online PowerShell V2 Module authentifizieren kann. Dies benötigt jedoch die Preview vom Exchange Online PowerShell V2 Module. Modern Auth and Unattended Scripts in Exchange Online PowerShell V2 https://techcommunity.microsoft.com/t5/exchange-team-blog/modern-auth-and-unattended-scripts-in-exchange-online-powershell/ba-p/1497387 App-only authentication for unattended scripts in the EXO V2 module https://docs.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps A first look at Certificate-Based Authentication for Exchange Online Remote PowerShell https://www.quadrotech-it.com/blog/certificate-based-authentication-for-exchange-online-remote-powershell/ Als erstes muss eine Applikation im Azure AD registriert werden. Dort nur einen Namen vergeben, den Rest so belassen Am besten merkt man sich dann gleich die Application ID Nun müssen der Applikation noch...

posted @ Sunday, July 12, 2020 10:37 AM | Filed Under [ Exchange Powershell O365 ]

Visual Studio Code and Azure DevOps Repo

Hallo zusammen, Kürzlich habe ich einen Blog Artikel geschrieben, wie man mit Visual Studio Code ein Version Control Repository in GitHub verwaltet. In diesem Artikel zeige ich euch Azure DevOps und wie man hier Code in einem Repository verwalten kann. Für die ersten fünf Benutzer ist Azure DevOps kostenlos. Danach kostet der Basci Plan 5.91 pro Benutzer und Monat. Für meine Zwecke reicht der Basis Plan. https://azure.microsoft.com/de-de/pricing/details/devops/azure-devops-services/ Nun muss man die Region auswählen Der Organisation einen Namen vergeben - ich übernehme den Vorschlag Die DevOps Organisation ist vorbereitet. Nun kann man ein Projekt erstellen. Ich erstelle ein privates Projekt um dort Code zu verwalten. Es gibt aber noch...

posted @ Sunday, July 12, 2020 8:51 AM | Filed Under [ Powershell Azure ]

How to install Exchange Online Powershell V2 Preview Module

Hallo zusammen, Es gibt eine Preview vom ExchangeOnlineManagement Modul - musste ich natürlich ausprobieren. https://www.powershellgallery.com/packages/ExchangeOnlineManagement/2.0.3-Preview Um PowerShell Module zu installieren, muss die PowerShell als Administrator gestartet werden. Damit keine Module über die PowerShell Profile geladen werden, starte ich eine cmd als Administrator. Dort führe ich dann folgenden Befehl aus: start PowerShell -noprofile Als ich den Befehl für die Installation eingegeben habe, war der Parameter "-AllowPrerelease" unbekannt Install-Module -Name ExchangeOnlineManagement -AllowPrerelease Tja das heisst wohl, dass PowershellGet zu alt ist. Get-Module PowershellGet --ListAvailable Find-Module PowershellGet Install-Module PowershellGet Install-Module PowershellGet -Force Nun kann die neue Version vom ExchangeOnlineManagement PowerShell Modul installiert werden. Falls nicht schon passiert, zuerst die alte Version deinstallieren Uninstall-Module -Name ExchangeOnlineManagement Install-Module -Name ExchangeOnlineManagement...

posted @ Thursday, July 9, 2020 10:35 PM | Filed Under [ Exchange Powershell ]

PowerShell 7.0.2

Hallo zusammen, Das Update der PowerShell 7 mit der Version 7.0.2 gibt es schon ein paar Wochen. Höchste Zeit das mal zu installieren. v7.0.2 Release of Powershell https://github.com/PowerShell/PowerShell/releases/tag/v7.0.2 Grüsse Andres Bohren

posted @ Thursday, July 9, 2020 10:15 PM | Filed Under [ Powershell ]

Visual Studio Code and Version Control - Part 3

Hallo zusammen, Im letzten Artikel haben wir uns mit den Grundlagen von GIT vertraut gemacht. Visual Studio Code and Version Control - Part 2 http://blog.icewolf.ch/archive/2020/07/04/visual-studio-code-and-version-control-part-2.aspx Nun folgt die praktische Anwendung im VS Code Ein paar Tips hierzu gibt's auch hier: Using Version Control in VS Code https://code.visualstudio.com/docs/editor/versioncontrol Mit Ctrl + Shift + P kommt man in die Command Palette. Dort gibt man folgendes ein: Git: Clone Ich habe mir schon vor einiger Zeit ein GitHub Konto angelegt und dort ein Repository angelegt. https://github.com/BohrenAn/ExOIPChecker Auf dem Knopf "Clone or Download" kann man die URL vom Repository kopieren. Diese URL gibt man nun im VS Code ein. Anschliessend muss man noch ein Working Directory konfigurieren. Ich...

posted @ Saturday, July 4, 2020 10:38 AM | Filed Under [ Powershell ]

Visual Studio Code and Version Control - Part 2

Hallo zusammen, Im vorangegangenen Artikel habe ich euch gezeigt, wie man VS Code und GIT installiert.  Visual Studio Code and Version Control - Part 1 http://blog.icewolf.ch/archive/2020/07/04/visual-studio-code-and-version-control-part-1.aspx Nun muss man sich erstmal mit den Grundlagen von GIT auseinander setzen. Ich habe den untenstehenden Link gefunden und finde, er zeigt recht gut die Grundlagen der Versionsverwaltung mit GIT auf. Natürlich ist das stark vereinfacht, aber ich denke, das wichtigste steht da. git - Der einfache Einstieg https://rogerdudler.github.io/git-guide/index.de.html Ich habe mir erlaubt, die wichtigsten Dinge zusammenzufassen. Also eine Art Zusammenfassung der Zusammenfassung :)   #neues repository erstellen git init   #ein repository auschecken git clone /pfad/zum/repository #Falls du ein entferntes Repository verwendest, benutze: git clone benutzername@host:/pfad/zum/repository   #Du...

posted @ Saturday, July 4, 2020 10:06 AM | Filed Under [ Powershell ]

Visual Studio Code and Version Control - Part 1

Hallo zusammen, Die Rolle des Systemadministrators verändert sich schon seit ein paar Jahren. Obwohl Engineering immer noch ein grosser Teil des Alltags ist, wird die Automatisierung immer wichtiger. Ein Systemadministrator, welcher sich nur im GUI zurechtfindet, hat es immer schwieriger. Wer kein PowerShell oder ein paar andere Programmiersprachen wie C#, Javascript, Java, Phyton (die Liste lässt sich beliebig erweitern) kann, hat es immer schwerer. Seit einigen Jahren wird in der IT Industrie das DevOps Modell vorangetrieben. Dabei werden Teams aus Entwicklern (Developer) und Systemadministratoren (Operator) zusammengestellt, welche dann gemeinsam für ein Produkt verantwortlich sind. In meiner Laufbahn habe ich mich mit verschiedenen Programmiersprachen auseinandergesetzt...

posted @ Saturday, July 4, 2020 9:46 AM | Filed Under [ Powershell ]

Check for pending reboot with PowerShell

Hallo zusammen, Nachdem ich mich beim Exchange Update wieder mal durch den Wizard geklickt hatte und dann darauf hingewiesen wurde, dass noch ein Pending Reboot offen ist. Habe ich gedacht, das könnte man auch rasch vorher checken. Die folgende Tabelle habe ich im Internet gefunden. Daraus habe ich dann rasch ein PowerShell Script gebastelt. How to Check for a Pending Reboot in the Registry (Windows) https://adamtheautomator.com/pending-reboot-registry-windows/ KEY VALUE ...

posted @ Friday, July 3, 2020 8:54 PM | Filed Under [ Powershell ]

Powershell store password with encryption key

Hallo zusammen, Sicher steht der eine oder andere auch vor der Herausforderung, Credentials in Scripten zu verwenden. Dabei sollten die ja nicht gerade im Cleartext in den Scripten sichtbar sein. Mit folgendem Vorgehen, werden die Passwörter mit einem AES Key Encrypted und gespeichert. AES Encryption Key anlegen $Key = New-Object Byte[] 32 [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key) $Key | out-file E:\Scripting\aes.key Passwort mit dem Encryption Key speichern (get-credential).Password | ConvertFrom-SecureString -key (get-content E:\Scripting\aes.key) | set-content "E:\Scripting\password.txt" So sieht hinterher das Passwortfile aus. Das Passwort mit dem Encryption Key laden und in ein PSCredential Objekt speichern $password = Get-Content E:\Scripting\password.txt | ConvertTo-SecureString -Key (Get-Content E:\Scripting\aes.key) $cred = New-Object System.Management.Automation.PsCredential("a.bohren@icewolf.ch",$password) Damit kann man sich anschliessend beispielsweise an Exchange...

posted @ Friday, June 26, 2020 8:47 AM | Filed Under [ Powershell ]

Get SamAccountName from Azure Active Directory by PowerShell

Hallo zusammen, Für ein Projekt musste ich aus dem Azure Active Directory den SamAccountName auslesen. Das Problem ist nur, dass dieses Property nicht so einfach über die PowerShell Module abgefragt werden kann. Hier das Beispiel vom MSOnline Modul Get-MsolUser -UserPrincipalName a.bohren@icewolf.ch | fl Auch beim PowerShell Modul AzureAD gibt es dieses Property nicht. Get-AzureADUser -SearchString "a.bohren@icewolf.ch" | fl Man kann dies jedoch über den Graph Explorer, sprich über das Graph API abfragen. https://graph.microsoft.com/v1.0/users/a.bohren@icewolf.ch?$select=userPrincipalName,onPremisesSamAccountName Um das ganze mit PowerShell abzufragen braucht es eine App Registration im Azure AD. Dort benötigt man das "User.Read.All" recht und einen Admin Consent.  Mit folgendem Code holt man sich den Accesstoken $AppId = '449e6fed-e858-437e-ba9f-769773106786' $AppSecret = 'geheimesAppSecret' $Scope...

posted @ Monday, June 22, 2020 11:23 PM | Filed Under [ Powershell Azure ]

PowerShell 7.0.1 Released

Hallo zusammen, Gestern wurde Die PowerShell v7.0.1 released. https://github.com/PowerShell/PowerShell/releases Grüsse Andres Bohren

posted @ Friday, May 15, 2020 6:07 PM | Filed Under [ Powershell ]

VMware PowerCLI

Hallo zusammen, Ich habe mir heute mal kurz das VMware PowerCLI Module angeschaut. Für die Installation von PowerShell Modulen muss die PowerShell als Administrator gestartet sein. Install-Module VMware.PowerCLI Nun kann die PowerShell wieder normal gestartet werden. Laden des PowerShell Moduls und Verbindung zum vCenter Server Appliance (VCSA) herstellen. Die Verbindung schlägt wegen des SelfSigned Zertifikats jedoch noch fehl. Import-Module VMware.PowerCLI Connect-VIServer -Server VCSA.corp.icewolf.ch Die Zertifikatswarnung kann mit folgendem Befehl übersteuert werden. Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false Connect-VIServer -Server VCSA.corp.icewolf.ch Get-VM Sample Scripts for Managing vSphere with VMware PowerCLI https://code.vmware.com/docs/11860/powercli-12-0-0-user-s-guide/GUID-3E36F4EA-3742-48BA-BB4B-7E0A2EAAE83E.html Nachfolgend ein paar Abfragen und das Starten einer VM. Get-VM Win10 Get-VM Win10 | Start-VM Get-Datastore Get-Datacenter Grüsse Andres Bohren

posted @ Wednesday, May 13, 2020 1:27 PM | Filed Under [ Powershell Virtualisation ]

Scheduled Task mit Powershell anlegen

Hallo zusammen, Ich wollte schon länger mal wissen, ob man nicht einen Scheduled Task mit PowerShell einrichten kann. Und natürlich ist die Antwort: Ja klar, das geht :) Hier der Code dazu - die Befehle unten sind direkt zu Microsoft Docs verlinkt. $action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-NoProfile C:\Scripts\ZIPandDeleteIISLog.ps1' $trigger = New-ScheduledTaskTrigger -Daily -At 1am Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "ZIPandDeleteIISLog" -Description "Daily ZIPandDeleteIISLog" -RunLevel "Highest" Die PowerShell muss "als Administrator" gestartet sein und legt den Task mit den Credentials des eingeloggten Benutzers an. Wenn man das aufgerufene PowerShell verstecken möchte, kann man das mit dem Parameter WindowsStyle tun PowerShell -NoProfile C:\Scripts\ZIPandDeleteIISLog.ps1 -WindowStyle Hidden Powershell Command Line Parameters https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Core/About/about_PowerShell_exe?view=powershell-5.1&viewFallbackFrom=powershell-7  Grüsse Andres...

posted @ Thursday, April 30, 2020 9:42 PM | Filed Under [ Powershell ]

Microsoft Graph REST API - Outlook Calendar with Powershell

Hallo zusammen, Ich habe ja in der Vergangenheit viele Dinge über PowerShell und die Exchange Webservices Management API gemacht. Mit der Abschaltung von Basic Authentication wird das aber immer schwieriger. Früher gab es ja noch die Outlook REST API. Aber selbst die Outlook REST API V2.0 wird anscheinend nicht mehr weiterentwickelt. https://developer.microsoft.com/en-us/office/blogs/migrating-from-outlook-rest-api-v1-0-to-microsoft-graph/ Version 1.0 of the Outlook REST API was launched in 2015 to provide API access to mail, calendar, contacts, and other data from Exchange Online, with support for Basic Authentication.  Over time, we’ve released major enhancements in Outlook REST API v2.0 and Microsoft Graph, both of which provide richer features, and better...

posted @ Wednesday, April 29, 2020 9:44 PM | Filed Under [ Powershell Azure ]

Powershell 7.0 GA

Hallo zusammen, Irgendwie ist habe ich verpasst, dass die PowerShell 7.0 am 04 März 2020 von Microsoft als Generally Available (GA) verkündet wurde. Höchste Zeit also, sich die neue Shell mal zu installieren und zu testen. Announcing PowerShell 7.0 https://devblogs.microsoft.com/powershell/announcing-powershell-7-0/   Download v7.0.0 Release of PowerShell https://github.com/PowerShell/PowerShell/releases/tag/v7.0.0 Grüsse Andres Bohren

posted @ Wednesday, April 29, 2020 8:45 PM | Filed Under [ Powershell ]

EWS Managed API: Export Attachments from specific Folder

Hallo zusammen, Ich hatte schon lange vor, diesen Blog Artikel zu schreiben. Nun ist mir der Codeschnipsel wieder in die Hände gekommen und ich habe beschlossen, das endlich zu veröffentlichen. Ich hatte einen Fall, bei dem ich die  *.jpg Attachments von Mails aus einem bestimmten Ordner exportieren wollte. Für das Script nutze ich PowerShell und das EWS Managed API Microsoft Exchange Web Services Managed API 2.2 https://www.microsoft.com/en-us/download/details.aspx?id=42951   Ausserdem wird die Exchange ApplicationImpersonation Rolle genutzt.   Diese Rolle muss man in Exchange Online erst einrichten.   Ich habe dazu eine Custom Role erstellt: Icewolf-Impersonation   Scope: Auf welche Objekte kann man zugreifen. Das kann mit einem ManagementScope eingeschränkt werden. Rolle: Welche Rechte beinhaltet die...

posted @ Wednesday, March 25, 2020 9:27 PM | Filed Under [ Exchange Powershell ]

Microsoft Teams Powershell Module 1.0 Released

Hallo zusammen, Vor zwei Tagen wurde dasMicrosoft Teams PowerShell Module 1.0.0 veröffentlicht. Hat man noch das alte Teams PowerShell Module 0.9.6 installiert, so sollte man dieses erst deinstallieren. PowerShell als Administrator starten Uninstall-Module MicrosoftTeams Installation des neuen MicrosoftTeams Moduls Find-Module MicrosoftTeams Install-Module MicrosoftTeams Nun kann die PowerShell wieder als normaler Benutzer gestartet werden. Für die Verbindung muss man die O365 Rolle "Teams-Dienstadministrator" sein. Import-Module MicrosoftTeams Connect-MicrosoftTeams Get-Team Get-Team -GroupId [GroupID] | fl Um alle Cmdlets des Moduls anzuzeigen kann man folgenden Befehl verwenden. Wie man sieht, sind es deutlich weniger als noch bei der Version 0.9.6. Die Dokumentation der Befehle findet man hier https://docs.microsoft.com/en-us/powershell/module/teams/?view=teams-ps Get-Command -Module MicrosoftTeams Dafür ist es einfacher geworden, nach Teams zu suchen Get-Team...

posted @ Thursday, April 25, 2019 10:06 PM | Filed Under [ Powershell O365 ]

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 1, 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 3, 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 1, 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 7, 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 7, 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 8, 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 7, 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 1, 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 7, 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 7, 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 3, 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 3, 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 3, 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 2, 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 3, 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 1, 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 1, 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