PowerShell为何抛出‘变量未设置’错误?已确认变量赋值
问题修复方案
1. 修正参数属性的写法
你写的[Parameter(mandatory)]不符合PowerShell语法规范,布尔型参数必须明确赋值为$true,否则参数绑定会失败,函数内部的$server变量会处于未初始化状态,触发报错。
把参数行改成:
[Parameter(Mandatory=$true)] [TARGET_SERVER] $server
2. 确保枚举类型在函数前定义
检查TARGET_SERVER枚举的定义代码是否在Get-ServerName函数之前执行。如果枚举定义在函数后面,PowerShell无法识别该类型,参数绑定会失败,同样会导致$server变量未设置。
调整代码顺序,先定义枚举再写函数:
enum TARGET_SERVER { # Server receiving the uploaded files remote # The server hosting the public-facing Web site local # An SFTP server running on the user’s computer. Used for testing. } function Get-ServerName { [Parameter(Mandatory=$true)] [TARGET_SERVER] $server <# .SYNOPSIS Retrieves the name of the SFTP server running on on the user’s computer. .PARAMETER server The server type whose name we want. .OUTPUTS The folder (“Undefined” if null) #> switch ($server) { local { $key = $LOCAL_HOST_NAME_KEY } remote { $key = $REMOTE_HOST_NAME_KEY } default { Deny-ServerType -server $server } } # 补充:函数需要返回值才能拿到服务器名称,这里示例读取注册表,可按需修改 if ($key) { return (Get-ItemProperty -Path 'HKLM:\Software\YourApp' -Name $key).$key } else { return "Undefined" } }
3. 验证调用时的变量状态
调用函数前可以加一行调试代码,确认$server变量确实存在且值正确:
Write-Host "调用时的server值:$server,类型:$($server.GetType().Name)" $hostName = Get-ServerName -server $server
如果输出显示$server是字符串"local",PowerShell会自动把它转换成TARGET_SERVER枚举类型,不用手动处理。
额外提醒
你当前的函数只给$key赋值了,没有返回结果,所以调用后$hostName会是空的,需要补充返回逻辑才能得到预期的服务器名称,上面的示例里加了注册表读取的逻辑,你可以根据实际情况调整。
内容的提问来源于stack exchange,提问作者aksarben
相关产品推荐
相关产品推荐

