Jump to content

Verzeichnisname ist ungültig


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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!

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
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 von HeizungAuf5
Link zu diesem Kommentar

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

 

Link zu diesem Kommentar

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 von Sunny61
Link zu diesem Kommentar
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!

Link zu diesem Kommentar
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

 

Link zu diesem Kommentar
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 von Sunny61
Link zu diesem Kommentar
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.

Link zu diesem Kommentar
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

 

grafik.png.e71c942140e4e4f0ba555276e7551504.png

 

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 von HeizungAuf5
Link zu diesem Kommentar
  • Beste Lösung

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 von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...