{"id":3466,"date":"2025-09-26T14:14:59","date_gmt":"2025-09-26T12:14:59","guid":{"rendered":"https:\/\/davidka.net\/ru\/?p=3466"},"modified":"2025-10-24T12:39:08","modified_gmt":"2025-10-24T09:39:08","slug":"mcp-powershell-server-readme","status":"publish","type":"post","link":"http:\/\/de.davidka.net\/de\/2025\/09\/26\/mcp-powershell-server-readme\/","title":{"rendered":"PowerShell MCP Server"},"content":{"rendered":"\n<p class=\"has-neve-link-color-color has-text-color has-link-color has-medium-font-size wp-elements-c9ddf9c6579f3dfcaf9ad705b75c06b4 wp-block-paragraph\">Ein MCP (Model Context Protocol) Server zur Ausf\u00fchrung von PowerShell-Skripten, der sowohl den HTTP- als auch den STDIO-Betriebsmodus unterst\u00fctzt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beschreibung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der MCP PowerShell Server erm\u00f6glicht es KI-Assistenten, PowerShell-Befehle und -Skripte \u00fcber das standardisierte MCP-Protokoll auszuf\u00fchren. Der Server unterst\u00fctzt zwei Betriebsmodi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>STDIO-Modus<\/strong>: F\u00fcr die Integration mit <code class=\"\" data-line=\"\">gemini-cli<\/code> und anderen lokalen MCP-Clients.<\/li>\n\n\n\n<li><strong>HTTP-Modus<\/strong>: F\u00fcr Webanwendungen und die Netzwerkintegration \u00fcber eine REST-API.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Welchen Modus w\u00e4hlen: HTTP oder STDIO?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Wahl zwischen <code class=\"\" data-line=\"\">mcp-powershell-http.ps1<\/code> und <code class=\"\" data-line=\"\">mcp-powershell-stdio.ps1<\/code> h\u00e4ngt davon ab, <strong>wie und von wo<\/strong> die Client-Anwendung mit dem Server interagieren wird.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code class=\"\" data-line=\"\">mcp-powershell-http.ps1<\/code> (HTTP-Modus)<\/strong> arbeitet wie ein <strong>Kellner in einem Restaurant<\/strong>. Er nimmt Bestellungen (HTTP-Anfragen) von jedem Client im Netzwerk entgegen, leitet sie an die &#8222;K\u00fcche&#8220; (PowerShell) weiter und gibt das fertige Ergebnis (HTTP-Antwort) zur\u00fcck.<\/li>\n\n\n\n<li><strong><code class=\"\" data-line=\"\">mcp-powershell-stdio.ps1<\/code> (STDIO-Modus)<\/strong> arbeitet wie ein <strong>pers\u00f6nlicher Assistent in der K\u00fcche<\/strong>. Er erh\u00e4lt Aufgaben direkt (\u00fcber die Standardeingabe <code class=\"\" data-line=\"\">stdin<\/code>) von einem steuernden Prozess (z. B. <code class=\"\" data-line=\"\">gemini-cli<\/code>), der ihn selbst gestartet hat, und gibt das Ergebnis sofort zur\u00fcck (\u00fcber die Standardausgabe <code class=\"\" data-line=\"\">stdout<\/code>).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Wann sollte der HTTP-Modus verwendet werden?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sie sollten HTTP w\u00e4hlen, wenn eine <strong>Netzwerkkommunikation<\/strong> erforderlich ist.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Fernverwaltung:<\/strong> Die Client-Anwendung befindet sich auf einem anderen Computer.<\/li>\n\n\n\n<li><strong>Web-Integration:<\/strong> Sie m\u00fcssen PowerShell-Skripte aus einer Webanwendung, einem Admin-Panel oder \u00fcber AJAX-Anfragen aufrufen.<\/li>\n\n\n\n<li><strong>Microservice-Architektur:<\/strong> Andere Dienste in Ihrem Netzwerk m\u00fcssen mit PowerShell interagieren.<\/li>\n\n\n\n<li><strong>Einfaches Testen:<\/strong> Sie m\u00f6chten Werkzeuge wie <code class=\"\" data-line=\"\">curl<\/code>, Postman oder <code class=\"\" data-line=\"\">Invoke-RestMethod<\/code> zum Senden von Befehlen verwenden.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Einfach ausgedr\u00fcckt:<\/strong> W\u00e4hlen Sie HTTP, wenn sich zwischen dem Client und dem Server ein <strong>Netzwerk<\/strong> befindet.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Wann sollte der STDIO-Modus verwendet werden?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Modus ist ideal f\u00fcr eine <strong>lokale und sichere Integration<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Hauptszenario \u2013 Gemini CLI:<\/strong> Das <code class=\"\" data-line=\"\">gemini-cli<\/code>-Werkzeug startet <code class=\"\" data-line=\"\">mcp-powershell-stdio.ps1<\/code> als untergeordneten Prozess und kommuniziert direkt \u00fcber die Standard-Ein-\/Ausgabestr\u00f6me mit ihm.<\/li>\n\n\n\n<li><strong>Integration mit anderen lokalen Anwendungen:<\/strong> Ihr Programm in Python, Node.js oder einer anderen Sprache kann den Server starten und verwalten, ohne Netzwerkports zu \u00f6ffnen.<\/li>\n\n\n\n<li><strong>Erh\u00f6hte Sicherheit:<\/strong> Da keine Netzwerkports ge\u00f6ffnet werden, ist diese Methode standardm\u00e4\u00dfig sicherer.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Einfach ausgedr\u00fcckt:<\/strong> W\u00e4hlen Sie STDIO, wenn sich Client und Server <strong>auf derselben Maschine<\/strong> befinden und der Client den Server selbst startet.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Vergleichstabelle<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Merkmal<\/th><th class=\"has-text-align-left\" data-align=\"left\">HTTP-Modus (<code class=\"\" data-line=\"\">mcp-powershell-http.ps1<\/code>)<\/th><th class=\"has-text-align-left\" data-align=\"left\">STDIO-Modus (<code class=\"\" data-line=\"\">mcp-powershell-stdio.ps1<\/code>)<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Hauptszenario<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Netzwerkkommunikation, Web-API<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lokale Integration mit CLI-Werkzeugen<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Kommunikationstyp<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Client-Server \u00fcber das Netzwerk (TCP\/IP)<\/td><td class=\"has-text-align-left\" data-align=\"left\">Interprozesskommunikation (IPC)<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Standort<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Client und Server k\u00f6nnen sich auf unterschiedlichen Maschinen befinden<\/td><td class=\"has-text-align-left\" data-align=\"left\">Client und Server <strong>m\u00fcssen<\/strong> sich auf derselben Maschine befinden<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Sicherheit<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Erfordert Aufmerksamkeit (Portzugriff, Firewall)<\/td><td class=\"has-text-align-left\" data-align=\"left\">Standardm\u00e4\u00dfig sicherer (keine offenen Ports)<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Typische Clients<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">curl<\/code>, Postman, Webanwendungen, Remote-Skripte<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">gemini-cli<\/code>, lokale Wrapper-Anwendungen<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Funktionen<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 Unterst\u00fctzung f\u00fcr das MCP-Protokoll Version 2024-11-05<\/li>\n\n\n\n<li>\u2705 Zwei Betriebsmodi: STDIO und HTTP<\/li>\n\n\n\n<li>\u2705 Isolierung der Skriptausf\u00fchrung in separaten PowerShell-Prozessen<\/li>\n\n\n\n<li>\u2705 Konfigurierbare Ausf\u00fchrungs-Timeouts<\/li>\n\n\n\n<li>\u2705 Detaillierte Protokollierung aller Vorg\u00e4nge<\/li>\n\n\n\n<li>\u2705 Behandlung von PowerShell-Fehlern und -Warnungen<\/li>\n\n\n\n<li>\u2705 Unterst\u00fctzung f\u00fcr Skriptparameter<\/li>\n\n\n\n<li>\u2705 Konfigurierbares Arbeitsverzeichnis<\/li>\n\n\n\n<li>\u2705 Automatische Launcher zur Vereinfachung des Starts<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Systemanforderungen<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PowerShell 7.0 oder neuer<\/li>\n\n\n\n<li>Windows 10\/11 oder Windows Server 2019+<\/li>\n\n\n\n<li>.NET 6.0 oder neuer<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Projektstruktur<\/h2>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">mcp-powershell-server\/\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 clients\/           # Client-Anwendungen\n\u2502   \u2502   \u251c\u2500\u2500 node\/         # Node.js-Client\n\u2502   \u2502   \u251c\u2500\u2500 powershell\/   # PowerShell-Client\n\u2502   \u2502   \u2514\u2500\u2500 python\/       # Python-Client\n\u2502   \u2514\u2500\u2500 servers\/          # Server-Komponenten\n\u2502       \u251c\u2500\u2500 mcp-powershell-stdio.ps1   # STDIO-Version des Servers\n\u2502       \u251c\u2500\u2500 mcp-powershell-http.ps1    # HTTP-Version des Servers\n\u2502       \u251c\u2500\u2500 test-mcp.ps1               # Testserver\n\u2502       \u2514\u2500\u2500 config.json                # Konfigurationsdatei\n\u251c\u2500\u2500 docs\/                 # Dokumentation\n\u251c\u2500\u2500 README.md            # Diese Datei\n\u2514\u2500\u2500 how-to-use.md        # Detaillierte Anleitung<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Schnellstart<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">STDIO-Modus (f\u00fcr gemini-cli)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Server starten:<\/strong><br><code class=\"\" data-line=\"\">powershell .\\src\\servers\\mcp-powershell-stdio.ps1<\/code><\/li>\n\n\n\n<li><strong>Testen:<\/strong><br><code class=\"\" data-line=\"\">powershell .\\src\\servers\\test-mcp.ps1<\/code><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">HTTP-Modus<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Grundlegender Start:<\/strong><br><code class=\"\" data-line=\"\">powershell .\\src\\servers\\mcp-powershell-http.ps1<\/code><\/li>\n\n\n\n<li><strong>Mit benutzerdefinierten Parametern:<\/strong><br><code class=\"\" data-line=\"\">powershell .\\src\\servers\\mcp-powershell-http.ps1 -Port 9090 -ServerHost &quot;0.0.0.0&quot;<\/code><\/li>\n\n\n\n<li><strong>Mit Konfigurationsdatei:<\/strong><br><code class=\"\" data-line=\"\">powershell .\\src\\servers\\mcp-powershell-http.ps1 -ConfigFile &quot;.\\src\\servers\\config.json&quot;<\/code><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Verf\u00fcgbare MCP-Werkzeuge<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><code class=\"\" data-line=\"\">run-script<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fchrt ein PowerShell-Skript mit den angegebenen Parametern aus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Parameter:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">script<\/code> (erforderlich) &#8211; Auszuf\u00fchrender PowerShell-Code<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">parameters<\/code> (optional) &#8211; Hashtabelle mit Parametern<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">workingDirectory<\/code> (optional) &#8211; Arbeitsverzeichnis<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">timeoutSeconds<\/code> (optional) &#8211; Ausf\u00fchrungs-Timeout (1-3600 Sek.)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Anwendungsbeispiel \u00fcber MCP:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;name&quot;: &quot;run-script&quot;,\n  &quot;arguments&quot;: {\n    &quot;script&quot;: &quot;Get-Process | Select-Object -First 5 | Format-Table&quot;,\n    &quot;workingDirectory&quot;: &quot;C:\\\\&quot;,\n    &quot;timeoutSeconds&quot;: 30\n  }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Konfiguration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der Server unterst\u00fctzt die Konfiguration \u00fcber die Datei <code class=\"\" data-line=\"\">config.json<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;Port&quot;: 8090,\n  &quot;Host&quot;: &quot;localhost&quot;,\n  &quot;MaxConcurrentRequests&quot;: 10,\n  &quot;TimeoutSeconds&quot;: 300,\n  &quot;AllowedPaths&quot;: &#091;\n    &quot;C:\\\\Scripts\\\\&quot;,\n    &quot;C:\\\\Tools\\\\&quot;\n  ],\n  &quot;Security&quot;: {\n    &quot;EnableScriptValidation&quot;: true,\n    &quot;BlockDangerousCommands&quot;: true,\n    &quot;RestrictedCommands&quot;: &#091;\n      &quot;Remove-Item&quot;,\n      &quot;Format-Volume&quot;,\n      &quot;Stop-Computer&quot;,\n      &quot;Restart-Computer&quot;\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Sicherheit<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Die Skriptausf\u00fchrung erfolgt in isolierten PowerShell-Prozessen<\/li>\n\n\n\n<li>Unterst\u00fctzung einer Liste verbotener Befehle<\/li>\n\n\n\n<li>Begrenzung der Ausf\u00fchrungszeit<\/li>\n\n\n\n<li>Protokollierung aller ausgef\u00fchrten Befehle<\/li>\n\n\n\n<li>M\u00f6glichkeit zur Einschr\u00e4nkung der verf\u00fcgbaren Pfade<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Protokollierung (Logging)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>STDIO-Modus<\/strong>: Protokolle werden in <code class=\"\" data-line=\"\">%TEMP%\\mcp-powershell-server.log<\/code> geschrieben<\/li>\n\n\n\n<li><strong>HTTP-Modus<\/strong>: Protokolle werden in der Konsole mit farblicher Hervorhebung ausgegeben<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Protokollstufen: DEBUG, INFO, WARNING, ERROR<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Integration mit KI-Assistenten<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Gemini CLI<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">gemini --mcp-config &quot;path\/to\/mcp_servers.json&quot; -m gemini-2.5-pro -p &quot;Zeige die ersten 5 Prozesse im System an&quot;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Andere MCP-Clients<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Der Server ist mit allen Clients kompatibel, die das MCP-Protokoll 2024-11-05 unterst\u00fctzen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fehlerbehebung<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">H\u00e4ufige Probleme<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Port belegt<\/strong>: \u00c4ndern Sie den Port in der Konfiguration oder beenden Sie den Prozess, der den Port verwendet.<\/li>\n\n\n\n<li><strong>Zugriffsrechte<\/strong>: Das Ausf\u00fchren auf privilegierten Ports (<1024) erfordert Administratorrechte.<\/li>\n\n\n\n<li><strong>Zeichenkodierung<\/strong>: Stellen Sie sicher, dass PowerShell auf UTF-8 konfiguriert ist.<\/li>\n\n\n\n<li><strong>PowerShell-Version<\/strong>: PowerShell 7+ ist erforderlich.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Diagnose<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00dcberpr\u00fcfen Sie die Serverprotokolle zur Problemdiagnose:<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">Get-Content &quot;$env:TEMP\\mcp-powershell-server.log&quot; -Tail 20<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Entwicklung und Erweiterung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der Server kann leicht um neue MCP-Werkzeuge erweitert werden. Siehe <code class=\"\" data-line=\"\">how-to-use.md<\/code> f\u00fcr detaillierte Entwicklungsanweisungen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lizenz<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dieses Projekt wird unter der MIT-Lizenz vertrieben. Siehe die LICENSE-Datei f\u00fcr Details.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Support<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Erstellen Sie ein &#8222;Issue&#8220; im GitHub-Repository.<\/li>\n\n\n\n<li>\u00dcberpr\u00fcfen Sie die Dokumentation in <code class=\"\" data-line=\"\">how-to-use.md<\/code>.<\/li>\n\n\n\n<li>Sehen Sie sich die Anwendungsbeispiele an.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Versionen<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>1.0.0<\/strong> &#8211; Erstversion mit Unterst\u00fctzung f\u00fcr STDIO- und HTTP-Modi.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ein MCP (Model Context Protocol) Server zur Ausf\u00fchrung von PowerShell-Skripten, der sowohl den HTTP- als auch den STDIO-Betriebsmodus unterst\u00fctzt.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-3466","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts\/3466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/comments?post=3466"}],"version-history":[{"count":0,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts\/3466\/revisions"}],"wp:attachment":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/media?parent=3466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/categories?post=3466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/tags?post=3466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}