PowerShell自定义GetTotoVersion函数传递主机名参数时出现URI解析错误的求助
PowerShell自定义GetTotoVersion函数传递主机名参数时出现URI解析错误的求助
看起来你的问题核心是**$hostname变量没有被正确赋值**,从错误提示里的http:///toto/version就能看出来——中间的主机名部分是空的,导致URI格式失效。我来帮你一步步排查和解决:
首先排查最可能的原因:函数调用方式不对
你是不是调用函数的时候忘记传递主机名参数了?比如直接输入了GetTotoVersion,而没有跟着主机名?正确的调用方式应该是下面两种之一:
# 方式1:直接位置传参 GetTotoVersion "your-server-name" # 方式2:指定参数名传参 GetTotoVersion -hostname "your-server-name"
如果是从其他变量传参,要先确认那个变量确实有值,比如:
$myHost = "toto-server-01" GetTotoVersion $myHost
优化函数,加上参数验证和错误处理
为了避免这种空参数的情况,同时让函数更健壮,你可以给函数加参数校验和错误捕获:
function GetTotoVersion($hostname) { # 第一步:验证参数是否为空 if ([string]::IsNullOrWhiteSpace($hostname)) { Write-Error "请提供有效的主机名!示例用法:GetTotoVersion 'your-server'" return } # 构造URI $uri = "http://$hostname:8080/toto/version" try { # 建议直接用Invoke-WebRequest(wget是它的别名,用原名更清晰) $response = Invoke-WebRequest -Uri $uri -ErrorAction Stop # 直接返回内容 $response.Content } catch { # 捕获并输出更友好的错误信息 Write-Error "请求版本失败:$_" } }
解释你之前的尝试为什么没解决问题
你之前尝试的替换引号、用${hostname}或者把URI存到变量里,这些操作本身没有问题,但它们都没解决**$hostname为空**的核心问题——因为你调用函数时根本没传对参数,所以不管怎么拼URI,结果都是空主机名的无效地址。
备注:内容来源于stack exchange,提问作者gluttony
相关产品推荐
相关产品推荐

