使用文本文件收集服务器名称时的Powershell输出日志记录

时间:2018-03-08 12:23:00

标签: powershell

有一个问题,想要找出处理成功或失败的最佳方法。有一个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
}

问题是错误路径让我们说是成功它附加整个服务器列表。

请指教?

2 个答案:

答案 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
}