Powershell - 将项目复制到远程共享路径错误路径中的非法字符

Powershell - 将项目复制到远程共享路径错误路径中的非法字符

好的,真正的问题是我从注册表项中获取路径,然后使用正则表达式清理它。路径的开头前面有一个空格,我在记录时没有注意到。我使用以下命令解决了此问题:#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)

相关内容