Powershell: Ein Positionsparameter kann nicht gefunden werden, der Argument "xxx" akzeptiert

9

Ich versuche zu verstehen, was dieser Fehler eigentlich bedeutet. Eine Suche nach ähnlichen Hilfebefehlen für diesen Fehler reicht bisher von fehlenden Parametern, fehlenden Pipes, der Verwendung einzelner oder mehrerer Zeilen bis hin zu Verkettungsproblemen, aber keine der Antworten scheint einen definitiven Grund zu geben. Also nehme ich an, das Problem ist das Code-Format (das macht es viel schwieriger zu finden).

Dies ist mein Skript, das ich schreibe, um Active Directory-Benutzer pro Ziel-Organisationseinheit aus dem Format, in dem sie sich jetzt befinden, in das Format Vorname.Nachname umzubenennen.

Ich habe eine Testorganisationseinheit in AD mit einigen Benutzern erstellt, die Fehler auslösen werden, und einige, die das nicht tun. Aber die Benutzer, die mir keinen Fehler geben sollten, geben mir den "ein Positionsparameter, der nicht akzeptiert werden kann, der Argument akzeptiert" Vorname.Nachname "

Ich kann nicht sehen, was mit dem Skript falsch ist, aber hoffentlich kann mir jemand ein paar Hinweise geben.

%Vor%

}

    
David Hirst 16.02.2016, 12:51
quelle

3 Antworten

7

Cmdlets in Powershell akzeptieren eine Reihe von Argumenten. Wenn diese Argumente definiert sind, können Sie für jede eine Position definieren.

Damit können Sie ein Cmdlet aufrufen, ohne den Parameternamen anzugeben. Daher ist das Pfadattribut für das folgende Cmdlet mit einer Position von 0 definiert, sodass Sie die Ausführung von -Path beim Aufrufen überspringen können. Daher funktionieren beide der folgenden Cmdlet.

%Vor%

Wenn Sie jedoch mehr Argumente angeben als Positionsparameter definiert sind, erhalten Sie den Fehler.

%Vor%

Da dieses Cmdlet den zweiten Positionsparameter nicht akzeptiert, erhalten Sie den Fehler. Sie können dies beheben, indem Sie ihm sagen, was der Parameter sein soll.

%Vor%

Ich nehme an, Sie erhalten den Fehler in der folgenden Codezeile, da es der einzige Ort zu sein scheint, an dem Sie die Parameternamen nicht korrekt angeben, und vielleicht behandelt es das = als Parameter und $ username als einen anderen Parameter.

%Vor%

Versuchen Sie, den Parameternamen für $ user anzugeben und das =

zu entfernen     
Alexis Coles 16.02.2016, 13:24
quelle
2

Ich hatte dieses Problem, nachdem ich meine Write-Host Cmdlets in Write-Information konvertiert hatte und mir Anführungszeichen und Parens um die Parameter fehlten. Die Cmdlet-Signaturen sind offensichtlich nicht identisch.

  

Write-Host this is a good idea $here
Write-Information this is a good idea $here & lt; = SCHLECHT

Dies ist die Cmdlet-Signatur, die korrigiert wurde, nachdem 20-30 Minuten lang der Funktionsstapel ausgegraben wurde ...

  

Write-Information ("this is a good idea $here") & lt; = GUT

    
SliverNinja 14.04.2017 22:00
quelle
0

In meinem Fall gab es ein beschädigtes Zeichen in einem der genannten Parameter ("-StorageAccountName" für Cmdlet "Get-AzureStorageKey"), das in meinem Editor (SublimeText) als völlig normal angezeigt wurde, aber Windows Powershell konnte es nicht parsen.

Um es zu Ende zu bringen, habe ich die fehlerhaften Zeilen aus der Fehlermeldung in eine andere .ps1-Datei verschoben, diese ausgeführt und der Fehler hat jetzt am Anfang meines Parameters "--StorageAccountName" ein verpfuschtes Zeichen angezeigt.

Das Löschen des Zeichens (das wiederum im normalen Editor normal aussieht) und das erneute Eintippen behebt dieses Problem.

    
starmandeluxe 15.06.2017 03:58
quelle

Tags und Links