{"id":3477,"date":"2025-09-26T14:49:09","date_gmt":"2025-09-26T12:49:09","guid":{"rendered":"https:\/\/davidka.net\/ru\/?p=3477"},"modified":"2025-09-26T20:07:45","modified_gmt":"2025-09-26T18:07:45","slug":"mcp-powershell-server-how-to-use","status":"publish","type":"post","link":"https:\/\/de.davidka.net\/de\/2025\/09\/26\/mcp-powershell-server-how-to-use\/","title":{"rendered":"Detaillierte Anleitung zur Verwendung des MCP PowerShell Servers. (how-to-use.md)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Installation und Einrichtung<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Voraussetzungen<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>PowerShell 7.0+<\/strong> <code class=\"\" data-line=\"\"># \u00dcberpr\u00fcfung der PowerShell-Version $PSVersionTable.PSVersion # Installation von PowerShell 7 (falls erforderlich) # Download von https:\/\/github.com\/PowerShell\/PowerShell<\/code><\/li>\n\n\n\n<li><strong>Zugriffsrechte<\/strong>\n<ul class=\"wp-block-list\">\n<li>F\u00fcr Ports < 1024 sind Administratorrechte erforderlich.<\/li>\n\n\n\n<li>Berechtigungen zur Ausf\u00fchrung von PowerShell-Skripten.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Konfiguration der Ausf\u00fchrungsrichtlinie (Execution Policy)<\/strong> <code class=\"\" data-line=\"\"># \u00dcberpr\u00fcfung der aktuellen Richtlinie Get-ExecutionPolicy # Festlegen der Richtlinie, um die Ausf\u00fchrung von Skripten zu erlauben Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser<\/code><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Erstmalige Einrichtung<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navigation zum Serververzeichnis<\/strong> <code class=\"\" data-line=\"\"># Wechsel in das Stammverzeichnis des Moduls cd C:\\powershell\\modules\\mcp-powershell-server # Wechsel zu den Servern cd src\\servers<\/code><\/li>\n\n\n\n<li><strong>\u00dcberpr\u00fcfung der Dateien<\/strong><br><code class=\"\" data-line=\"\">powershell # Stellen Sie sicher, dass alle notwendigen Dateien vorhanden sind Get-ChildItem *.ps1 | Select-Object Name<\/code><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Wahl des Betriebsmodus: HTTP vs. STDIO<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bevor wir ins Detail gehen, ist es wichtig zu verstehen, welcher der beiden Betriebsmodi des Servers f\u00fcr Sie geeignet ist. Die Wahl h\u00e4ngt davon ab, <strong>wie und von wo<\/strong> Sie Befehle senden m\u00f6chten.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>HTTP-Modus (<code class=\"\" data-line=\"\">mcp-powershell-http.ps1<\/code>)<\/strong>: Funktioniert wie ein <strong>Webservice<\/strong>. Er nimmt Befehle \u00fcber das Netzwerk (HTTP) entgegen und kann von anderen Computern oder aus Webanwendungen heraus aufgerufen werden. Dies ist eine universelle Methode f\u00fcr Netzwerkintegrationen.<\/li>\n\n\n\n<li><strong>STDIO-Modus (<code class=\"\" data-line=\"\">mcp-powershell-stdio.ps1<\/code>)<\/strong>: Funktioniert wie eine <strong>Konsolenanwendung<\/strong>, die von einem anderen Prozess gesteuert wird. Er empf\u00e4ngt Befehle \u00fcber den Standard-Eingabestrom (Standard Input) und gibt das Ergebnis \u00fcber den Standard-Ausgabestrom (Standard Output) zur\u00fcck. Diese Methode ist ideal f\u00fcr die lokale Integration, zum Beispiel mit <code class=\"\" data-line=\"\">gemini-cli<\/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\">W\u00e4hlen Sie HTTP, wenn Sie <strong>Netzwerkzugriff<\/strong> ben\u00f6tigen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Fernverwaltung:<\/strong> Die Client-Anwendung (z. B. ein Python-Skript) befindet sich auf einem <strong>anderen Computer<\/strong>.<\/li>\n\n\n\n<li><strong>Web-Integration:<\/strong> Sie m\u00f6chten PowerShell aus einem Web-Panel aufrufen, indem Sie Anfragen mit JavaScript senden.<\/li>\n\n\n\n<li><strong>Microservice-Architektur:<\/strong> Verschiedene Dienste in Ihrem Netzwerk m\u00fcssen Befehle austauschen.<\/li>\n\n\n\n<li><strong>Einfaches Testen:<\/strong> Sie m\u00f6chten Befehle mit Werkzeugen wie <code class=\"\" data-line=\"\">curl<\/code> oder Postman senden.<\/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>Schl\u00fcsselszenario:<\/strong> Client und Server befinden sich in einem Netzwerk und kommunizieren \u00fcber Standard-Webprotokolle.<\/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\">W\u00e4hlen Sie STDIO f\u00fcr eine <strong>lokale und sicherere Integration<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Integration mit Gemini CLI:<\/strong> Dies ist das <strong>Haupt-<\/strong> und h\u00e4ufigste Szenario. <code class=\"\" data-line=\"\">gemini-cli<\/code> startet <code class=\"\" data-line=\"\">mcp-powershell-stdio.ps1<\/code> als untergeordneten Prozess und kommuniziert direkt mit ihm.<\/li>\n\n\n\n<li><strong>Lokale Wrapper-Skripte:<\/strong> Ihre Anwendung in einer anderen Sprache (z. B. Node.js) startet den PowerShell-Server als untergeordneten Prozess und verwaltet ihn.<\/li>\n\n\n\n<li><strong>Erh\u00f6hte Sicherheit:<\/strong> Dieser Modus \u00f6ffnet keine Netzwerkports, was eine ganze Klasse von Netzwerkbedrohungen ausschlie\u00dft.<\/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>Schl\u00fcsselszenario:<\/strong> Client und Server laufen auf <strong>derselben Maschine<\/strong>, und der Client verwaltet den Lebenszyklus des Servers selbst.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Nachdem Sie sich f\u00fcr einen Modus entschieden haben, gehen Sie zum entsprechenden Abschnitt unten, um detaillierte Anweisungen zum Starten und Verwenden zu erhalten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">STDIO-Modus<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der STDIO-Modus ist f\u00fcr die Integration mit MCP-Clients wie <code class=\"\" data-line=\"\">gemini-cli<\/code> vorgesehen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Starten des STDIO-Servers<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Direkter Start des Servers (aus dem Ordner src\/servers)\n.\\mcp-powershell-stdio.ps1\n\n# Oder aus dem Projektstammverzeichnis\n.\\src\\servers\\mcp-powershell-stdio.ps1<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Merkmale des STDIO-Modus<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Protokoll<\/strong>: JSON-RPC \u00fcber Standard-Ein-\/Ausgabestr\u00f6me<\/li>\n\n\n\n<li><strong>Protokollierung<\/strong>: In die Datei <code class=\"\" data-line=\"\">%TEMP%\\mcp-powershell-server.log<\/code><\/li>\n\n\n\n<li><strong>Zeichenkodierung<\/strong>: UTF-8 f\u00fcr die korrekte Verarbeitung von Sonderzeichen<\/li>\n\n\n\n<li><strong>Kompatibilit\u00e4t<\/strong>: Funktioniert mit allen MCP-Clients<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Testen des STDIO-Modus<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Starten des Testservers zur \u00dcberpr\u00fcfung (aus dem Ordner src\/servers)\n.\\test-mcp.ps1\n\n# Oder aus dem Projektstammverzeichnis\n.\\src\\servers\\test-mcp.ps1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Beispiel f\u00fcr manuelle Tests:<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;id&quot;:1,&quot;method&quot;:&quot;initialize&quot;,&quot;params&quot;:{&quot;protocolVersion&quot;:&quot;2024-11-05&quot;}}\n{&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;id&quot;:2,&quot;method&quot;:&quot;tools\/list&quot;}\n{&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;id&quot;:3,&quot;method&quot;:&quot;tools\/call&quot;,&quot;params&quot;:{&quot;name&quot;:&quot;run-script&quot;,&quot;arguments&quot;:{&quot;script&quot;:&quot;Get-Date&quot;}}}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">HTTP-Modus<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der HTTP-Modus ist f\u00fcr Web-Integrationen und REST-APIs vorgesehen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Starten des HTTP-Servers<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Grundlegender Start (localhost:8090) aus dem Ordner src\/servers\n.\\mcp-powershell-http.ps1\n\n# Start auf einem anderen Port\n.\\mcp-powershell-http.ps1 -Port 9090\n\n# Start auf allen Netzwerkschnittstellen\n.\\mcp-powershell-http.ps1 -ServerHost &quot;0.0.0.0&quot; -Port 8080\n\n# Start mit einer Konfigurationsdatei\n.\\mcp-powershell-http.ps1 -ConfigFile &quot;config.json&quot;\n\n# Oder aus dem Projektstammverzeichnis\n.\\src\\servers\\mcp-powershell-http.ps1 -Port 8090<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">HTTP-API-Endpunkte<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Alle Anfragen werden als <code class=\"\" data-line=\"\">POST<\/code> an die Stamm-URL des Servers gesendet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>URL<\/strong>: <code class=\"\" data-line=\"\">http:\/\/localhost:8090\/<\/code><br><strong>Methode<\/strong>: <code class=\"\" data-line=\"\">POST<\/code><br><strong>Content-Type<\/strong>: <code class=\"\" data-line=\"\">application\/json<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testen des HTTP-Modus<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Test mit Invoke-RestMethod\n$body = @{\n    jsonrpc = &quot;2.0&quot;\n    id = 1\n    method = &quot;tools\/list&quot;\n} | ConvertTo-Json\n\nInvoke-RestMethod -Uri &quot;http:\/\/localhost:8090\/&quot; -Method POST -Body $body -ContentType &quot;application\/json&quot;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Test mit curl\ncurl -X POST http:\/\/localhost:8090\/ \\\n  -H &quot;Content-Type: application\/json&quot; \\\n  -d &#039;{&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;id&quot;:1,&quot;method&quot;:&quot;tools\/list&quot;}&#039;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Integration mit Gemini CLI<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Automatische Einrichtung<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Start mit automatischer Einrichtung f\u00fcr Gemini CLI\n.\\start-mcp-with-gemini.ps1 -ApiKey &quot;ihr-gemini-api-schluessel&quot;\n\n# Mit zus\u00e4tzlichen Parametern\n.\\start-mcp-with-gemini.ps1 -ApiKey &quot;ihr-schluessel&quot; -ServerPort 9090 -Wait 15<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Manuelle Einrichtung<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Erstellen der MCP-Konfiguration<\/strong> <code class=\"\" data-line=\"\"># Erstellen des Konfigurationsverzeichnisses $configDir = &quot;$env:USERPROFILE\\.config\\gemini&quot; New-Item -Path $configDir -ItemType Directory -Force # Erstellen der MCP-Konfigurationsdatei $config = @{ mcpServers = @{ powershell = @{ command = &quot;pwsh&quot; args = @(&quot;-File&quot;, &quot;C:\\pfad\\zu\\mcp-powershell-stdio.ps1&quot;) env = @{} } } } | ConvertTo-Json -Depth 5 $config | Set-Content &quot;$configDir\\mcp_servers.json&quot; -Encoding UTF8<\/code><\/li>\n\n\n\n<li><strong>Verwendung mit gemini-cli<\/strong> <code class=\"\" data-line=\"\"># Interaktiver Modus gemini --mcp-config &quot;pfad\/zu\/mcp_servers.json&quot; -i # Einzelne Anfrage gemini --mcp-config &quot;pfad\/zu\/mcp_servers.json&quot; -m gemini-2.5-pro -p &quot;F\u00fchre den Befehl Get-Process | Select-Object -First 5 aus&quot;<\/code><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Anwendungsbeispiele<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Grundlegende PowerShell-Befehle<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 1,\n  &quot;method&quot;: &quot;tools\/call&quot;,\n  &quot;params&quot;: {\n    &quot;name&quot;: &quot;run-script&quot;,\n    &quot;arguments&quot;: {\n      &quot;script&quot;: &quot;Get-ComputerInfo | Select-Object WindowsProductName, TotalPhysicalMemory&quot;\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Arbeiten mit Dateien<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 2,\n  &quot;method&quot;: &quot;tools\/call&quot;,\n  &quot;params&quot;: {\n    &quot;name&quot;: &quot;run-script&quot;,\n    &quot;arguments&quot;: {\n      &quot;script&quot;: &quot;Get-ChildItem C:\\\\ -Directory | Select-Object Name, CreationTime | Format-Table&quot;,\n      &quot;workingDirectory&quot;: &quot;C:\\\\&quot;,\n      &quot;timeoutSeconds&quot;: 30\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Skripte mit Parametern<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 3,\n  &quot;method&quot;: &quot;tools\/call&quot;,\n  &quot;params&quot;: {\n    &quot;name&quot;: &quot;run-script&quot;,\n    &quot;arguments&quot;: {\n      &quot;script&quot;: &quot;param($ProcessName) Get-Process -Name $ProcessName -ErrorAction SilentlyContinue&quot;,\n      &quot;parameters&quot;: {\n        &quot;ProcessName&quot;: &quot;notepad&quot;\n      }\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">System\u00fcberwachung<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 4,\n  &quot;method&quot;: &quot;tools\/call&quot;,\n  &quot;params&quot;: {\n    &quot;name&quot;: &quot;run-script&quot;,\n    &quot;arguments&quot;: {\n      &quot;script&quot;: &quot;$cpu = Get-Counter &#039;\\\\Processor(_Total)\\\\% Processor Time&#039; | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue; $memory = Get-Counter &#039;\\\\Memory\\\\Available MBytes&#039; | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue; Write-Output \\&quot;CPU: $(&#091;math]::Round($cpu, 2))%, Available Memory: $memory MB\\&quot;&quot;\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Konfiguration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Die Datei <code class=\"\" data-line=\"\">config.json<\/code><\/h3>\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;LogLevel&quot;: &quot;INFO&quot;,\n  &quot;AllowedPaths&quot;: &#091;\n    &quot;C:\\\\Scripts\\\\&quot;,\n    &quot;C:\\\\Tools\\\\&quot;,\n    &quot;C:\\\\Temp\\\\&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      &quot;New-ItemProperty -Path &#039;HKLM:*&#039;&quot;,\n      &quot;Remove-ItemProperty -Path &#039;HKLM:*&#039;&quot;\n    ],\n    &quot;AllowedModules&quot;: &#091;\n      &quot;Microsoft.PowerShell.*&quot;,\n      &quot;PackageManagement&quot;,\n      &quot;PowerShellGet&quot;\n    ]\n  },\n  &quot;Logging&quot;: {\n    &quot;LogFile&quot;: &quot;%TEMP%\\\\mcp-powershell-server.log&quot;,\n    &quot;MaxLogSize&quot;: &quot;10MB&quot;,\n    &quot;LogRotation&quot;: true\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Umgebungsvariablen<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Konfiguration \u00fcber Umgebungsvariablen\n$env:MCP_PS_PORT = &quot;8090&quot;\n$env:MCP_PS_HOST = &quot;localhost&quot;\n$env:MCP_PS_TIMEOUT = &quot;300&quot;\n$env:MCP_PS_LOG_LEVEL = &quot;INFO&quot;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Sicherheit<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Sicherheitsempfehlungen<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Befehlseinschr\u00e4nkung<\/strong><br><code class=\"\" data-line=\"\">json &quot;RestrictedCommands&quot;: [ &quot;Remove-Item&quot;, &quot;Format-Volume&quot;, &quot;Stop-Computer&quot;, &quot;Restart-Computer&quot;, &quot;Invoke-Expression&quot;, &quot;iex&quot;, &quot;&amp; *&quot; ]<\/code><\/li>\n\n\n\n<li><strong>Pfadeinschr\u00e4nkung<\/strong><br><code class=\"\" data-line=\"\">json &quot;AllowedPaths&quot;: [ &quot;C:\\\\Scripts\\\\&quot;, &quot;C:\\\\Tools\\\\&quot;, &quot;C:\\\\Temp\\\\&quot; ]<\/code><\/li>\n\n\n\n<li><strong>Netzwerkeinschr\u00e4nkungen<\/strong><br><code class=\"\" data-line=\"\">powershell # Zugriff nur auf den lokalen Host beschr\u00e4nken .\\start-mcp-server.ps1 -ServerHost &quot;127.0.0.1&quot;<\/code><\/li>\n\n\n\n<li><strong>Timeouts<\/strong><br><code class=\"\" data-line=\"\">json &quot;TimeoutSeconds&quot;: 60 \/\/ Ausf\u00fchrungszeit begrenzen<\/code><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u00dcberwachung und Protokollierung<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Protokolle in Echtzeit \u00fcberwachen\nGet-Content &quot;$env:TEMP\\mcp-powershell-server.log&quot; -Wait -Tail 10\n\n# Ausgef\u00fchrte Befehle analysieren\nSelect-String -Path &quot;$env:TEMP\\mcp-powershell-server.log&quot; -Pattern &quot;F\u00fchre PowerShell-Skript aus&quot;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Erweiterung der Funktionalit\u00e4t<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Hinzuf\u00fcgen neuer MCP-Werkzeuge<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Struktur des Werkzeugs<\/strong> <code class=\"\" data-line=\"\"># F\u00fcgen Sie in der Funktion Invoke-MCPMethod einen neuen case hinzu &quot;mein-benutzerdefiniertes-werkzeug&quot; { # Parameter validieren if (-not $arguments.ContainsKey(&quot;erforderlicher_param&quot;)) { return New-MCPResponse -Id $Id -Error @{ code = -32602 message = &quot;Fehlender erforderlicher Parameter &#039;erforderlicher_param&#039;&quot; } }# Ausf\u00fchrungslogik $result = Invoke-MeineEigeneFunktion -Param $arguments.erforderlicher_param # Ergebnis zur\u00fcckgeben return New-MCPResponse -Id $Id -Result @{ content = @( @{ type = &quot;text&quot; text = &quot;Ergebnis: $result&quot; } ) }}<\/code><\/li>\n\n\n\n<li><strong>Registrierung in <code class=\"\" data-line=\"\">tools\/list<\/code><\/strong><br><code class=\"\" data-line=\"\">powershell # F\u00fcgen Sie die Beschreibung des Werkzeugs zur Methode tools\/list hinzu @{ name = &quot;mein-benutzerdefiniertes-werkzeug&quot; description = &quot;Beschreibung meines Werkzeugs&quot; inputSchema = @{ type = &quot;object&quot; properties = @{ erforderlicher_param = @{ type = &quot;string&quot; description = &quot;Ein erforderlicher Parameter&quot; } } required = @(&quot;erforderlicher_param&quot;) } }<\/code><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Beispiel f\u00fcr ein benutzerdefiniertes Werkzeug<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Hinzuf\u00fcgen eines Werkzeugs zur Abfrage der Registrierung\n&quot;registry-query&quot; {\n    if (-not $arguments.ContainsKey(&quot;path&quot;)) {\n        return New-MCPResponse -Id $Id -Error @{\n            code = -32602\n            message = &quot;Fehlender erforderlicher Parameter &#039;path&#039;&quot;\n        }\n    }\n\n    try {\n        $regPath = $arguments.path\n        $regKey = Get-ItemProperty -Path $regPath -ErrorAction Stop\n        $result = $regKey | Format-List | Out-String\n\n        return New-MCPResponse -Id $Id -Result @{\n            content = @(\n                @{\n                    type = &quot;text&quot;\n                    text = &quot;Registrierungswerte unter ${regPath}:`n$result&quot;\n                }\n            )\n        }\n    }\n    catch {\n        return New-MCPResponse -Id $Id -Error @{\n            code = -32603\n            message = &quot;Registrierungsabfrage fehlgeschlagen: $($_.Exception.Message)&quot;\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Fehlerbehebung<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Diagnosebefehle<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># PowerShell-Version \u00fcberpr\u00fcfen\n$PSVersionTable.PSVersion\n\n# Portverf\u00fcgbarkeit pr\u00fcfen\nTest-NetConnection -ComputerName localhost -Port 8090\n\n# Protokolle \u00fcberpr\u00fcfen\nGet-Content &quot;$env:TEMP\\mcp-powershell-server.log&quot; -Tail 50\n\n# PowerShell-Prozesse \u00fcberpr\u00fcfen\nGet-Process -Name pwsh*<\/code><\/pre>\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>&#8222;Port wird bereits verwendet&#8220;<\/strong> <code class=\"\" data-line=\"\"># Prozess finden, der den Port verwendet Get-NetTCPConnection -LocalPort 8090 | Get-Process # Oder einen anderen Port verwenden .\\start-mcp-server.ps1 -Port 9090<\/code><\/li>\n\n\n\n<li><strong>&#8222;Zugriff verweigert&#8220;<\/strong><br><code class=\"\" data-line=\"\">powershell # Mit Administratorrechten f\u00fcr Ports &lt; 1024 starten Start-Process pwsh -Verb RunAs -ArgumentList &quot;-File&quot;, &quot;start-mcp-server.ps1&quot;<\/code><\/li>\n\n\n\n<li><strong>&#8222;Probleme mit der Zeichenkodierung&#8220;<\/strong> <code class=\"\" data-line=\"\"># Konsolenkodierung \u00fcberpr\u00fcfen [Console]::OutputEncoding [Console]::InputEncoding # UTF-8 erzwingen [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::InputEncoding = [System.Text.Encoding]::UTF8<\/code><\/li>\n\n\n\n<li><strong>&#8222;Skript wird nicht ausgef\u00fchrt&#8220;<\/strong> <code class=\"\" data-line=\"\"># Ausf\u00fchrungsrichtlinie \u00fcberpr\u00fcfen Get-ExecutionPolicy -List # Vor\u00fcbergehend erlauben powershell.exe -ExecutionPolicy Bypass -File &quot;script.ps1&quot;<\/code><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Debugging<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Detaillierte Protokollierung aktivieren\n$DebugPreference = &quot;Continue&quot;\n\n# Skriptausf\u00fchrung verfolgen\nSet-PSDebug -Trace 1\n\n# Verfolgung deaktivieren\nSet-PSDebug -Off<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">API-Referenz<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">MCP-Methoden<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><code class=\"\" data-line=\"\">initialize<\/code><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Initialisiert den MCP-Server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Anfrage (Request):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 1,\n  &quot;method&quot;: &quot;initialize&quot;,\n  &quot;params&quot;: {\n    &quot;protocolVersion&quot;: &quot;2024-11-05&quot;\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Antwort (Response):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 1,\n  &quot;result&quot;: {\n    &quot;protocolVersion&quot;: &quot;2024-11-05&quot;,\n    &quot;capabilities&quot;: {\n      &quot;tools&quot;: {\n        &quot;listChanged&quot;: true\n      }\n    },\n    &quot;serverInfo&quot;: {\n      &quot;name&quot;: &quot;PowerShell Script Runner&quot;,\n      &quot;version&quot;: &quot;1.0.0&quot;,\n      &quot;description&quot;: &quot;F\u00fchrt PowerShell-Skripte \u00fcber MCP aus&quot;\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><code class=\"\" data-line=\"\">tools\/list<\/code><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Ruft die Liste der verf\u00fcgbaren Werkzeuge ab.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Anfrage (Request):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 2,\n  &quot;method&quot;: &quot;tools\/list&quot;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Antwort (Response):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 2,\n  &quot;result&quot;: {\n    &quot;tools&quot;: &#091;\n      {\n        &quot;name&quot;: &quot;run-script&quot;,\n        &quot;description&quot;: &quot;F\u00fchrt ein PowerShell-Skript mit angegebenen Parametern aus&quot;,\n        &quot;inputSchema&quot;: {\n          &quot;type&quot;: &quot;object&quot;,\n          &quot;properties&quot;: {\n            &quot;script&quot;: {\n              &quot;type&quot;: &quot;string&quot;,\n              &quot;description&quot;: &quot;Auszuf\u00fchrender PowerShell-Code&quot;\n            },\n            &quot;parameters&quot;: {\n              &quot;type&quot;: &quot;object&quot;,\n              &quot;description&quot;: &quot;Parameter f\u00fcr das Skript (optional)&quot;\n            },\n            &quot;workingDirectory&quot;: {\n              &quot;type&quot;: &quot;string&quot;,\n              &quot;description&quot;: &quot;Arbeitsverzeichnis f\u00fcr die Ausf\u00fchrung&quot;\n            },\n            &quot;timeoutSeconds&quot;: {\n              &quot;type&quot;: &quot;integer&quot;,\n              &quot;description&quot;: &quot;Ausf\u00fchrungs-Timeout in Sekunden&quot;,\n              &quot;default&quot;: 300,\n              &quot;minimum&quot;: 1,\n              &quot;maximum&quot;: 3600\n            }\n          },\n          &quot;required&quot;: &#091;&quot;script&quot;]\n        }\n      }\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><code class=\"\" data-line=\"\">tools\/call<\/code><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fchrt ein Werkzeug aus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Anfrage (Request):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 3,\n  &quot;method&quot;: &quot;tools\/call&quot;,\n  &quot;params&quot;: {\n    &quot;name&quot;: &quot;run-script&quot;,\n    &quot;arguments&quot;: {\n      &quot;script&quot;: &quot;Get-Date&quot;,\n      &quot;timeoutSeconds&quot;: 30\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Antwort (Response):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 3,\n  &quot;result&quot;: {\n    &quot;content&quot;: &#091;\n      {\n        &quot;type&quot;: &quot;text&quot;,\n        &quot;text&quot;: &quot;Befehlsausgabe:\\n```\\nDienstag, 25. September 2025 14:30:45\\n```&quot;\n      }\n    ],\n    &quot;isError&quot;: false,\n    &quot;_meta&quot;: {\n      &quot;executionTime&quot;: &quot;2025-09-25 14:30:45&quot;,\n      &quot;success&quot;: true,\n      &quot;errorCount&quot;: 0,\n      &quot;warningCount&quot;: 0\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Fehlercodes<\/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\">Code<\/th><th class=\"has-text-align-left\" data-align=\"left\">Beschreibung<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">-32700<\/td><td class=\"has-text-align-left\" data-align=\"left\">Parse error &#8211; Fehler beim Parsen von JSON<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">-32600<\/td><td class=\"has-text-align-left\" data-align=\"left\">Invalid Request &#8211; Ung\u00fcltige Anfrage<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">-32601<\/td><td class=\"has-text-align-left\" data-align=\"left\">Method not found &#8211; Methode nicht gefunden<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">-32602<\/td><td class=\"has-text-align-left\" data-align=\"left\">Invalid params &#8211; Ung\u00fcltige Parameter<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">-32603<\/td><td class=\"has-text-align-left\" data-align=\"left\">Internal error &#8211; Interner Serverfehler<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Protokollierungsstufen<\/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\">Stufe<\/th><th class=\"has-text-align-left\" data-align=\"left\">Beschreibung<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">DEBUG<\/td><td class=\"has-text-align-left\" data-align=\"left\">Detaillierte Debuginformationen<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">INFO<\/td><td class=\"has-text-align-left\" data-align=\"left\">Allgemeine Betriebsinformationen<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">WARNING<\/td><td class=\"has-text-align-left\" data-align=\"left\">Warnungen vor potenziellen Problemen<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">ERROR<\/td><td class=\"has-text-align-left\" data-align=\"left\">Fehler, die Aufmerksamkeit erfordern<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der MCP PowerShell Server bietet eine leistungsstarke und sichere M\u00f6glichkeit, PowerShell \u00fcber das standardisierte MCP-Protokoll in KI-Assistenten und andere Anwendungen zu integrieren. Befolgen Sie die Sicherheitsempfehlungen und verwenden Sie die Protokollierung, um den Betrieb des Servers zu \u00fcberwachen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Installation und Einrichtung Voraussetzungen Erstmalige Einrichtung Wahl des Betriebsmodus: HTTP vs. STDIO Bevor wir ins Detail gehen, ist es wichtig zu verstehen, welcher der beiden Betriebsmodi des Servers f\u00fcr Sie geeignet ist. Die Wahl h\u00e4ngt davon ab, wie und von wo Sie Befehle senden m\u00f6chten. Wann sollte der HTTP-Modus verwendet werden? W\u00e4hlen Sie HTTP, wenn&hellip;&nbsp;<\/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-3477","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts\/3477","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=3477"}],"version-history":[{"count":0,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts\/3477\/revisions"}],"wp:attachment":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/media?parent=3477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/categories?post=3477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/tags?post=3477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}