使用PowerShell管理网络
2019-12-22河南刘景云
■ 河南 刘景云
编者按:熟悉和掌握与网络管理相关的Power Shell命令,对于管理员来说是极为重要的。本文将介绍使用Power Shell命令行如何能够实现更加快捷地管理网络。
对于Windo ws Server来说,一般情况下都是使用图形化工具来对网络进行管理。其实,在Windows中已经内置了Power Shell这款强大的命令行工具,可以很轻松地对网络进行高效的管理操作。
基本的网络配置命令
使用PowerShell可以进行网络初始化操作,获取网卡信息,配置IP/默认网关/DNS服务器地址等。因为在PowerShell中提供了不同的Module,在每个Module中提供了不同的命令和函数,可以执行各种配置操作。这里以Windows Server 2016系统为例进行说明,执行“Get-NetAdapter”命令,显示所有的网卡设备。执行“Get-NetIPAddress”命令,显示所有网卡的详细IP地址信息。这些命令实际上是由不同的Module来提供的,执行“Get-Command Get-NetAdapter”命令,在“Source”列中显示提供该函数具体的Module的名称。
例如想查看名为“NetAdapter”这个Module的话,可以执行“Get-Command -Module NetAdapte r”命令,可以显示该Module中提供的所有函数。执行“Get-Command -Module NetAdapter|measure”命令,显示具体的函数数量。执行“Get-Command -Module NetA dapter-Verb get”命令,可以查看在该Module中获取信息的函数。例如执行“Get-NetAdapterAdvancedPropert y-name Management”命令,显示关于名为“Management”这款网卡的高级属性信息。执行“Get-Command -Module NetAdapter -Verb set”命令,可以查看该Module中相关的设置函数。
例如,执行“Get-Net Adapter|where{$_.ifindex-eq 6}|Rename-NetAdapter-name"newAdapter"”命令,可以将选定的网卡更名为“netAdapter”,该命令中的“6”表示该网卡的索引编号,在查看网卡信息的命令中会显示该编号。
注意:该命令需要以管理员身份运行PowerSGell。
执行“Get-NetAdapter|where{$_.ifindex-eq 6}|N ew-NetIPAddress-IPAddres s 192.168.1.50 -DefaultG ateway '192.168.1.1'-Pre fixLength 24”命令,就可以针对目标网卡设置其IP和默认网关信息。执行“Set-DnsClientServerAddress-I nterfaceIndex 6 -ServerAd dresses '192.168.1.50'”命令,可以设置目标网卡的DNS服务器地址,其中的“6”表示该网卡的索引编号。执行“Get-Module”命令,显示使用过的或者已经加载的Module。
使用PowerShell进行网络诊断
对于PowerShell来说,不仅可以帮助用户配置网络信息,还可以帮助其完成对网络状态的基本诊断。例如执行“Get-Command Test-Co nnection”命令,可以测试主机的连通性,在返回信息中的“Source”列中显示其来自于“Microsoft.PowerSHell.Management”这 个Module,该命令的作用和PING探测是基本一致的。执行“Test-Connection-ComputerName server1.xxx.com”命令,可以测试和目标主机的连通性。和PING命令不同,该命令可以同时针对多台主机进行探测。
执行“Test-Connection-ComputerName server1.xx x.com,server2.xxx.com,se rver3.xxx.com”命令,可以依次对所有指定的主机进行连通性测试。
除了执行连通性测试之外,还可以使用该命令对目标主机进行远程管理。这需要使用到DCOM或者Windows Service Management协议。执行“Test-Connection-ComputerName server1.xx x.com -Protocol DCOM -Cou nt 1”命令,使 用DCOM协议和目标主机建立连接,并且指定连接的次数为1次。当连接成功后,执行“Get-Process -ComputerName ser ver1.xxx.com”命令,查看目标主机上的进程信息。
如果在执行上述命令时出错,那么原因有可能是因为域名解析失败造成的。执行“Get-NetIPConfiguratio n”命令,查看本机的网络配置信息, 在“DNSServer”栏中显示DNS服务器地址。执行“Get-Command Resolve-DnsName”命令,显示域名解析相关的是名为“DnsClient”的Module。
执行“Resolve-DnsName server1.xxx.com”命令,显示目标主机的域名解析信息。这其实类似于Nslookup命令的效果,但是在Nslookup命令中是无法显示默认DNS服务器的,这主要是没有配置反向解析的缘故。执行“Enter-PSSession server1.xxx.com”命令,连接到目标主机,在链接提示符下执行“Get-DnsServer”命令,显示DNS服务器的配置信息,假设在该主机上安装了DNS服务器的角色。在返回信息总的“ZoneName”栏中没有显示所需的反向解析区域,所以在Nslookup命令中不会显示默认DNS服务器的。
在远程连接提示符下执行“Add-DnsServerPrimaryZ one-NetworkId"192.168.1.0/24" ReplicationScope D omain-DynamicUpdate Nons ecureAndSecure”命令,可针对目标网段配置反向解析区域,设置域中所有DC都需要复制该DNS记录信息,设置合适的动态更新方式,这里假设使用了“192.168.1.0/24”的网段。
执行“Register-DnsCli ent”命令,添加注册信息。执行“exit”命令,退出远程连接环境。
在本地也可以执行上述命令,执行DNS记录的注册操作。
再次执行Nslookup命令,就可以发现其可以解析默认的服务器名称了。执行“Resolve-DnsName server1.xxx.com”命令,就会发现域名解析没有问题。这样,就排除了因为域名解析问题,导致的连接失败的情况。
执行“Get-Command-Module dnsclient”命令,显示名为“dnsclient”的Module中的所有函数。例如执行“Get-DNsClientCache”命令,查看本地的DNS缓存 信息。执行“Clear-DnsClientCache”命令,可以清除DNS缓存。
除了使用DCOM和WSMAN协议进行网络连接外,为了提高操作的灵活性,还可以使用Test-NetConnection命令来进行连接。执行“Get-Command Test-NetConnection” 命令,显示其隶属于名为“NetTCPIP”的Module。执行“Test-NetConnection-ComputerName server1xxx.com -CommonTCPPort HTTP”命令,可以测试目标主机的HTTP端口,在测试结果中的“TcpTestSucceded”栏中如果显示“True”,说明成功。
在“-CommonTCPPort”参数后面还可以跟随诸如RDP,SMB,WINRM等 类型。当然,也可以针对指定TCP端口进行特使。执行“Test-NetConnection-ComputerName server1.xx x.com -Port 3389”命令,可以测试远程桌面连接。虽然Test-NetConnection命令没有提供批量测试能力,但是可以采取变通的方式加以实现。例如执行“"server1xxx.com","server2xxx.com","s erver3xxx.com"|Test-NetC onnection-Port 3389”命令,即可对指定的所有主机进行连接测试。
实际上,如果本机配置了各种网络参数后,系统会自动连接名为“internetbeacon.msedge.net”的服务器,如果连接成功,系统就会认为本机可以顺利访问Internet。否则在表示无法访问。这就是网络自动发现功能。
因此,执行“Test-NetCo nnection”命令,会自动和该域名建立连接,如果连接成功,则会显示个该域名对应的IP地址等信息。执行“Test-NetConnection-ComputerName www.xxx.com-TraceRoute”命令,会显示和目标服务器连接的路由信息。执行“Test-NetConne ction -ComputerName www.xxx.com-InformationLevel"detailed"”命令,可以显示针对目标域名的更加详细的连接信息。如果目标主机开启了防火墙功能,也会造成连接失败的情况“Enter-PSSession server1.xxx.com”命令,连接到目标主机,在远程连接提示符下执行“Get-NetFirewallRule”命令,查看防火墙规则信息。
因为连接需要使用到ICMP协议,所以执行“Get-NetFirewallRule|Where{$_.name-like"*ic mp*"}|FT name,Displaynam e”命令,可以过滤和ICMP协议有关的规则。执行“Enable-NetFirewallRule-Name FPS-ICMP4-ERQ-IN”命令,允许使用ICMP协议进行连接。
当然,和防火墙管理相关命令有很多,执行“Get-Command-Module NetSecurity”命令,可以显示所有的相关函数。执行“exit”命令退回本地。执行“Test-Connection -Compute rName server1.xxx.com”命令便可顺利进行连接。