每当我尝试从字符串调用命令时,都会出现语法错误。
这是针对某些用户的临时控制台,但我只希望允许某些自定义命令。
我已经尝试了以下方法: &$ functionName $ paramater1 $ paramater2 调用命令-ScriptBlock {$ functionName $ paramater1 $ paramater2}
Write-Host 'READY>' -NoNewline -ForegroundColor Magenta;$inputx = Read-Host;$input = $inputx.Split()
if (Get-Command $cmdName -errorAction SilentlyContinue){ # Checks if function is available
# Execute exact string
}
期望的是:
说我们输入"Write-Host 'Hello World!' -NoNewLine"
要执行的命令:Write-Host 'Hello World!' -NoNewLine
返回的内容:
At line:1 char:44
+ Invoke-Command -ScriptBlock {$functionName $paramater1 $paramater2}
+ ~~~~~~~~~~~
Unexpected token '$paramater1' in expression or statement.
At line:1 char:56
+ Invoke-Command -ScriptBlock {$functionName $paramater1 $paramater2}
+ ~~~~~~~~~~~
Unexpected token '$paramater2' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
答案 0 :(得分:0)
解决方案:根据分隔的字符串创建一个联合字符串,然后使用Invoke-Expression $ command。
这对我来说确实是一些块状和可怕的编程,可以轻松简化,但这是原始的块修复程序。
Write-Host 'READY>' -NoNewline -ForegroundColor Magenta;$inputx = Read-Host;$input = $inputx.Split()
if (Get-Command $cmdName -errorAction SilentlyContinue){
if($input[0] -eq $null){
write error 'Empty command'
}else{
if($input[1] -eq $null){
$command = $input[0]
Invoke-Expression $command
}else{
if($input[2] -eq $null){
$command = $input[0]+" "+$input[1]
Invoke-Expression $command
}else{
if($input[3] -eq $null){
$command = $input[0]+" "+$input[1]+" "+$input[2]
Invoke-Expression $command
}else{
if($input[4] -eq $null){
$command = $input[0]+" "+$input[1]+" "+$input[2]+" "+$input[3]
Invoke-Expression $command
}else{
$command = $input[0]+" "+$input[1]+" "+$input[2]+" "+$input[3]+" "+$input[4]
Invoke-Expression $command
if($input[5] -eq $null){
$command = $input[0]+" "+$input[1]+" "+$input[2]+" "+$input[3]+" "+$input[4]+" "+$input[5]
Invoke-Expression $command
}else{
if($input[6] -eq $null){
$command = $input[0]+" "+$input[1]+" "+$input[2]+" "+$input[3]+" "+$input[4]+" "+$input[5]+" "+$input[6]
Invoke-Expression $command
}else{
if($input[7] -eq $null){
$command = $input[0]+" "+$input[1]+" "+$input[2]+" "+$input[3]+" "+$input[4]+" "+$input[5]+" "+$input[6]+" "+$input[7]
Invoke-Expression $command
}else{
if($input[8] -eq $null){
$command = $input[0]+" "+$input[1]+" "+$input[2]+" "+$input[3]+" "+$input[4]+" "+$input[5]+" "+$input[6]+" "+$input[7]+" "+$input[8]
Invoke-Expression $command
}else{
if($input[9] -eq $null){
$command = $input[0]+" "+$input[1]+" "+$input[2]+" "+$input[3]+" "+$input[4]+" "+$input[5]+" "+$input[6]+" "+$input[7]+" "+$input[8]+" "+$input[9]
Invoke-Expression $command
}else{
if($input[10] -eq $null){
$command = $input[0]+" "+$input[1]+" "+$input[2]+" "+$input[3]+" "+$input[4]+" "+$input[5]+" "+$input[6]+" "+$input[7]+" "+$input[8]+" "+$input[9]+" "+$input[10]
Invoke-Expression $command
}}}}}}}}}}}
}