, как мне было интересно, почему мой сценарий занимает так много времени, я искал на Google, а также здесь, в stackoverflow.
Но все, что я мог найти, что-то похожее на полезное, было вот здесь, Скрипт Powershell работает медленно
Поскольку я все еще довольно новичок в Powershell, мне немного сложно разобраться с моим сценарием, так как я все равно не знаю, как обращаться с упомянутыми вещами, поскольку я никогда не слышал об этом раньше.
Мой сценарий довольно прост и просто дает мне некоторую информацию, если есть что-то, что возвращает эхо или нет.
Я хотел «просканировать» всю нашу Сеть, поэтому я сделал CSV без IP-адресов локальных сетей и передал его в Powershell, чтобы «пинговать» их.
Но я понял, что выполнение части «не отвечает» занимает много времени.
$list = Import-Csv -Path D:\ipcheck3.csv -UseCulture
$x=$list.IP
$ErrorActionPreference = "SilentlyContinue"
foreach ($y in $x)
{
try
{
if(Test-Connection $y -Count 1 -quiet)
{
write-host "$y responded"
$y | Export-Csv -Path D:\PingSucceded.csv -Append
}
else
{
Write-Host "$y was not responding"
$y | Export-Csv -Path D:\Pingfailed.csv -Append
}
}
catch
{
Write-Warning "Other Error occured"
}
}
Есть не только клиенты Windows, поэтому WMI не вариант, и я не знаю, как этого добиться в противном случае
EDIT:
После ввода в рабочий процесс это моя «пробная версия»
workflow Test-IPrange
{
Param
(
$IPs
)
$tocheck= $IPs.IP
foreach -parallel ($IP in $tocheck)
{
$pingsucceed = Test-Connection $IP -Count 1 -quiet
if($pingsucceed -eq "True")
{
$IP | Export-Csv -Path D:\testj.csv -Append
}
else
{
$IP | Export-Csv -Path D:\testn.csv -Append
}
}
}
Test-IPrange -IPs $(Import-Csv -Path D:\ipcheck3.csv -UseCulture)
Мой вывод рабочего процесса Попробуйте
#TYPE System.String
PSComputerName,"PSShowComputerName","PSSourceJobInstanceId","Length"
localhost,"True","4e208e38-f7c2-492f-9d81-6583a103c3ac","12"
localhost,"True","4e208e38-f7c2-492f-9d81-6583a103c3ac","12"
С помощью @ Fourat
я отредактировал свой код в этой форме
Function Custom-Ping {
Param(
[string]$Address
)
$ping = ping $Address /w 1 /n 1
$result = ![string]::IsNullOrEmpty($ping -Like "*(0% Verlust)*")
return $result
}
$list = Import-Csv -Path D:\ipcheck3.csv -UseCulture
$x=$list.IP
$ErrorActionPreference = "SilentlyContinue"
foreach ($y in $x)
{
try
{
if(Custom-Ping $y)
{
Write-Host "$y responded"
$y | Export-Csv -Path D:\PingsuccededV3.csv -Append
}
else
{
Write-Host "$y was not responding"
$y | Export-Csv -Path D:\PingfailedV3.csv -Append
}
}
catch
{
Write-Warning "Textline from CMD Command or other Error"
}
}
, который работает правильно и быстрее