You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:15:24