电脑上网最快的方法是什么

Sim*_*onS 1 powershell

我正在编写一个返回网络中所有在线计算机的函数,因此我可以执行以下操作:

Get-OnlineComputers | % { get-process -computername $_ }
Run Code Online (Sandbox Code Playgroud)

现在我基本上已经准备好了我的功能,但是花费的时间太长了。我只想返回启用 WinRM 的计算机,但我还想提供选项来获取每台计算机,甚至是那些尚未设置 WinRM 的计算机(切换参数)。

这是我的职责。首先,它创建一个到域控制器的会话,以获取 LAN 中的所有计算机。然后对于每台计算机,它将测试它们是否激活了 WinRM 或者是否接受 ping。如果是这样,它就会被退回。

$session = New-PSSession Domaincontroller
$computers = Invoke-Command -Session $session { Get-ADComputer -filter * } | select -ExpandProperty Name

$computers | % {
    if ($IncludeNoWinRM.IsPresent) 
    {
        $ErrorActionPreference = "SilentlyContinue"
        $ping = Test-NetConnection $_ 
        if ($ping.PingSucceeded -eq 'True') 
        {
            $_
        }       
    }
    else
    {
        $ErrorActionPreference = "SilentlyContinue"
        $WinRM = Test-WSMan $_
        if ($WinRM)
        {
            $_
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我检查在线计算机的最佳方式吗?有人有更快更好的想法吗?

谢谢!

Avs*_*lom 5

非常快速的解决方案是使用cmdlet-Quiet的参数Test-Connection

例如:

$ping = Test-Connection "Computer" -Quiet -Count 1
if ($ping)
{
"Online"
}
     else
     {
     "Offline"
     }
Run Code Online (Sandbox Code Playgroud)

如果对你来说还不够快,你可以使用Send方法System.Net.NetworkInformation.Ping

这是一个示例函数:

Function Test-Ping
{
Param($computer = "127.0.0.1")
  $ping = new-object System.Net.NetworkInformation.Ping
  Try
  {
  [void]$ping.send($computer,1)
  $Online = $true
  }

  Catch
  {
    $Online = $False
  }

  Return $Online
}
Run Code Online (Sandbox Code Playgroud)

关于在多台计算机上执行它,我建议使用 RunSpaces,因为它是使用 PowerShell 可以获得的最快的多线程,

欲了解更多信息,请参阅:

运行空间与作业

基本运行空间实现