如何正确远程运行'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
你差不多明白了,这里有一些意见和建议。
- 您没有传递所有参数,在您的情况下是
$dir
$dir
是 $env:windir
的别名,所以请尝试使用其他名称。
- 在您的示例
$dir = 'C:\Users\user1\folder1'
中,您引用了远程计算机上的特定用户文件夹,这可能有效,但您最好注意该引用。
- 虽然它可能有效,但我会尽量避免像
$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
我声明了以下变量:
$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
你差不多明白了,这里有一些意见和建议。
- 您没有传递所有参数,在您的情况下是
$dir
$dir
是$env:windir
的别名,所以请尝试使用其他名称。- 在您的示例
$dir = 'C:\Users\user1\folder1'
中,您引用了远程计算机上的特定用户文件夹,这可能有效,但您最好注意该引用。 - 虽然它可能有效,但我会尽量避免像
$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