PowerShell如何关联匹配GetReportServerUrls返回的两个关联数组属性
实现方案
针对两个一一对应数组的关联取值需求,有两种更优的实现思路,核心优化点是避免重复调用GetReportServerUrls()方法,减少不必要的性能开销,也规避多次调用可能出现的结果不一致问题。
方案1:构建映射哈希表(推荐,适合多场景复用)
将两个数组合并为「应用名-URL」的哈希表,后续取值直接通过键查询,可读性和可维护性更高,也方便后续获取其他应用的对应URL:
$rsCnfg = Get-WmiObject -NameSpace "root\Microsoft\SqlServer\ReportServer\$rsWmiN\$rsWmiV" -class MSReportServer_Instance -ComputerName localhost # 仅调用一次方法,缓存返回结果 $urlResult = $rsCnfg.GetReportServerUrls() # 构建映射哈希表 $appUrlMap = @{} for ($i = 0; $i -lt $urlResult.Length; $i++) { $appUrlMap[$urlResult.ApplicationName[$i]] = $urlResult.URLs[$i] } # 直接取值 $rswsURL = $appUrlMap["ReportServerWebService"]
执行后输出$rswsURL即可得到对应的服务地址。
方案2:优化原索引写法(适合单次取值)
如果只需要单次获取ReportServerWebService的URL,可以简化原有逻辑,仅调用一次方法完成索引查找和取值:
$rsCnfg = Get-WmiObject -NameSpace "root\Microsoft\SqlServer\ReportServer\$rsWmiN\$rsWmiV" -class MSReportServer_Instance -ComputerName localhost $urlResult = $rsCnfg.GetReportServerUrls() $rswsURL = $urlResult.URLs[[array]::IndexOf($urlResult.ApplicationName, "ReportServerWebService")]
内容的提问来源于stack exchange,提问作者ToToRoYN
相关产品推荐
相关产品推荐

