mannimaker
Goto Top

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

Content-Key: 538492

Url: https://administrator.de/contentid/538492

Ausgedruckt am: 29.03.2024 um 14:03 Uhr

Mitglied: 142232
142232 23.01.2020 um 11:37:58 Uhr
Goto Top
Mitglied: Mannimaker
Mannimaker 23.01.2020 um 11:43:46 Uhr
Goto Top
Danke für die schnelle Antwort Serial, das hilft mir weiter (aber zuerst brauche ich meine Befehle ja in einem Skript face-smile ).

hätte es schon ein bisschen mit Powershell ISE versucht, bin hier aber leider komplett mit 0 Wissen unterwegs.

Danke für deine Hilfe.
Mitglied: 142232
142232 23.01.2020 aktualisiert um 11:47:52 Uhr
Goto Top
Zitat von @Mannimaker:

Danke für die schnelle Antwort Serial, das hilft mir weiter (aber zuerst brauche ich meine Befehle ja in einem Skript face-smile ).
Hast du doch. Schon wieder Freidaach? Lies den Artikel und fertig.
hätte es schon ein bisschen mit Powershell ISE versucht, bin hier aber leider komplett mit 0 Wissen unterwegs.
Dem kann man beheben
Windows PowerShell Scripting Tutorial for Beginners
Mitglied: erikro
erikro 23.01.2020 um 13:22:27 Uhr
Goto Top
Moin,

was soll denn das Skript machen? Die Befehle, die Du da oben aufgeschrieben hast, machen so keinen Sinn und sind auch teilweise unvollständig.

Liebe Grüße

Erik
Mitglied: Mannimaker
Mannimaker 23.01.2020 um 13:29:26 Uhr
Goto Top
Hallo Eriko,

ich möchte von meinen Geräten die Hash-Werte für Autopilot auslesen, hab das Skript jetzt schon wie folgt angepasst:

set-ExecutionPolicy RemoteSigned

New-Item -Name "AutoHash" -ItemType Directory -Path "C:\"

save-script –name get-windowsautopilotinfo –path c:\AutoHash -confirm:$false

cd c:\AutoHash

.\get-windowsautopilotinfo –outputfile .\AutoPilot.csv


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 face-smile

lg
Mitglied: Mannimaker
Mannimaker 23.01.2020 um 13:29:59 Uhr
Goto Top
Danke für die Infos,

lese mir mal alles durch - bin eh schon einen Schritt weiter face-smile

thx
Mitglied: erikro
erikro 23.01.2020 um 13:41:02 Uhr
Goto Top
Moin,

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:

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 face-smile

???

Liebe Grüße

Erik
Mitglied: emeriks
emeriks 23.01.2020 aktualisiert um 13:51:41 Uhr
Goto Top
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.
Wenn man Befehle "abseits" der geltenden Execution Policy ausführen will, dann kann man die powershell.exe mit Kommandozeilenparameter "-ExecutionPolicy Bypass" starten.
Mitglied: Mannimaker
Mannimaker 23.01.2020 um 14:03:57 Uhr
Goto Top
Hallo Erik,

ja, alles etwas kompliziert face-smile

Vielleicht zum einfacheren Verständnis:

https://www.cloudpartner.fi/?p=415

face-smile

Daran werke ich ...
Mitglied: erikro
erikro 23.01.2020 um 15:58:46 Uhr
Goto Top
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

set-executionpolicy restricted

ergänzen, damit nicht jeder auf dem Rechner unkontrolliert Skripts ausführen kann.

hth

Erik
Mitglied: 142232
Lösung 142232 23.01.2020 aktualisiert um 17:04:53 Uhr
Goto Top
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"  
Mitglied: Mannimaker
Mannimaker 24.01.2020 um 07:25:18 Uhr
Goto Top
@erikro,

ja genau, das müsste ich bei jedem machen face-smile habs eh nicht sooooo hinbekommen...

Danke für die Hilfe.
Mitglied: Mannimaker
Mannimaker 24.01.2020 um 07:26:02 Uhr
Goto Top
@142232,

danke für deine Hilfe, genau DAS ist die Lösung, super.

DANKE DIR und danke auch an die anderen face-smile

funktioniert einwandfrei

lg