Ich habe dies derzeit in einer einzelnen Zeile in Powershell ISE
Start-Process -filepath "C:\Powershell-Backup\disk2vhd.exe" -argumentlist 'C: \\Computer1\ServerBackups$\' + $ComputerName + '\' $JobTitle + '.vhd /accepteula'
und im Moment wird diese Linie nicht laufen. Die Variablen sind etwas zugeordnet, also kein Problem dort.
Ich möchte, dass der Prozess startet, aber zum Beispiel mit den eingegebenen Variablen
Start-Process -filepath "C:\Powershell-Backup\disk2vhd.exe" -argumentlist 'C: \\Computer1\ServerBackups$\MyComputer\Backup Operation 12/14/2014 1:55 PM.vhd /accepteula'
Der Fehler, den ich im Protokoll erhalte, ist
Start-Process : A positional parameter cannot be found that accepts argument '+'.
At C:\Powershell-Backup\script.ps1:10 char:14
+ Start-Process <<<< -filepath "C:\Powershell-Backup\disk2vhd.exe" -argumentlist 'C: \\Computer1\ServerBackups$\' + $ComputerName '\' $JobTitle '.vhd /accepteula'
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
Wie kann das erreicht werden?
powershell
EdG
quelle
quelle
C: \\
ist Tippfehler?Antworten:
Erstens ist dies ein ausgezeichneter Ort, um einen String-Formatierer zu verwenden, anstatt Ihre Vernunft durch Escape-Zeichen und Interpolation zu verlieren. Zweitens
Start-Process
sollten Sie in der Lage sein, die folgende&
Anweisung zu verwenden:oder wenn es ein oneliner sein muss
quelle
Eine meiner Meinung nach eher bewährte Methode, die auch einfachere Möglichkeiten zur Problembehandlung bietet, besteht darin, die Zeichenfolge in einer Variablen zu erstellen und diese Variable dann an den endgültigen Befehl zu übergeben. Auf diese Weise können Sie überprüfen, ob die Zeichenfolge ordnungsgemäß erstellt wurde, bevor Sie sie an den Befehl übergeben. Der Versuch, PowerShell zum Erstellen eines dynamischen Pfads oder einer dynamischen Zeichenfolge innerhalb des Parameters eines Cmdlets zu bewegen, funktioniert nicht immer so, wie Sie es sich immer vorstellen.
Also würde ich so etwas machen:
Zu beachten ist, dass PowerShell Zeichenfolgen mit Variablen unterschiedlich behandelt, je nachdem, ob sie in einfache oder doppelte Anführungszeichen eingeschlossen sind. Wenn Sie eine Variable in eine Zeichenfolge mit einfachen Anführungszeichen einfügen, behandelt PowerShell sie so, wie sie ist, und löst diese Variable vor dem Erstellen der Zeichenfolge nicht in die zugewiesene Variable auf. Wenn Sie dagegen doppelte Anführungszeichen verwenden, analysiert PowerShell die Zeichenfolge für diese Variablen und löst sie in die zugewiesenen Werte auf, bevor die Zeichenfolge finalisiert wird. Ein gutes Beispiel dafür finden Sie im Artikel des WindowsITPro-Magazins: Einfache Anführungszeichen im Vergleich zu doppelten Anführungszeichen
quelle
ServerBackups`$
.