HeizungAuf5 13 Geschrieben 24. Februar 2020 Melden Teilen Geschrieben 24. Februar 2020 Hallo zusammen, zuerst, ich bin in PowerShell absoluter Neuling und freue mich schon, wenn ich mal ein Hallo-Welt zusammen bekomme. Daher ist die Frage eventuell unter dem Durchschnittsniveau der Leute hier ;) Ich versuche derzeit eine Druckerliste vom Printserver zu erzeugen und als Textdatei abzulegen. Da wir als Terminalserver WS2016 betreiben funktioniert das allerdings nicht mehr mit Benutzerrechten, weswegen ich das Script als Admin ausführen will. In einem Blog habe ich auch eine entsprechende Anleitung gefunden, wie das gehen soll. Nur leider bekomme ich beim Start des Scriptes nicht das raus, was ich will. Start-Process : Dieser Befehl kann aufgrund des folgenden Fehlers nicht ausgeführt werden: Der Verzeichnisname ist ungültig. In Zeile:5 Zeichen:1 + Start-Process powershell -Credential $MyCredential -ArgumentList '-co ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand Mein Script sieht bisher so aus: $User = "DOMAIN\USER" $Password = "PASSWORT)" | ConvertTo-SecureString -asPlainText -Force $MyCredential = New-Object System.Management.Automation.PSCredential($User,$Password) Start-Process -WindowStyle Hidden powershell.exe -Credential $MyCredential -ArgumentList '-noprofile -command &{Get-WmiObject -class Win32_Printer -Computer "Print01" | select Sharename > C:\Drucker\Printer_List.txt -Verb RunAs}' Jemand eine Idee, wie ich das noch zum Laufen kriege? - Und wegen des Clear-Text Passwortes: Die Datei wird vom Monitoring aus gestartet. Deswegen bekommt die nie einer zu Gesicht. Grüße und Danke! Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 24. Februar 2020 Melden Teilen Geschrieben 24. Februar 2020 Wie wäre es mit dem -Filepath -Parameter? https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-7 Sicherheitshinweis: Du solltest bei client-seitigen Scripten (der RDS ist hier ein Client) keine Admin-Passwörter in ein Script schreiben. Die Anforderung lässt sich sicher auch anders umsetzen. Zitieren Link zu diesem Kommentar
HeizungAuf5 13 Geschrieben 24. Februar 2020 Autor Melden Teilen Geschrieben 24. Februar 2020 (bearbeitet) vor 26 Minuten schrieb zahni: -Filepath -Parameter? Ich hab das probiert, wie es in "Example 5" ausgeführt wurde Start-Process -WindowStyle Hidden -filepath "powershell" -Credential $MyCredential -ArgumentList '-noprofile -command &{Get-WmiObject -class Win32_Printer -Computer "Print01" | select Sharename > C:\Drucker\Printer_List.txt -Verb RunAs}' Leider weiterhin Verzeichnisfehler Start-Process : Dieser Befehl kann aufgrund des folgenden Fehlers nicht ausgeführt werden: Der Verzeichnisname ist ungültig. In Zeile:5 Zeichen:1 + Start-Process -WindowStyle Hidden -filepath "powershell" -Credential ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand //edit Wenn ich den Filepath auf das Verzeichnis zeigen lassen, in der die Datei liegen soll Start-Process -WindowStyle Hidden -filepath "C:\Drucker" powershell -Credential $MyCredential -ArgumentList '-noprofile -command &{Get-WmiObject -class Win32_Printer -Computer "Print01" | select Sharename > C:\Drucker\Printer_List.txt -Verb RunAs}' Bekomme ich zumindest schon mal einen anderen Fehler Start-Process : Es wurde kein Positionsparameter gefunden, der das Argument "powershell" akzeptiert. In Zeile:5 Zeichen:1 + Start-Process -WindowStyle Hidden -filepath "C:\Drucker" powershell -C ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand bearbeitet 24. Februar 2020 von HeizungAuf5 Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 24. Februar 2020 Melden Teilen Geschrieben 24. Februar 2020 Start-Process -FilePath "powershell.exe" -Wait -WindowStyle Maximized Zitieren Link zu diesem Kommentar
HeizungAuf5 13 Geschrieben 24. Februar 2020 Autor Melden Teilen Geschrieben 24. Februar 2020 So? - Sorry fürs doof anstellen Start-Process FilePath "powershell.exe" -Wait -WindowStyle Maximized -Credential $MyCredential -ArgumentList '-noprofile -command &{Get-WmiObject -class Win32_Printer -Computer "Print01" | select Sharename > C:\Drucker\Printer_List.txt -Verb RunAs}' Bringt ein Start-Process : Der Parameter "WindowStyle" kann nicht gebunden werden. Der Wert "Maximized" kann nicht in den Typ "System.Diagnostics.ProcessWindowStyle" konvertiert werden. Fehler: "Der Bezeichner "Maximized" kann keinem gültigen Enumeratornamen zugeordnet werden. Geben Sie einen der folgenden Enumeratornamen an, und wiederholen Sie den Vorgang: Normal, Hidden, Minimized, Maximized" In Zeile:5 Zeichen:63 + ... ss FilePath "powershell.exe" -Wait -WindowStyle Maximized -Creden ... + ~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.StartProcessCommand Wenn ich den -WindowStyle weg lasse, bekomme ich ein Start-Process : Es wurde kein Positionsparameter gefunden, der das Argument "powershell.exe" akzeptiert. In Zeile:5 Zeichen:1 + Start-Process FilePath "powershell.exe" -Wait -Credential $MyCrede ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 24. Februar 2020 Melden Teilen Geschrieben 24. Februar 2020 (bearbeitet) Es fehlt zu Beginn das - vor Filepath: Start-Process -filepath. An der Stelle IMMER mit der Tabtaste arbeiten, hilft ungemein. Wenn keine automatische Vervollständigung stattfindet, stimmt etwas nicht. Du weißt wie das geht? Steht alles auch so in der Doku: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-7 Es ist immer sehr hilfreich so ein Script auch lokal laufen zu lassen, man sieht gleich ob es funktioniert, dann erweitern, Stück für Stück. BTW: In welchem Blog hast Du die Anleitung gefunden? Es ändert sich immer wieder etwas, deshalb ist es fast besser, zu Beginn die Doku des Herstellers zu nutzen. bearbeitet 24. Februar 2020 von Sunny61 Zitieren Link zu diesem Kommentar
HeizungAuf5 13 Geschrieben 24. Februar 2020 Autor Melden Teilen Geschrieben 24. Februar 2020 vor 24 Minuten schrieb Sunny61: In welchem Blog hast Du die Anleitung gefunden? Hier: https://blog.friedlandreas.net/2017/01/powershell-programm-oder-skript-mit-credentials-und-als-administrator-ausfuehren/ vor 24 Minuten schrieb Sunny61: Es fehlt zu Beginn das - vor Filepath: Start-Process -filepath Danke. Mit Start-Process -FilePath "powershell.exe" -Wait -Credential $MyCredential -ArgumentList '-noprofile -command &{Get-WmiObject -class Win32_Printer -Computer "Print01" | select Sharename > C:\Drucker\Printer_List.txt -Verb RunAs}' Kriege ich ein Start-Process : Es wurde kein Positionsparameter gefunden, der das Argument "-Wait" akzeptiert. In Zeile:5 Zeichen:1 + Start-Process -FilePath "powershell.exe" -Wait -Credential $MyCred ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand zurück. Wenn ich das -wait entferne, kriege ich ein Start-Process : Dieser Befehl kann aufgrund des folgenden Fehlers nicht ausgeführt werden: Das System kann die angegebene Datei nicht finden. In Zeile:5 Zeichen:1 + Start-Process -FilePath "powershell.exe" -Credential $MyCredential ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand vor 27 Minuten schrieb Sunny61: Du weißt wie das geht? Ehrlich gesagt, nein ;) - Drum hab ich ja oben schon angemerkt, dass ich mit PS noch nie wirklich zu tun hatte. Grüße! Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 24. Februar 2020 Melden Teilen Geschrieben 24. Februar 2020 Jetzt hast Du -WindowStyle (da muss dann noch ein Parameter rein) vergessen. Warum gibst Du nicht zum Test zuerst mal mein Beispiel vollständig ein? Zitieren Link zu diesem Kommentar
HeizungAuf5 13 Geschrieben 24. Februar 2020 Autor Melden Teilen Geschrieben 24. Februar 2020 vor 12 Minuten schrieb zahni: Warum gibst Du nicht zum Test zuerst mal mein Beispiel vollständig ein? Hab ich oben schon mal gemacht, zugegeben, mit einem - vergessen. Bei dir sähe das ja dann so aus:? Start-Process -FilePath "powershell?.?exe" -?Wait -WindowStyle Maximized? -Credential $MyCredential -ArgumentList '-noprofile -command &{Get-WmiObject -class Win32_Printer -Computer "Print01" | select Sharename > C:\Drucker\Printer_List.txt -Verb RunAs}' Das bringt ein Start-Process : Der Parameter "WindowStyle" kann nicht gebunden werden. Der Wert "Maximized?" kann nicht in den Typ "System.Diagnostics.ProcessWindowStyle" konvertiert werden. Fehler: "Der Bezeichner "Maximized?" kann keinem gültigen Enumeratornamen zugeordnet werden. Geben Sie einen der folgenden Enumeratornamen an, und wiederholen Sie den Vorgang: Normal, Hidden, Minimized, Maximized" In Zeile:5 Zeichen:64 + ... s -FilePath "powershell?.?exe" -?Wait -WindowStyle Maximized? -Creden ... + ~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.StartProcessCommand Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 24. Februar 2020 Melden Teilen Geschrieben 24. Februar 2020 Start-Process -FilePath "powershell?.?exe" -?Wait -WindowStyle Maximized? (???) Siehst Du selber, oder? Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 24. Februar 2020 Melden Teilen Geschrieben 24. Februar 2020 (bearbeitet) vor 43 Minuten schrieb HeizungAuf5: Ehrlich gesagt, nein ;) - Drum hab ich ja oben schon angemerkt, dass ich mit PS noch nie wirklich zu tun hatte. Das mit TAB hat nichts mit der PS zu tun, geht auch in der Commandline. In der PS gibst Du start-p ein und drückst die TAB-Taste. Gibt es eine Auswahl, wird die durch weiteres Drücken der TAB-Taste durchlaufen. Dann das - eingeben und die TAB-Taste drücken, mit jedem drücken der TAB-Taste wird eine weitere Option angegeben. Und gib den Pfad zur Powershell.exe vollständig an. Auch hier kann man mit der TAB-Taste arbeiten C:\wind TAB-Taste drücken, \ eingebeben, die ersten Buchstaben des Verzeichnisses angeben und TAB-Taste. Und schau dir die Doku von MSFT an, die ich verlinkt hatte. BTW: Das Beispiel aus dem Blog funktioniert bei dir lokal? Probier es immer zuerst lokal und das Ergebnis sichtbar ausgeben lassen. bearbeitet 24. Februar 2020 von Sunny61 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 24. Februar 2020 Melden Teilen Geschrieben 24. Februar 2020 Wieso willst du die Powershell innerhalb der Powershell starten? Get-WmiObject kennt selbst Credentials und es gibt noch Invoke-command für Befehle auf anderen Systemene oder mit anderen Credentials. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 24. Februar 2020 Melden Teilen Geschrieben 24. Februar 2020 vor 31 Minuten schrieb Dukel: Get-WmiObject kennt selbst Credentials und es gibt noch Invoke-command für Befehle auf anderen Systemene oder mit anderen Credentials. ... und Get-WmiObject sollte auch nicht mehr benutzt werden. Es gibt das moderne Get-CimInstance ... meistens auch noch schneller ... und mit dem Parameter -ComputerName kannst Du das auch remote benutzen ... ohne Invoke-Command. Zitieren Link zu diesem Kommentar
HeizungAuf5 13 Geschrieben 24. Februar 2020 Autor Melden Teilen Geschrieben 24. Februar 2020 (bearbeitet) vor 4 Stunden schrieb zahni: (???) Siehst Du selber, oder? Scheint eher ein Problem der Forensoftware zu sein. Die Fragezeichen gebe ich natürlich nicht mit ein und in PowerShell werden die auch nicht mit angezeigt vor 3 Stunden schrieb Dukel: Get-WmiObject kennt selbst Credentials Habe ich gerade mal ausprobiert, nach dieser Anleitig $LAdmin = "DOMAIN\Administrator" $LPassword = ConvertTo-SecureString "Password!" -AsPlainText -Force $Credentials = New-Object -Typename System.Management.Automation.PSCredential -ArgumentList $LAdmin, $LPassword Get-WmiObject -class Win32_Printer -Computername "Print01" | select Sharename -Credential $Credentials > C:\Drucker\Printer_List.txt Gibt ein Select-Object : Es wurde kein Parameter gefunden, der dem Parameternamen "Credential" entspricht. In Zeile:5 Zeichen:75 + ... 32_Printer -Computer "Print01" | select Sharename -Credential $Creden ... + ~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Select-Object], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand zurück. Gibt es alternativ hier im Forum jemanden, der mir diesen einen Request entsprechend umbauen kann, dass er funktioniert? Ich weiß selbst, dass ich in PS keine Leuchte bin, will aber trotzdem, dass es funktioniert. Grüße! bearbeitet 24. Februar 2020 von HeizungAuf5 Zitieren Link zu diesem Kommentar
Beste Lösung BOfH_666 577 Geschrieben 24. Februar 2020 Beste Lösung Melden Teilen Geschrieben 24. Februar 2020 (bearbeitet) Du machst es Dir aber auch schwer ... $CimSession = New-CimSession -ComputerName 'Print01' -Credential $Credentials Get-CimInstance -CimSession $CimSession -ClassName Win32_Printer | Select-Object -Property ShareName | Out-File C:\Drucker\Printer_List.txt Remove-CimSession -CimSession $CimSession Um die Probleme zu umgehen, dass es quasi keine einfache Möglichkeit gibt, Credentials sicher für die Benutzung in Scripten zu speichern, könntest Du einfach die Aufgabenplanung benutzen. Du erstellst eine entsprechende Aufgabe mit den nötigen Anmeldedaten und führst diese bei Bedarf aus. Dann lässt Du den ganzen Credentials-Kram im Script einfach weg. bearbeitet 24. Februar 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.