如何正确远程运行'rename-item'?

How to correctly run 'rename-item' remotely?

我声明了以下变量:

$dir = 'C:\Users\user1\folder1'
$fname = 'abc.txt'
$tmp_fname = 'abc1.txt'

现在,我正在远程尝试执行以下命令:

invoke-command -cn $mycomp -Credential $mycred -ScriptBlock {
param($fname, $tmp_fname)   
   rename-item $dir$fname -NewName $dir$tmp_fname
} -ArgumentList ($fname, $tmp_fname)

执行上述命令后,出现以下错误:

+     invoke-command -cn $server -Credential $host_cred -ScriptBlock {
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

你差不多明白了,这里有一些意见和建议。

  1. 您没有传递所有参数,在您的情况下是 $dir
  2. $dir$env:windir 的别名,所以请尝试使用其他名称。
  3. 在您的示例 $dir = 'C:\Users\user1\folder1' 中,您引用了远程计算机上的特定用户文件夹,这可能有效,但您最好注意该引用。
  4. 虽然它可能有效,但我会尽量避免像 $dir$fname 这样的变量之间的符号,更好的方法是在 $dir 中包含反斜杠,然后像这样组合两者 $($dir+$fname)

综上所述,以下是我认为适合您的方法

$dPath = 'C:\Users\user1\folder1\'
$fname = 'abc.txt'
$tmp_fname = 'abc1.txt'

invoke-command -ComputerName $server -Credential $host_cred -ScriptBlock {
    param($fname, $tmp_fname)   
    rename-item -LiteralPath $($dPath + $fname) -NewName $($dPath + $tmp_fname)
} -ArgumentList $fname, $tmp_fname , $dPath