none
Mit Powershell neue Termine in einem Sharepoint-Kalender erstellen RRS feed

  • Frage

  • Hi,

    unser Team bekommt viele automatisiert erzeugte Mails, die den Reboot eines Windows-Servers z. B. wegen Patchrollout ankündigen. Damit alle im Team schnell an diese Info rankommen, würd ich den Sharepoint-Kalender des Teams nutzen wollen.

    Aus Outlook kann ich bereits mit Powershell die Mails auslesen und die relevanten Angaben herausfiltern.
    Aber wie kann ich als 2. Schritt daraus die (Tages-) Termine im Sharepoint-Kalender erzeugen?

    Ich sehe 3 Möglichkeiten:
    (1) Mittels Powershell-Sharepoint-Modules direkt in Sharepoint schreiben  (wie käm ich an die ran?)
    (2) Den SP-Kalender mit Outlook verbinden und mittels Outlook die Termine anlegen. Aus der Sharepoint-Community kam zumindest der Tipp, es über Outlook zu machen, weil es einfacher sei.
    (3) Notfalls könnte ich eine ICS-Datei erzeugen, die ich dann manuell in den SP-Kalender importiere. Aber das ist die umständlichste Methode.

    Kann mir da jemand helfen?

    Danke & Schöne Grüße

    Walter

    Dienstag, 7. Januar 2014 18:54

Antworten

Alle Antworten

  • Hallo Walter!

    Ich habe keine Ahnung von SharePoint!
    Aber ich beherrsche die Internet suche ;-)

    Hier wird dir geholfen:
    http://sharepintblog.com/2011/06/24/create-random-or-demo-sharepoint-content-with-powershell/

    Ganz unten ist ein link mit dem Script:

    ## Load the SharePoint Snapin so the script can be executed from PowerShell editor
    Add-PSSnapin Microsoft.SharePoint.PowerShell –erroraction SilentlyContinue
    
    ## Create a random number
    $random = New-Object system.random
    
    ## Create a list of events
    $eventList = New-Object System.Collections.Generic.List``1[System.String]
    $eventList.Add("Conference Call")
    $eventList.Add("Team Meeting")
    $eventList.Add("Design Review")
    $eventList.Add("Audit")
    $eventList.Add("Monthly Report Prep")
    $eventList.Add("Sales Meeting")
    $eventList.Add("BSG Extranet Development")
    $eventList.Add("SP2010 Event")
    $eventList.Add("ISO27001")
    $eventList.Add("Board Meeting")
    $eventList.Add("ISO27001")
    $eventList.Add("Staff Training")
    $eventList.Add("Reviews")
    $eventList.Add("Staff Update")
    $eventList.Add("Budget Review")
    $eventList.Add("Doctors")
    $eventList.Add("Working From Home")
    $eventList.Add("Unavailable")
    $eventList.Add("Off Site")
    $eventList.Add("Client Meeting")
    $eventList.Add("Prep Board")
    $eventList.Add("SP2010 Prep")
    $eventList.Add("Long Lunch")
    $eventList.Add("Private Meeting")
    $eventList.Add("Staff Review")
    $eventList.Add("Prep Sales Figures")
    
    ## Define the SharePoint web URL
    $WebUrl = "http://BC01"
    
    ## Delete 'Team Calendar' if it already exists
    $LibraryName = "Team Calendar"
    Write-Output "Deleting $LibraryName...."
    $OpenWeb = Get-SPWeb $WebUrl
    try { $OpenWeb.Lists[$LibraryName].Delete(); } catch { }
    
    ## Create new 'Team Calendar'
    Write-Output "Creating new $LibraryName...."
    $OpenWeb.Lists.Add($LibraryName, "A SharePoint calendar created via PowerShell", 106)
    $NewList = $OpenWeb.Lists[$LibraryName]
    $NewList.OnQuickLaunch = 1
    $NewList.Update()
    
    ## Create a few items
    For ($x=0; $x -lt 13; $x++)
    {
        $item = $NewList.Items.Add();
        $item["Title"] = $eventList[$x];
        $start = (Get-Date).AddDays($random.next(-30,30));
        $item["EventDate"] = $start;
        $item["EndDate"] = $start.AddMinutes($random.next(30,90));
        $item.Update()
    }
    
    ## Delete 'My Calendar' if it already exists
    $LibraryName = "My Calendar"
    Write-Output "Deleting $LibraryName...."
    try { $OpenWeb.Lists[$LibraryName].Delete() } catch { }
    
    ## Create a new 'My Calendar'
    Write-Output "Creating new $LibraryName...."
    $OpenWeb.Lists.Add($LibraryName, "A SharePoint calendar created via PowerShell", 106)
    $NewList = $OpenWeb.Lists[$LibraryName]
    $NewList.OnQuickLaunch = 1
    $NewList.Update()
    $OpenWeb.Update()
    
    ## Create a few items
    For ($x=13; $x -lt 26; $x++)
    {
        $item = $NewList.Items.Add();
        $item["Title"] = $eventList[$x];
        $start = (Get-Date).AddDays($random.next(-30,30));
        $item["EventDate"] = $start;
        $item["EndDate"] = $start.AddMinutes($random.next(30,90));
        $item.Update()
    }
    
    ## Tidy up
    $OpenWeb.Dispose()

    ODER ohne das SharePoint Modul mit den .NET Klassen:

    Auf einem SharePoint Server kannst du  in PowerShell die SharePoint .DLL Laden.

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

    Dann kannst du deinen Sites und Calendars listen:

    $Site = New-Object Microsoft.Sharepoint.Spsite("http://localhost")
    $Web = $Site.OpenWeb()
    $Calendar = $Web.Lists["Calendar"]

    Dokumentation der SPSite Klasse:
    http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsite_members.aspx

    Dokumentation der SPWeb Klasse :
    http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb_members.aspx

    etwa so:

    $Site = New-Object Microsoft.Sharepoint.Spsite("http://localhost")
    $Web = $Site.OpenWeb()
    $Calendar = $Web.Lists.TryGetList("Calendar")
    
    If($Calendar) {
    
        $CalendarEvent = $Calendar.Items.Add()
        $CalendarEvent["Title"] = "New Event"
        $CalendarEvent["Description"] = "New Event created using SharePoint Object Model"
        $CalendarEvent["Location"] = "First Floor"
        $CalendarEvent["Start Time"] = Get-Date
        $CalendarEvent["End Time"] = (Get-Date).AddDays(2)
        $CalendarEvent["Category"] = "Business"
        $CalendarEvent["fAllDayEvent"] = $False
        $CalendarEvent.Update()
        
    } Else {
    
        Write-Host '"Calendar list does not exists in the site"'
    
    }

    Zur Exchange / Outlook Programmierung mit PowerShell kannst du meinen Artikel über Exchange Webservices (EWS) hier lesen:

    http://www.powershell-group.eu/powershell-exchange-webservices-ews/

    und hier die Exchange Webservices (EWS) mit dem Kalender:

    http://social.technet.microsoft.com/Forums/ie/en-US/27affc1c-f96a-455f-95e9-cbcbc741720b/how-to-add-calendar-enries-to-all-users-in-organization-using-powershell-and-ews?forum=exchange2010


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+


    Mittwoch, 8. Januar 2014 07:35
  • Hallo Peter,

    danke für die ausführliche Hilfe.

    Ich hab aber leider keinen Zugriff auf den Sharepoint-Server, kann mich dort also nicht anmelden. Bin nur einfacher Sharepoint-Nutzer ohne weitere Rechte.
    Im Internet finden sich da schon einige Beispiele für Powershell & Sharepoint, aber da gehts immer um Administration des SP-Servers inklusiv Logon am SP-Server oder zumindest Admin-Rechte daselbst.

    Wegen dieses fehlenden Zugriffs hab ich also weder Sharepoint-Cmdlets noch Sharepoint-DLLs.

    Danke & Grüße

    Walter

    Mittwoch, 8. Januar 2014 09:41
  • Vielleicht hilft dir dann das hier :

    http://www.vinithmenon.com/2012/11/manipulating-sharepoint-lists-using.html

    Windows SharePoint Services Web Services
    http://msdn.microsoft.com/en-us/library/ms479390%28v=office.12%29.aspx

    Die URL zum auflisten aller SharePoint Listen hat dieses Format:

    New-WebServiceProxy –Uri 'http://<site>/_vti_bin/Lists.asmx'
    Spiel damit mal rum!

    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+


    • Bearbeitet Peter Kriegel Mittwoch, 8. Januar 2014 11:21
    • Als Antwort vorgeschlagen Alex Pitulice Freitag, 17. Januar 2014 09:40
    • Als Antwort markiert WalterFMB Freitag, 17. Januar 2014 09:50
    Mittwoch, 8. Januar 2014 11:19
  • Danke, Peter.

    Ja, ich werd mal ein wenig rumspielen. Mal sehn, ob ich damit zurecht kommt.

    Ich hab auch mal versucht, eine ICS-Datei mittels Outlook in einen verbundenen Sharepoint-Kalender zu importieren. Leider kann ich den Ziel-Kalender nicht auswählen, Outlook importiert so was immer nur in meinen eigenen Kalender, das hilft also auch nicht.

    Schöne Grüße

    Walter

    Freitag, 17. Januar 2014 09:53