使用DBATools获取SQL实例时单实例仅显示首字符的问题
问题解决思路
问题根源
当Find-DbaInstance仅返回单个SQL实例时,$SQLInstInfo.BrowseReply.SQLInstance是字符串类型,而非数组。此时用索引[$i-1]会直接取字符串的第N个字符(单实例循环i=1时,就是首字符);多实例时它是数组,索引行为正常,所以出现两种场景的差异。
修复方案
强制将SQLInstance转为数组,无论返回结果是单个还是多个实例,都统一处理。修改关键代码如下:
Get-DBATools $SQLInstInfo = Find-DbaInstance -computername $Computer | Where { ($_.BrowseReply -NE $Null) } # 强制转为数组,避免单实例时的字符串索引问题 $sqlInstances = @($SQLInstInfo.BrowseReply.SQLInstance) $menu = @{ } for ($i = 1; $i -le $sqlInstances.count; $i++) { Write-Color "`n $i. ", "$($sqlInstances[$i - 1]) " -Color White, Green $menu.Add($i, $sqlInstances[$i - 1]) } [int]$ans = $(Write-Color "`nType the ", "Number ", "of the ", "SQL Instance ","desired: " -Color White, Green, White, Yellow, White -NoNewline; Read-Host) $Instance = $menu.Item($ans)
说明
用@()包裹$SQLInstInfo.BrowseReply.SQLInstance后:
- 若原本是数组,结果还是原数组
- 若原本是单个字符串,会被包装成仅含该字符串的数组
这样后续的循环索引、计数逻辑就能统一适配单实例和多实例场景,无需额外分支判断。
内容的提问来源于stack exchange,提问作者ComputerRecon
相关产品推荐
相关产品推荐

