Powershell是否在阵列中获取repadmin/istg?
这可能吗 我是powershell的新手,目前正在将vbscript脚本转换为powershell。以下一行命令似乎与整个vbscript的功能完全相同:Powershell是否在阵列中获取repadmin/istg?,powershell,Powershell,这可能吗 我是powershell的新手,目前正在将vbscript脚本转换为powershell。以下一行命令似乎与整个vbscript的功能完全相同: Repadmin /istg 哪个输出 Repadmin: running command /istg against full DC ST-DC7.somestuff.com Gathering topology from site BR-CORP (ST-DC7.somestuff.com): Site
Repadmin /istg
哪个输出
Repadmin: running command /istg against full DC ST-DC7.somestuff.com
Gathering topology from site BR-CORP (ST-DC7.somestuff.com):
Site ISTG
================== =================
Portland ST-DC4
Venyu ST-DC5
BR-Office ST-DC3
BR-CORP ST-DC7
问题是我需要将此信息(即最后4行)作为包含“Site”和“ISTG”字段的对象返回。我尝试了以下方法:
$returnValues = Repadmin /istg
$returnValues
但这并没有返回任何内容(可能是因为Repadmin写出了行,而不是实际返回数据?)
有没有一种方法可以将信息从“Repadmin/istg”获取到数组中?这里有一种可能的方法,使用正则表达式:
$output = repadmin /istg
for ( $n = 10; $n -lt $output.Count; $n++ ) {
if ( $output[$n] -ne "" ) {
$output[$n] | select-string '\s*(\S*)\s*(\S*)$' | foreach-object {
$site = $_.Matches[0].Groups[1].Value
$istg = $_.Matches[0].Groups[2].Value
}
new-object PSObject -property @{
"Site" = $site
"ISTG" = $istg
} | select-object Site,ISTG
}
}
您必须开始解析输出的第10项并忽略空行,因为
repadmin.exe
似乎插入了超级换行符(至少PowerShell这么认为)。尝试$returnValues=[string](repadmin/istg)这确实返回了我需要的信息,但都在一个大的单行字符串中。我想我可以仔细检查并解析它,但我想知道是否有更好的解决方案?对于第一行更好:$output=repadmin/istg | select-skip 9 |?{![string]::IsNullOrWhiteSpace($|)}
,它只获取包含数据的行,并在开始时跳过多余的9行。实际上,在那一点上,您可以只在?{}中包含您的$匹配,然后通过管道到ForEach来创建自定义对象,这非常快。我一直在努力解决这个问题,因为我张贴,但你击败了我!谢谢