Powershell Skript erstellen und per Doppelklick ausführen lassen
Hallo zusammen,
würde gerne folgende Powershell Befehle nicht einzeln hintereinander eintippen sondern gleich ein Skript dafür haben, dass per Doppelklick ausgeführt werden kann:
"set-ExecutionPolicy
bypass
ja
New-Item -Name "Daten" -ItemType Directory -Path "C:\"
save-script –name get-windowsautopilotinfo –path c:\Daten
ja
cd c:\Daten
.\get-windowsautopilotinfo –outputfile .\AutoPilot.csv"
Vielleicht könnte mir hier ja jemand helfen.
Danke Euch.
lg
würde gerne folgende Powershell Befehle nicht einzeln hintereinander eintippen sondern gleich ein Skript dafür haben, dass per Doppelklick ausgeführt werden kann:
"set-ExecutionPolicy
bypass
ja
New-Item -Name "Daten" -ItemType Directory -Path "C:\"
save-script –name get-windowsautopilotinfo –path c:\Daten
ja
cd c:\Daten
.\get-windowsautopilotinfo –outputfile .\AutoPilot.csv"
Vielleicht könnte mir hier ja jemand helfen.
Danke Euch.
lg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 538492
Url: https://administrator.de/forum/powershell-skript-erstellen-und-per-doppelklick-ausfuehren-lassen-538492.html
Ausgedruckt am: 22.04.2025 um 19:04 Uhr
13 Kommentare
Neuester Kommentar

Zitat von @Mannimaker:
Danke für die schnelle Antwort Serial, das hilft mir weiter (aber zuerst brauche ich meine Befehle ja in einem Skript
).
Hast du doch. Schon wieder Freidaach? Lies den Artikel und fertig.Danke für die schnelle Antwort Serial, das hilft mir weiter (aber zuerst brauche ich meine Befehle ja in einem Skript
hätte es schon ein bisschen mit Powershell ISE versucht, bin hier aber leider komplett mit 0 Wissen unterwegs.
Dem kann man behebenWindows PowerShell Scripting Tutorial for Beginners
Moin,
Aber das tut das Skript nicht.
set-ExecutionPolicy RemoteSigned
Das setzt die Execution Policy. Warum muss das Skript das machen? Wird das Skript mit Adminrechten ausgeführt?
Das erstellt einen Ordner auf C: ohne vorherige Prüfung, ob der existiert. Das läuft also in einen Fehler, sofern der Ordner schon da ist.
Das speichert ein Skript unter dem Namen windowsautopilotinfo. Aber welches Skript. Es fehlt die Angabe des Repos, in dem das Skript sich befindet.
???
Liebe Grüße
Erik
Zitat von @Mannimaker:
ich möchte von meinen Geräten die Hash-Werte für Autopilot auslesen, hab das Skript jetzt schon wie folgt angepasst:
ich möchte von meinen Geräten die Hash-Werte für Autopilot auslesen, hab das Skript jetzt schon wie folgt angepasst:
Aber das tut das Skript nicht.
set-ExecutionPolicy RemoteSigned
Das setzt die Execution Policy. Warum muss das Skript das machen? Wird das Skript mit Adminrechten ausgeführt?
New-Item -Name "AutoHash" -ItemType Directory -Path "C:\"
Das erstellt einen Ordner auf C: ohne vorherige Prüfung, ob der existiert. Das läuft also in einen Fehler, sofern der Ordner schon da ist.
save-script –name get-windowsautopilotinfo –path c:\AutoHash -confirm:$false
Das speichert ein Skript unter dem Namen windowsautopilotinfo. Aber welches Skript. Es fehlt die Angabe des Repos, in dem das Skript sich befindet.
Hab jetzt nur noch dass Problem, dass ich jetzt noch die NuGet-Anbieterversion Bestätigen sollte (da poppt ein Fenster auf). Hab die PS1 auch in eine Exe verwandelt 
???
Liebe Grüße
Erik
Zitat von @erikro:
Das setzt die Execution Policy. Warum muss das Skript das machen? Wird das Skript mit Adminrechten ausgeführt?
Ja, das macht keinen Sinn. Das muss dann schon vorher so eingestellt sein, sonst mach das für dieses Script keinen Sinn.Das setzt die Execution Policy. Warum muss das Skript das machen? Wird das Skript mit Adminrechten ausgeführt?
Wenn man Befehle "abseits" der geltenden Execution Policy ausführen will, dann kann man die powershell.exe mit Kommandozeilenparameter "-ExecutionPolicy Bypass" starten.
Moin,
jetzt verstehe ich das. Du hast die undankbare Aufgabe, das bei allen Euren Rechnern einmal auszuführen, oder? Da würde ich kein Skript im klassischen Sinne nehmen, sondern die Befehle zeilenweise in eine Textdatei schreiben, um das dann in die PS-Konsole reinzukopieren. Als letzte Zeile würde ich dann noch
ergänzen, damit nicht jeder auf dem Rechner unkontrolliert Skripts ausführen kann.
hth
Erik
jetzt verstehe ich das. Du hast die undankbare Aufgabe, das bei allen Euren Rechnern einmal auszuführen, oder? Da würde ich kein Skript im klassischen Sinne nehmen, sondern die Befehle zeilenweise in eine Textdatei schreiben, um das dann in die PS-Konsole reinzukopieren. Als letzte Zeile würde ich dann noch
set-executionpolicy restricted
ergänzen, damit nicht jeder auf dem Rechner unkontrolliert Skripts ausführen kann.
hth
Erik

Das hier z.B. in die ISE pasten und ausführen, Ergebnis ist eine Autpilot.exe die ausgeführt, im selben Verzeichnis wie die EXE deine gewüschte CSV erstellt.
$code = @"
using System;
using System.Linq;
using System.Management;
using System.Reflection;
using System.IO;
using System.Security.Principal;
using System.Diagnostics;
namespace AutoPilotInfo {
class Program {
static int Main(string args) {
string hash;
string serial;
string WindowsProductId = "";
try {
WindowsIdentity myID = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(myID);
if (!principal.IsInRole(WindowsBuiltInRole.Administrator)) {
Console.Error.WriteLine("Programm needs elevated rights! Do you want to switch to elevated console? (y/n)");
if (Console.ReadKey().Key == ConsoleKey.Y) {
ProcessStartInfo procInfo = new ProcessStartInfo();
procInfo.FileName = Assembly.GetExecutingAssembly().Location;
procInfo.Verb = "runas";
Process.Start(procInfo);
return 0;
} else {
Console.WriteLine("Aborted.");
return 0;
}
}
hash = new ManagementObjectSearcher(@"root\cimv2\mdm\dmmap", @"Select * From MDM_DevDetail_Ext01 where InstanceID='Ext' AND ParentID='./DevDetail'").Get().OfType<ManagementObject>().FirstOrDefault()["DeviceHardwareData"].ToString();
serial = new ManagementObjectSearcher(@"root\cimv2", @"Select SerialNumber From Win32_Bios").Get().OfType<ManagementObject>().FirstOrDefault()["SerialNumber"].ToString();
string output = "Device Serial Number,Windows Product ID,Hardware Hash\r\n";
output += String.Join(",", new string { serial, WindowsProductId, hash });
string outpath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\AutoPilot.csv";
if (File.Exists(outpath)) {
Console.Write("File 'AutoPilot.csv' already exists in current directory, overwrite? (y/n)");
if (Console.ReadKey().Key == ConsoleKey.Y) {
File.Delete(outpath);
} else {
Console.WriteLine("Aborted.");
return 0;
}
}
File.WriteAllText(outpath, output);
Console.WriteLine("Info exported to file '" + outpath + "'");
} catch (Exception ex) {
Console.Error.WriteLine("PROGRAM EXCEPTION: " + ex.Message);
return 1;
}
return 0;
}
}
}
"@
Add-Type -TypeDefinition $code -OutputAssembly "AutoPilotInfo.exe" -OutputType Console -Language CSharp -ReferencedAssemblies "System.Management"