Powershell - Copy-Item auf einen Remote-Freigabepfad fehlerhafte unzulässige Zeichen im Pfad

1

OK, das eigentliche Problem war, dass ich den Pfad aus einem Registrierungseintrag abrief und ihn dann mit Regex bereinigte. Ganz am Anfang des Pfades befand sich vorne ein Leerzeichen, das ich bei der Protokollierung nicht bemerkte. Ich habe dieses Problem folgendermaßen behoben: #outvar wird zum Erstellen des Pfads verwendet und stammt von einem Registrierungsschlüssel | Out-String $ outvar = ($ outvar -replace '\ s', '')

$localtruststore = "C:\Users\me\OneDrive\work\scripts\PS\TEST\truststore"
$servers = "SERVER1"

## remotepath is actually set by looking at a registry entry, but I am sure it is coming out like this:
$remotepath = "d$\programname\40\server\Openfire\resources\security"


#### THIS LINE CAUSES THE ERROR - I think just because of the $.
Copy-Item $localtruststore -Destination \\$server\$remotepath -Force

Copy-Item : Illegal characters in path.
At C:\Users\me\OneDrive\work\scripts\PS\TEST\chat_copy_trustore_to_remote.ps1:46 char:11
+     Copy-Item <<<<  $localtruststore -Destination \\$server\$remotepath -Force
    + CategoryInfo          : NotSpecified: (:) [Copy-Item], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.CopyItemCommand

Wenn ich das Ziel manuell eingebe, funktioniert die Kopie einwandfrei. Dies muss also ein einfaches Syntaxproblem sein.

Ich habe versucht, die Variable $ destinationpath folgendermaßen vollständig zu erstellen:

$destinationpath = "\\$server\$remotepath"    
$destinationpath = ("\\{0}\{1}" -f $server,$remotepath)

BEIDES funktioniert und wenn ich die Variable schreibe, erhalte ich das richtige \ server \ d $ \ programe ... Ich erhalte immer noch ein unzulässiges Zeichen im Pfad., Char14

Ich habe bestätigt, dass das im Fehler angegebene Zeichen die genaue Zahl ist, an der sich das Symbol $ im Ziel befindet. es ist diese char-Nummer in diesem Argument.

Ich habe es in zwei Teile geteilt ... siehe unten.

Dies kopiert auf die Admin-Freigabe für das Stammverzeichnis von D. Copy-Item -path $ localtruststore -Destination \ $ server \ d $ -Force

Dann benutze ich dies später, um die Datei auf dem Remote-Server zu verschieben. Rufen Sie den Befehl -ComputerName $ server auf.

Was möglicherweise oder möglicherweise nicht kompliziert ist, ist, dass meine Java Keystore-Dateien, JKS-Dateien, keine Dateierweiterungen haben.

user1991791
quelle
(Get-ItemProperty HKCU: \ Software \ Dropbox -Name Installationspfad) .installpath.trim () # Mit Get-ItemProperty können Sie den Registrierungsschlüssel lesen und führende und nachfolgende Leerzeichen mit trim () entfernen.
Megamorf

Antworten:

1

UNC-Pfade beginnen mit doppelten Backslashes, sodass Ihr Befehl folgendermaßen aussehen sollte:

$source = "C:\Users\me\OneDrive\work\scripts\PS\TEST\truststore"
$server = "server1"
$destinationpath = "\\$server\d$\programname\40\server\Openfire\resources\security"

copy-item -path $source -destination $destinationpath -verbose


Or you can do it like this:
$foldershare = "d$\programname\40\server\Openfire\resources\security"
$destinationpath = ("\\{0}\{1}" -f $server,$foldershare)
Megamorf
quelle
Wo würde ich das Laufwerk angeben? Ich muss eine Variable für den Ordnerpfad verwenden. Mit anderen Worten, wenn Sie eine Variable für den Zielordner haben, wie verkette ich den Server mit der d $ -Freigabe darauf?
user1991791
genauso wie megamorf es vielleicht mit $ server gemacht hat?
Frank Thomas
Ich habe einen alternativen Weg für Sie hinzugefügt.
Megamorf,
Ich habe den zweiten ausprobiert. Die Variable $ destinationpath wird korrekt als \\ servername \ d $ \ programmname \ ordner erstellt, ABER wenn ich sie mit Copy-Item $ localtruststore -Destination $ destinationpath -force verwende, erhalte ich immer noch die unzulässigen Zeichen in path errror
user1991791
copy-item D: \ temp \ debug -Ziel "\\ $ server \ $ share" -Verbose -Force # funktioniert für mich
Megamorf