пятница, 16 августа 2019 г.

PowerShell Comparison Operators

Ping

http://qaru.site/questions/629995/powershell-test-connection-failed-due-to-lack-of-resources

Test-Connection не отвечает хорошо, когда DNS не отвечает адресом или недоступен в сети. То есть, если командлет решает, что он вообще не может отправить пинг, это ошибки с неприятными способами, которые трудно уловить или игнорировать. Test-Connection полезен, тогда вы можете гарантировать, что DNS будет разрешать имя по адресу и что сеть всегда будет присутствовать.
Я предпочитаю использовать WMI pings:
$Ping = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$ComputerName' AND Timeout=1000";
$Ping2 = Get-CimInstance -ClassName Win32_PingStatus -Filter "Address='$ComputerName' AND Timeout=1000";
$StatusCodes = @{
    [uint32]0     = 'Success';
    [uint32]11001 = 'Buffer Too Small';
    [uint32]11002 = 'Destination Net Unreachable';
    [uint32]11003 = 'Destination Host Unreachable';
    [uint32]11004 = 'Destination Protocol Unreachable';
    [uint32]11005 = 'Destination Port Unreachable';
    [uint32]11006 = 'No Resources';
    [uint32]11007 = 'Bad Option';
    [uint32]11008 = 'Hardware Error';
    [uint32]11009 = 'Packet Too Big';
    [uint32]11010 = 'Request Timed Out';
    [uint32]11011 = 'Bad Request';
    [uint32]11012 = 'Bad Route';
    [uint32]11013 = 'TimeToLive Expired Transit';
    [uint32]11014 = 'TimeToLive Expired Reassembly';
    [uint32]11015 = 'Parameter Problem';
    [uint32]11016 = 'Source Quench';
    [uint32]11017 = 'Option Too Big';
    [uint32]11018 = 'Bad Destination';
    [uint32]11032 = 'Negotiating IPSEC';
    [uint32]11050 = 'General Failure'
    };
$StatusCodes[$Ping.StatusCode];
$StatusCodes[$Ping2.StatusCode];
В качестве альтернативы, я использовал .Net Pings, как @BenH, также описанный, который много работает для вас. Была причина, по которой я прекратил использовать их в пользу WMI и CIM, но я больше не могу вспомнить, что это за причина.