无法解析 Invoke-Command 参数集 - 命令在脚本之外工作正常
Invoke-Command parameter set cannot be resolved - command works fine outside of script
我正在使用 PowerShell 和 robocopy
从网络共享中归档文件。这些文件夹可能存在也可能不存在,但如果它们存在,我想将它们移动到另一个位置。我正在尝试 运行 一系列在 CSV 文件中预定义的 robocopy
命令。该文件还包含一个路径,我想 运行 检查 (Test-Path
) 以清除不存在的文件夹。然后我可以在以后处理这些。
它的某些部分似乎运行良好,但 invoke-command 给我一个错误:
Invoke-Command : Parameter set cannot be resolved using the specified named parameters.
当我用谷歌搜索这个错误时,我必须承认我不理解给出的答案,因为它们与我的场景无关。 invoke 命令行在它现在不在 if 语句中时工作正常。
这是我的代码:
$csv = Import-Csv C:\paths.csv
foreach ($folder in $csv) {
$path = $folder.LMCLF #full path to be checked
$command = $folder.robo #this is the column name in the CSV which contains the robocopy command
if (Test-path -Path "$path" -pathtype container) { #check whether path exists
Invoke-command $folder.robo #run the robocopy command from the CSV
} else {
echo $path " Does not exist!"
}
if($LASTEXITCODE) { #check for a robocopy exit code & set relevant message
If (($LASTEXITCODE -eq 0)) {
$RoboCopyMessage = "EXITCODE: 0, Succeeded"
} elseif (($LASTEXITCODE -gt 0) -and ($LASTEXITCODE -lt 16)) {
$RoboCopyMessage = "EXITCODE: 1-15, Warning"
} elseif ($LASTEXITCODE -eq 16) {
$RoboCopyMessage = "EXITCODE: 16, Error"
}
} else {
$RoboCopyMessage = "Robocopy did not work :("
}
Write-Host $RoboCopyMessage " at location: " $folder.LMCLF #some output to the console detailing the robocopy message
$folder.LMCLF + " |==========| ", $robocopyMessage | out-file c:\fail.txt -Append #put the folder & robocopy code into a text file
}
您的问题是您将字符串传递给 cmdlet Invoke-Command
中的参数 -ScriptBlock
,而它需要一个脚本块。
Invoke-Command [-ScriptBlock] <ScriptBlock> [-ArgumentList <Object[]>]
[-InputObject <PSObject>] [-NoNewScope] [<CommonParameters>]
您可以尝试在 运行 命令之前将其转换为脚本块:
Invoke-Command ([scriptblock]::Create($folder.robo))
如果您的命令是字符串,请使用 Invoke-Expression
而不是 Invoke-Command
。
我正在使用 PowerShell 和 robocopy
从网络共享中归档文件。这些文件夹可能存在也可能不存在,但如果它们存在,我想将它们移动到另一个位置。我正在尝试 运行 一系列在 CSV 文件中预定义的 robocopy
命令。该文件还包含一个路径,我想 运行 检查 (Test-Path
) 以清除不存在的文件夹。然后我可以在以后处理这些。
它的某些部分似乎运行良好,但 invoke-command 给我一个错误:
Invoke-Command : Parameter set cannot be resolved using the specified named parameters.
当我用谷歌搜索这个错误时,我必须承认我不理解给出的答案,因为它们与我的场景无关。 invoke 命令行在它现在不在 if 语句中时工作正常。
这是我的代码:
$csv = Import-Csv C:\paths.csv
foreach ($folder in $csv) {
$path = $folder.LMCLF #full path to be checked
$command = $folder.robo #this is the column name in the CSV which contains the robocopy command
if (Test-path -Path "$path" -pathtype container) { #check whether path exists
Invoke-command $folder.robo #run the robocopy command from the CSV
} else {
echo $path " Does not exist!"
}
if($LASTEXITCODE) { #check for a robocopy exit code & set relevant message
If (($LASTEXITCODE -eq 0)) {
$RoboCopyMessage = "EXITCODE: 0, Succeeded"
} elseif (($LASTEXITCODE -gt 0) -and ($LASTEXITCODE -lt 16)) {
$RoboCopyMessage = "EXITCODE: 1-15, Warning"
} elseif ($LASTEXITCODE -eq 16) {
$RoboCopyMessage = "EXITCODE: 16, Error"
}
} else {
$RoboCopyMessage = "Robocopy did not work :("
}
Write-Host $RoboCopyMessage " at location: " $folder.LMCLF #some output to the console detailing the robocopy message
$folder.LMCLF + " |==========| ", $robocopyMessage | out-file c:\fail.txt -Append #put the folder & robocopy code into a text file
}
您的问题是您将字符串传递给 cmdlet Invoke-Command
中的参数 -ScriptBlock
,而它需要一个脚本块。
Invoke-Command [-ScriptBlock] <ScriptBlock> [-ArgumentList <Object[]>]
[-InputObject <PSObject>] [-NoNewScope] [<CommonParameters>]
您可以尝试在 运行 命令之前将其转换为脚本块:
Invoke-Command ([scriptblock]::Create($folder.robo))
如果您的命令是字符串,请使用 Invoke-Expression
而不是 Invoke-Command
。