好的,真正的问题是我从注册表项中获取路径,然后使用正则表达式清理它。路径的开头前面有一个空格,我在记录时没有注意到。我使用以下命令解决了此问题:#outvar 用于构建路径,来自注册表项 | 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
如果我手动输入目标,复制就可以完美工作,所以这一定是一个简单的语法问题。
我已尝试通过执行以下操作来完全构建 $destinationpath 变量:
$destinationpath = "\\$server\$remotepath"
$destinationpath = ("\\{0}\{1}" -f $server,$remotepath)
这两种方法都有效,当我写入主机变量时,我得到了正确的 \server\d$\programe... 我仍然在路径中得到非法字符。char14
我已确认错误中引用的字符是目标中 $ 符号的准确数字。它就是该参数中的字符编号。
我最终把它分成两部分......见下文......
这会复制到 D 根目录的管理共享。Copy-Item -path $localtruststore -Destination \$server\d$ -Force
然后我稍后使用它来移动远程服务器上的文件.. Invoke-command -ComputerName $server { Copy-Item -path D:\truststore -Destination D:\Temp -Force }
可能使这个问题变得复杂的是,我的 Java Keystore 文件和 JKS 文件没有文件扩展名。
答案1
UNC 路径以双反斜杠开头,因此您的命令应如下所示:
$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)