我有一个带参数的脚本。为了简化脚本的调试,我创建了一个我在网上找到的小函数来列出我的所有变量。为了做到这一点,我首先将所有现有变量放在脚本的顶部,然后创建一个函数来比较获取参数之前和之后记录的变量
问题是当我在$AutomaticVariables
声明之前放置param
和函数时,PowerShell为我设置默认值的任何参数给出了以下错误。反正有办法解决这个......错误?如果它不是一个bug,为什么地狱这个行为。我没有看到这一点。
赋值表达式无效。赋值运算符的输入必须是能够接受赋值的对象,例如a 变量或属性。
# Array and function to debug script variable content
$AutomaticVariables = Get-Variable
function check_variables {
Compare-Object (Get-Variable) $AutomaticVariables -Property Name -PassThru |
Where -Property Name -ne "AutomaticVariables"
}
param(
[String]$hostname,
[String]$jobdesc,
[String]$type = "standard",
[String]$repo,
[String]$ocred,
[String]$site,
[String]$cred = "SRC-$($site)-adm",
[String]$sitetype,
[String]$room,
[String]$chsite = "chub"
)
# TEST - Display variables
check_variables
答案 0 :(得分:2)
如评论中所述,您应该收集要在调用范围中排除的变量:
定义函数(也可以是脚本),注意我最后添加的$DebugFunc
参数:
function Do-Stuff
{
param(
[String]$hostname,
[String]$jobdesc,
[String]$type = "standard",
[String]$repo,
[String]$ocred,
[String]$site,
[String]$cred = "SRC-$($site)-adm",
[String]$sitetype,
[String]$room,
[String]$chsite = "chub",
[scriptblock]$DebugFunc
)
if($PSBoundParameters.ContainsKey('DebugFunc')){
. $DebugFunc
}
}
现在,收集变量并定义您的函数,然后将其注入Do-Stuff
:
# Array and function to debug script variable content
$AutomaticVariables = Get-Variable
function check_variables {
Compare-Object (Get-Variable) $AutomaticVariables -Property Name -PassThru | Where -Property Name -ne "AutomaticVariables"
}
Do-Stuff -DebugFunc $Function:check_variables
答案 1 :(得分:0)
这不是一个错误。 param 部分定义了脚本的输入参数,因此必须是第一个语句(与函数相同)。 无需在参数块之前执行任何操作。
如果你用check_variables
解释你想要实现的目标(而不是它的作用)。我们可能会告诉你如何正确地做到这一点。