我正在尝试编写脚本以将某些信息从一台计算机复制到另一台计算机。第一台计算机的名称类似于“ SERVERxx”,其中xx是站点号。网络上有多台计算机,其名称类似于“ TERMINALxx_yy”,其中xx是站点号,而yy是终端的编号。我想做的是找到“ TERMINALS”中的最低编号(因为1不一定总是最低的)。服务器上有一个名为TERMSTR的环境变量,它等于“ TERMINALxx_”,还有一个名为NUMTERMS的环境变量,它是站点上的终端数量。
我最能弄清的是:
net view | Select-string $termstr
但这只是给出表的输出。
我想首先需要让NET VIEW
仅提供计算机名称,然后以降序排序并选择第一个。
谢谢
答案 0 :(得分:0)
如果您绝对必须使用net view
,那么这将为您提供最高最低的系统编号,并删除了页眉,页脚,行填充和非数字。它不会在结果数tho中添加任何前导零。 [咧嘴]
net view |
# skip the 3 header lines
Select-Object -Skip 3 |
# skip the footer lines
Select-Object -SkipLast 2 |
# trim away the "net view" line padding
# remove the non-digits
ForEach-Object {
[int]($_.Trim() -replace '[^0-9]')
} |
Sort-Object |
Select-Object -First 1
答案 1 :(得分:0)
这是您可以使用的代码的起点。
$Servers = Get-ADComputer -Filter 'Name -like "SERVER*"'
foreach($Server in $Servers | Sort-Object){
$N = $Server.name.substring(($Server.name.length)-2)
$Terminals = Get-ADComputer -Filter 'Name -like "TERMINAL$($N)*"'
$count = $Terminals.Count
$Terminal = $Terminals | Sort-Object
$TerminalZero = $Terminal[0].Name
Write-Host "Terminal Name: $TerminalZero"
$COMMAND = {
Write-Host [System.Environment]::GetEnvironmentVariable("termstr","Machine")
[System.Environment]::SetEnvironmentVariable("TERMSTR", $TerminalZero, "Machine")
[System.Environment]::SetEnvironmentVariable("NUMTERMS", $Count, "Machine")
}
Invoke-Command -ComputerName $Server -ScriptBlock { $COMMAND }
}
}