有一个问题,想要找出处理成功或失败的最佳方法。有一个powershell查询,它检查dcom端口范围,如果它在指定值输出到成功文件,如果不是失败文件。问题是,它似乎输出整个serverlist.txt以获得成功,并且需要知道一种方法来解决这个问题,因此它只会将服务器(成功/失败)附加到它,而不是一次性。
这是powershell脚本内容:
powershell -executionpolicy bypass .\DCOMPortRange.ps1
DCOMPortRange.ps1包含
的位置$computername = Get-Content -Path "C:\Folderpath\serverlist.txt"
$val = (Get-ItemProperty "hklm:SOFTWARE\Microsoft\Rpc\Internet") | Select-Object -ExpandProperty Ports
if($val -eq "50000-50500")
{
Write-Output "$computername" | out-file C:\folderpath\Success.log -append
} Else {
Write-Output "$computername" | out-file C:\folderpath\Failure.log -append
}
问题是错误路径让我们说是成功它附加整个服务器列表。
请指教?
答案 0 :(得分:1)
我就是这样做的。这确实要求您在服务器上启用PSremoting
$computername = Get-Content -Path "C:\Folderpath\serverlist.txt"
ForEach ($server in $computername) {
$val = Invoke-Command -Computername $server -ScriptBlock {(Get-ItemProperty "hklm:SOFTWARE\Microsoft\Rpc\Internet") | Select-Object -ExpandProperty Ports}
if ($val -ge 50000 -and $val -le 50500) {
Write-Output "$server" | out-file C:\folderpath\Success.log -append
}
Else {
Write-Output "$server" | out-file C:\folderpath\Failure.log -append
}
}
编辑:对if语句的更改
/安德斯
答案 1 :(得分:0)
$remotecomputername = @("PC1","PC2","RealServerName")
ForEach ($computer in $remotecomputername) {
Invoke-Command -Computername $computer -ScriptBlock { $val = (Get-
ItemProperty "hklm:SOFTWARE\Microsoft\Rpc\Internet") | Select-Object -
ExpandProperty Ports} }
if($val -eq "50000-50500") {
write-host $computer DCOM Port in Range
} else {
write-host $computer DCOM Port not in range
}