为下一次 Read-Host 调用设置硬编码输入

Set hardcoded input for next Read-Host call

我有一个 PowerShell 脚本(我无法更改),其中包含以下函数:

function Foo ([string] param1) {
    [...]
    $var1 = Read-Host "Test"
    $var2 = Read-Host "Test2"
    [...]
}

我想从我的 PowerShell 脚本中调用该函数并希望防止用户必须输入任何值,我想准备硬编码值。

我尝试了以下方法:

@("Var1Value", "Var2Value") | Foo "Param1Value"

但它仍然提示用户。有什么想法吗?

在命令发现期间,函数优先于二进制 cmdlet,因此您可以“隐藏”Read-Host 伪造的 Read-Host 函数:

# define local Read-Host function
function Read-Host {
  param([string]$Prompt)

  return @{Test = 'Var1Value'; Test2 = 'Var2Value'}[$Prompt]
}

# call foo
foo 

# remove fake `Read-Host` function again
Remove-Item function:\Read-Host -Force