Montag, 26. Januar 2015

Passwort eines (lokalen) Windows Benutzerkontos ändern

In diesem Post möchte ich zeigen, wie man das Passwort eines Windows Benutzers per C# ändert.
Hierfür gibt es mehrere Möglichkeiten, wir benutzen hier die Klasse PrincipalContext.
Bei dieser, aber auch bei allen anderen Methoden, ist es bei Windows 8 wichtig, dass der Kontentyp des Zielbenutzers auf lokal gestellt ist (kann geändert werden), und nicht auf Windows Konto.
Im Projekt fügen wir dann per Projekt - Verweis hinzufügen eine Referenz auf die Assembly System.DirectoryServices.AccountManagement hinzu, und mit folgendem kurzen Code lässt sich das Passwort eines Benutzers ändern:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.DirectoryServices.AccountManagement;

namespace ChangePW
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
                var Context = new PrincipalContext(ContextType.Machine);
                var User = UserPrincipal.FindByIdentity(Context, IdentityType.SamAccountName, username);
                User.ChangePassword(oldPassword, newPassword);
        }
    }
}

Wie man sehen kann, erstellen wir zuerst ein PrincipalContext Objekt. ContextType.Machine gibt an, dass wir auf den aktuellen Computer zugreifen möchten. Dann suchen wir uns von diesem den gewünschten Benutzer heraus, und ändern dessen Passwort.

Donnerstag, 15. Januar 2015

Posts auf Blogger durchsuchen

Nachdem ich im vorigen Post gezeigt habe, wie man mit der Blogger Data API v2 mit C# Posts auf Blogger veröffentlicht, möchte ich heute zeigen, wie man bereits existierende Posts auf dem eigenen Blog durchlaufen kann.
Wir leisten die selbe Vorarbeit wie im vorigen Post, binden also Google.GData.Client ein und erstellen ein Service Objekt, mit welchem wir uns anmelden.
Mit der folgenden Feedabfrage können wir dann auf alle veröffentlichten Posts zugreifen:

            FeedQuery query = new FeedQuery();
            query.Uri = new Uri("http://www.blogger.com/feeds/" + blogID + "/posts/default");

            AtomFeed feed = null;
            feed = service.Query(query);

Das folgende Beispielprogramm durchsucht die Inhalte aller vorhanden Posts nach dem Suchbegriff "Test" ab und gibt die Titel der passenden Posts aus:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Google.GData.Client;

namespace BloggerQueryPosts
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Service service = new Service("blogger", "");
            service.Credentials = new GDataCredentials(Email, Password);
            GDataGAuthRequestFactory factory = (GDataGAuthRequestFactory)service.RequestFactory;
            factory.AccountType = "GOOGLE";

            FeedQuery query = new FeedQuery();
            query.Uri = new Uri("http://www.blogger.com/feeds/" + blogID + "/posts/default");

            AtomFeed feed = null;
            feed = service.Query(query);
            foreach (AtomEntry entry in feed.Entries)
            {
                if (entry.Content.Content.ToString().Contains("Test"))
                    MessageBox.Show("Match. " + entry.Title.Text);
            }
        }
    }
}

Sonntag, 11. Januar 2015

Posts auf Blogger.com automatisiert veröffentlichen

Die nächsten Posts werde ich dem Bloggerportal Blogger.com widmen, auf welchem unter anderem auch dieser Blog läuft. Für den Zugriff per C# benutzen wir die Blogger Data API, wie in dieser Dokumentation beschrieben. Hier benutzen wir Version 2, aber es gibt mittlerweile auch die (Beta) Version 3, die ich wahrscheinlich später beschreiben werden.
Im heutigen Post möchte ich zeigen, wie man mit C# Posts erstellt und veröffentlicht.
Dazu müssen wir zuerst das Google_Data_API_Setup von diesem Link herunterladen und installieren. Dann fügen wir unserem Projekt die Referenz Google.GData.Client.dll hinzu, diese liegt bei mir im Ordner C:\Program Files (x86)\Google\Google Data API SDK\Redist, und integrieren sie mittels using Google.GData.Client; 
Nun können wir uns bei Blogger anmelden:

            Service service = new Service("blogger", "");
            service.Credentials = new GDataCredentials(Email, Password);
            GDataGAuthRequestFactory factory = (GDataGAuthRequestFactory)service.RequestFactory;
            factory.AccountType = "GOOGLE";

Posts werden im Atomformat erstellt, mit diesen Codezeilen legen wir einen Post mit Titel "Test" und Inhalt "Testpost" an:

            AtomEntry newPost = new AtomEntry();
            newPost.Title.Text = "Test";
            newPost.Content = new AtomContent();
            newPost.Content.Content = "Testpost";
            newPost.Content.Type = "xhtml";
            // newPost.IsDraft = true;

Die Attribute sollten eigentlich selbsterklärend sein, mittels IsDraft wird festgelegt, ob der Post ein Entwurf sein soll.
Schließlich müssen wir den Post noch veröffentlichen, hierzu schicken wir den Post an den Blogfeed, was wir folgendermaßen tun:


            Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogID + "/posts/default");
            AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);

Der komplette Code lautet:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Google.GData.Client;

namespace BloggerCreatePosts
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            Service service = new Service("blogger", "");
            service.Credentials = new GDataCredentials(Email, Password);
            GDataGAuthRequestFactory factory = (GDataGAuthRequestFactory)service.RequestFactory;
            factory.AccountType = "GOOGLE";

            AtomEntry newPost = new AtomEntry();
            newPost.Title.Text = "Test";
            newPost.Content = new AtomContent();
            newPost.Content.Content = "Testpost";
            newPost.Content.Type = "xhtml";
            // newPost.IsDraft = true;


            Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogID + "/posts/default");
            AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);
        }
    }
}