Skip to content

Instantly share code, notes, and snippets.

@BananaAcid
Last active November 7, 2025 02:25
Show Gist options
  • Select an option

  • Save BananaAcid/a678a47d00d17c278fb0da194f4171c0 to your computer and use it in GitHub Desktop.

Select an option

Save BananaAcid/a678a47d00d17c278fb0da194f4171c0 to your computer and use it in GitHub Desktop.
Powershell -- ask Google

Frage Google ...

... in purem Powershell

. .\ask.ai.google.ps1 -?

ask.ai.google.ps1 [-content] <string> [[-systemPrompt] <string>] [[-type] <string>] [[-model] <string>] [[-GEMINI_API_KEY] <string>]
arg default example desc
-content <string> (required) "Irgend ein Text-Prompt" Der Content der bearbeitet werden soll.
-system <string>
-systemPrompt <string>
(optional) "Du bist ein Übersetzer Agent. Übersetze nur eingegebenen Content." Was mit dem Content gemacht werden soll. Wird, wenn nicht angegeben, versucht aus ask.ai.prompts.ps1 geladen.
-model <string> "gemini-2.0-flash" "gemini-2.5-flash" Ein Google-LLM das verwendet werden soll.
-GEMINI_API_KEY <string> erst $env:GOOGLE_API_KEY dann $env:GEMINI_API_KEY AI.......-............... Eingabe des GEMINI API Keys - wenn nciht angegeben, werden die beiden System-Umgebungsvariablen getestet

Example

$env:GEMINI_API_KEY = "AI.......-..............."
. .\ask.ai.google.ps1 -content "Wie gehts dir?"
$env:GEMINI_API_KEY = "AI.......-..............."
. .\ask.ai.google.ps1 -content "Wie gehts dir?" -system "Übersetze den eingegebenen Text."
# Nabil Redmann - 2025-11-04
[CmdletBinding()]
param (
[string][Parameter(Mandatory=$true)]$content, # Inhalt kann an dieses Script übergeben werden
[string][Parameter(Mandatory=$false)]$systemPrompt, # Fallback zu .\ask.ai.prompts.ps1
# gemini-2.0-flash 1M tokens
# gemini-2.5-flash 250K tokens, öfters 'overloaded' (error: 503) --> gemini-2.0-flash nutzen
[string][Parameter(Mandatory=$false)]$model = "gemini-2.0-flash",
[string][Parameter(Mandatory=$false)]$GEMINI_API_KEY = ""
)
# Setze leeren API Key zu $null für vergleich
if ($GEMINI_API_KEY -like "") { $GEMINI_API_KEY = $null }
# erst checke argument, dann GOOGLE env, dann GEMINI env ( Powershell 7+ syntax: `??` )
$GEMINI_API_KEY = $GEMINI_API_KEY ?? $env:GOOGLE_API_KEY ?? $env:GEMINI_API_KEY
if (-not $GEMINI_API_KEY) { throw "⚠️ KEINEN GOOGLE/GEMINI API KEY GEFUNDEN! (-GEMINI_API_KEY oder `$env:GEMINI_API_KEY)" }
# importiere system prompt text, wenn kein argument gegeben
if (-not $systemPrompt) {
try {
# import ...
. .\ask.ai.prompts.ps1
if ($systemPrompt -like "") { Write-Warning "⚠️ KEINEN SYSTEM-PROMPT IN DATEI GEFUDNEN! (.\ask.ai.prompts.ps1)" }
}
catch { Write-Warning "⚠️ KEINE DATEI FÜR SYSTEM-PROMPT GEFUNDEN! (.\ask.ai.prompts.ps1)" }
}
# FREE API KEY: https://aistudio.google.com/apikey
$url = "https://generativelanguage.googleapis.com/v1beta/models/" + $model + ":generateContent" # +"?key="+$GEMINI_API_KEY - or x-goog-api-key
$headers = @{
"Content-Type" = "application/json"
"x-goog-api-key" = $GEMINI_API_KEY
}
$body = @{
"system_instruction" = @{
"parts" = @( @{"text" = $systemPrompt} )
}
"contents" = @(
@{"role" = "user"; "parts" = @( @{ "text" = $content; } ) }
# image: nwuer content oder merge parts --- ref: https://ai.google.dev/api#content-generation
# $mimeType = "image/jpeg"
# $inline_base64_content = "...base64 encoded image..."
# ... "contents" = @{"role"="user"; "parts" = @( @{ "inline_data" = @{ "mime_type" = $mimeType; "data" = $inline_base64_content; } } )};
)
} | ConvertTo-Json -Depth 10
$response = Invoke-RestMethod -Uri $url -Method Post -Headers $headers -Body $body
$result = $response.candidates[0].content.parts[0].text
## Debug output:
# $result | Show-Markdown
return $result
$systemPrompt = @"
Du bist ein Übersetzungs-Agent.
Deine Aufgabe ist es den Eingangstext in die gewünschte Sprache (English) zu bringen.
Antworte ausschßlich mit dem Übersetzten Text, keine Kommentare oder sonstigen Informationen. Nur den Dateiinhalt.
"@
<#
Übersetze alle `*.md` Dateien in allen Unterverzeichnissen und erstelle neben der Orginalen immer eine mit `.new.md`
#>
$env:GEMINI_API_KEY = "AI.......-..............."
ls -r *.md |% {
echo $_.FullName;
$c = Get-Content $_.FullName -Raw;
. .\ask.ai.google.ps1 -content $c | Out-File -FilePath $($_.FullName + '.new.md')
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment