PowerShell net просмотр не отображает все имена компьютеров в сети - PullRequest
0 голосов
/ 16 июня 2020

Использование однострочного

switch -regex (NET.EXE VIEW) { "^\\\\(?<Name>\S+)\s+" { $matches.Name } }

Чтобы получить список всех компьютеров в сети, но по какой-то причине это возвращает только частичный список, может ли это быть проблема, связанная с рабочей группой?

Я могу видеть все компьютеры в сети на вкладке windows network и успешно войти в систему.

1 Ответ

0 голосов
/ 16 июня 2020

Сделал небольшой сценарий для этого, который захватывает все сетевые компьютеры через arp -a, hostnames et c с индикатором выполнения, а затем передает их в массив, который я могу использовать.

Add-Type -assembly System.Windows.Forms

## -- Create The Progress-Bar
$ObjForm = New-Object System.Windows.Forms.Form
$ObjForm.Text = "Initial Setup"
$ObjForm.Height = 100
$ObjForm.Width = 500
$ObjForm.BackColor = "#000000"
$ObjForm.FormBorderStyle = 'None'
$ObjForm.ControlBox = $False

$ObjForm.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
$ObjForm.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen
$ObjForm.TopMost = $True

## -- Create The Label
$ObjLabel = New-Object System.Windows.Forms.Label
$ObjLabel.Text = "Starting. Please wait ... "
$ObjLabel.Left = 5
$ObjLabel.Top = 10
$ObjLabel.Width = 500 - 20
$ObjLabel.Height = 15
$ObjLabel.Font = "Tahoma"
$ObjLabel.ForeColor = "#FFFFFF"
## -- Add the label to the Form
$ObjForm.Controls.Add($ObjLabel)

$PB = New-Object System.Windows.Forms.ProgressBar
$PB.Name = "PowerShellProgressBar"
$PB.Value = 0
$PB.Style = "Continuous"
$PB.ForeColor = "#FFC20E"
$PB.BackColor = "#111111"

$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 500 - 40
$System_Drawing_Size.Height = 20
$PB.Size = $System_Drawing_Size
$PB.Left = 5
$PB.Top = 40
$ObjForm.Controls.Add($PB)

## -- Show the Progress-Bar and Start The PowerShell Script
$ObjForm.Show() | Out-Null
$ObjForm.Focus() | Out-NUll
$ObjLabel.Text = "Starting. Please wait ... "
$ObjForm.Refresh()

Start-Sleep -Seconds 1

## -- Execute The PowerShell Code and Update the Status of the Progress-Bar

$Activity = "Processing items"
$NameArray = arp -a
$ArpArray = @()
$FinalArray = @()

foreach ($object in $NameArray)
{
    $ArpArray += ($object -split "\s+")[1] -replace "Internet", ""
}

$TotItems = $ArpArray.Count
$Count = 0

$ParseArray = $ArpArray | Where { $_ -ne '' }
foreach ($address in $ParseArray)
{
    #write-host $address
    $Stringer = $address
    try { $Name = [System.Net.Dns]::GetHostByAddress($Stringer).Hostname }
    catch [Exception]{ $Name = "" }
    $FinalArray += $Name

    $Count++
    $percentComplete = ($Count/$TotItems * 100)
    $PB.Value = $percentComplete
    $ObjLabel.Text = "Getting Network Computer Names"
    $ObjForm.Refresh()
    Start-Sleep -Milliseconds 150

}

$FinalArray = $FinalArray | Where { $_ -ne "" }
$FinalArray = $FinalArray | Select -Unique
#$FinalArray

$ObjForm.Close()
...