PowerShell基础教程(22)——执行网络任务 <o:p></o:p>
大多数低级网络协议管理任务都涉及 TCP/IP,因为 TCP/IP 是最常用的网络协议。我们将看一看如何使用 WMI 从 Windows PowerShell 完成其中的一些任务。
列出计算机的 IP 地址<o:p></o:p>
使用以下命令可以返回计算机正使用的所有 IP 地址:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .| Select-Object -Property IPAddress<o:p></o:p>
|
<o:p> </o:p>
此命令的输出与大多数属性列表不同,因为值将括在方括号中:
IPAddress
---------
{192.168.1.80}
{192.168.148.1}
{192.168.171.1}
{0.0.0.0}
若要了解为什么将它们括在方括号中,可以使用 Get-Member 仔细地查看 IPAddress 属性:
PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .| Get-Member -Name IPAddress
<o:p> </o:p>
<o:p> </o:p>
TypeName:System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapter
Configuration
<o:p> </o:p>
Name MemberType Definition
---- ---------- ----------
IPAddress Property System.String[] IPAddress {get;}
每个网络适配器的 IPAddress 属性实际上是一个数组。定义中的大括号指示 IPAddress 不是 System.String 值,而是 System.String 值的数组。
可以使用 Select-Object ExpandProperty 参数扩展这些值:
PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .| Select-Object -ExpandProperty IPAddress<o:p></o:p>
192.168.1.80<o:p></o:p>
192.168.148.1<o:p></o:p>
192.168.171.1<o:p></o:p>
0.0.0.0<o:p></o:p>
|
<o:p> </o:p>
列出 IP 配置数据<o:p></o:p>
若要为每个网络适配器显示详细的 IP 配置数据,可以使用以下命令:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .<o:p></o:p>
|
<o:p> </o:p>
<!----><!----><!---->请注意: <o:p></o:p>
网络适配器配置的默认显示是非常精简的一组可用信息。有关深入检查和疑难解答,请使用 Select-Object 强制显示更多属性。如果对 IPX 或 WINS 属性不感兴趣(很可能是在使用现代 TCP/IP 网络的情况下),也可以排除以 WINS 或 IPX 开头的所有属性:<o:p></o:p>
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .| Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*<o:p></o:p>
此命令将返回有关 DHCP、DNS、路由和其他次要 IP 配置属性的详细信息。<o:p></o:p>
<o:p> </o:p>
对计算机执行 Ping 操作<o:p></o:p>
可以使用 Win32_PingStatus 对计算机执行简单的 <st1:place w:st="on">Ping</st1:place> 操作。以下命令将执行 Ping 操作,但是返回冗长的输出:
Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .<o:p></o:p>
|
<o:p> </o:p>
摘要信息的更有用形式是仅显示 Address、ResponseTime 和 StatusCode 属性:
PS> Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .| Select-Object -Property Address,ResponseTime,StatusCode<o:p></o:p>
<o:p> </o:p>
Address ResponseTime StatusCode<o:p></o:p>
------- ------------ ----------<o:p></o:p>
127.0.0.1 0 0<o:p></o:p>
|
<o:p> </o:p>
状态代码 0 指示 <st1:place w:st="on">Ping</st1:place> 操作成功。
可以使用数组对整个系列的计算机执行 <st1:place w:st="on">Ping</st1:place> 操作。因为此处使用多个地址,所以需要使用 ForEach-Object 分别对每个地址执行 Ping 操作:
"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .}| Select-Object -Property Address,ResponseTime,StatusCode<o:p></o:p>
|
<o:p> </o:p>
可以使用相同的过程对整个子网执行 <st1:place w:st="on">Ping</st1:place> 操作。例如,若要检查使用网络号 192.168.1.0 的专用网络,并使用标准的 C 类子网掩码 (255.255.255.0),则只有 192.168.1.1 到 192.168.1.254 的范围内的地址才是合法的本地地址(0 始终是为网络号保留的,255 是子网广播地址)。
可以在 Windows PowerShell 中使用语句 1..254 获取从 1 到 254 的数字的数组,因此通过生成该数组并将值添加到 Ping 语句中的部分地址,可以对完整子网执行 Ping 操作:
1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1."+ $_ + "'") -ComputerName .}| Select-Object -Property Address,ResponseTime,StatusCode<o:p></o:p>
|
<o:p> </o:p>
<!----><!----><!---->请注意: <o:p></o:p>
该生成地址范围的方法也可以在别处使用。可以使用此方法生成一组完整地址:<o:p></o:p>
$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}<o:p></o:p>
<o:p> </o:p>
本入门中前面已经提到,可以使用 Win32_NetworkAdapterConfiguration 检索常规配置属性。虽然不是严格的 TCP/IP 信息,但是诸如 MAC 地址和适配器类型的网络适配器信息对于了解计算机的当前状况是很有用的。可以使用以下命令获取此信息的摘要:
Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .<o:p></o:p>
|
<o:p> </o:p>
为网络适配器指定 DNS 域<o:p></o:p>
可以使用 Win32_NetworkAdapterConfiguration SetDNSDomain 方法自动完成要在自动名称解析中使用的 DNS 域的指定。因为独立地为每个网络适配器配置指定 DNS 域,所以需要使用 ForEach-Object 语句来确保逐个选择适配器:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName .| ForEach-Object -Process { $_.InvokeMethod("SetDNSDomain", "fabrikam.com")}<o:p></o:p>
|
<o:p> </o:p>
在此处使用了筛选语句 IPEnabled=true,因为甚至在仅使用 TCP/IP 的网络上,计算机上的几个网络适配器配置也不是真正的 TCP/IP 适配器;它们是支持用于所有适配器的 RAS、PPTP、QoS 和其他服务的常规软件元素,因此没有它们自己的地址。
可以使用 Where-Object 而不是 Get-WmiObject Filter 筛选该命令:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName .| Where-Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.InvokeMethod("SetDNSDomain", "fabrikam.com")}<o:p></o:p>
|
<o:p> </o:p>
执行 DHCP 配置任务<o:p></o:p>
修改 DHCP 详细信息涉及使用一组适配器,就像 DNS 配置一样。有数个可以使用 WMI 执行的不同操作,我们将介绍其中的几个常见任务。
确定启用 DHCP 的适配器<o:p></o:p>
使用以下命令,可以在计算机上查找启用 DHCP 的适配器:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .<o:p></o:p>
|
<o:p> </o:p>
如果不查找有 IP 配置问题的适配器,则可以进一步将此限制为仅查找启用 IP 的适配器:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .<o:p></o:p>
|
<o:p> </o:p>
检索 DHCP 属性<o:p></o:p>
适配器的 DHCP 相关属性通常以 DHCP 开头,因此可以添加管道元素 Select-Object -Property DHCP* 以查看适配器的摘要 DHCP 信息:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .| Select-Object -Property DHCP*<o:p></o:p>
|
<o:p> </o:p>
若要在所有适配器上全局启用 DHCP,请使用
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName .| ForEach-Object -Process {$_.InvokeMethod("EnableDHCP", $null)}<o:p></o:p>
|
<o:p> </o:p>
可以改用 Filter 语句“IPEnabled=true and DHCPEnabled=false”,以免在已经启用 DHCP 处启用它,但是省略此步骤不会导致任何错误。
Win32_NetworkAdapterConfiguration 具有 ReleaseDHCPLease 和 RenewDHCPLease 方法。它们的使用方式是相同的。通常,如果仅需要为特定子网上的某个适配器解除或续订地址,则需要使用这些方法。筛选子网上适配器的最简单方法是,仅选择使用该子网网关的适配器配置。例如,以下命令将对本地计算机上正从 192.168.1.254 获取 DHCP 租约的适配器解除所有 DHCP 租约:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .| Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.InvokeMethod("ReleaseDHCPLease",$null)}<o:p></o:p>
|
<o:p> </o:p>
续订 DHCP 租约时的唯一更改是,调用 RenewDHCPLease 而不是 ReleaseDHCPLease:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .| Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.InvokeMethod("ReleaseDHCPLease",$null)}<o:p></o:p>
|
<o:p> </o:p>
<!----><!----><!---->请注意: <o:p></o:p>
对远程计算机使用这些方法时,如果是通过解除或续订租约的适配器连接到远程计算机的,则可能失去对远程计算机的访问。<o:p></o:p>
使用 Win32_NetworkAdapterConfiguration 的 ReleaseDHCPLeaseAll 和 RenewDHCPLeaseAll 方法,可以对所有适配器执行全局 DHCP 地址解除或续订。但是,该命令必须适用于 WMI 类,而不是特定的适配器,因为全局解除和续订租约是对类执行的,而不是对特定适配器执行的。
通过列出所有 WMI 类,然后按名称仅选择所需类,可以获取对 WMI 类而不是类实例的引用。例如,以下命令返回 Win32_NetworkAdapterConfiguration 类:
Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}<o:p></o:p>
|
<o:p> </o:p>
可以将整个命令视为类,然后对它调用 ReleaseDHCPAdapterLease 方法。在以下命令中,Get-WmiObject 和 Where-Object 管道元素括在圆括号中;这将强制首先计算它们:
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ) .InvokeMethod("ReleaseDHCPLeaseAll", $null)<o:p></o:p>
|
<o:p> </o:p>
可以使用相同的命令格式调用 RenewDHCPLeaseAll 方法:
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ) .InvokeMethod("RenewDHCPLeaseAll", $null)<o:p></o:p>
|
<o:p> </o:p>
可以使用 Win32_Share Create 方法创建网络共享:
(Get-WmiObject -List -ComputerName .| Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).InvokeMethod("Create",("C:\temp","TempShare",0,25,"test share of the temp folder"))<o:p></o:p>
|
<o:p> </o:p>
也可以在 Windows PowerShell 中使用 net share 创建共享
net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"<o:p></o:p>
|
<o:p> </o:p>
可以使用 Win32_Share 删除网络共享,但是该过程与创建共享稍有不同,因为需要检索要删除的特定共享,而不是 Win32_Share 类。以下语句将删除共享“TempShare”:
(Get-WmiObject -Class Win32_Share -ComputerName .-Filter "Name='TempShare'").InvokeMethod("Delete",$null)<o:p></o:p>
|
<o:p> </o:p>
也可以使用 Net share 删除它:
PS> net share tempshare /delete<o:p></o:p>
tempshare 已成功删除。<o:p></o:p>
|
<o:p> </o:p>
连接 Windows 可访问的网络驱动器<o:p></o:p>
使用 New-PSDrive 可以创建 Windows PowerShell 驱动器,但是这样创建的驱动器仅对 Windows PowerShell 可用。若要创建新的网络驱动器,可以使用 WScript.Network COM 对象。以下命令将共享 \\FPS01\users 映射到本地驱动器 B:
(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")<o:p></o:p>
|
<o:p> </o:p>
也可以使用 net use 命令做到这一点:
net use B:\\FPS01\users<o:p></o:p>
|
<o:p> </o:p>
使用 WScript.Network 或 net use 映射的驱动器立即对 Windows PowerShell 可用。
分享到:
相关推荐
在Windows系统中,批处理与PowerShell等更现代的脚本语言相结合,可以实现更为复杂和强大的自动化任务。 总之,批处理是一种简单而实用的工具,通过编写批处理脚本,用户可以自动化完成许多日常计算机操作,减轻...
1. **PowerShell基础知识**: PowerShell是一种面向对象的外壳,它取代了传统的CMD命令行,提供了更丰富的功能和更强大的脚本编写能力。它支持命令行操作,同时拥有一个强大的脚本语言——PowerShell Scripting ...
作为赞助人的实验室资源,这个压缩包很可能包含一系列的示例脚本、教程文档以及练习,帮助用户从基础到高级逐步掌握PowerShell。 1. **基础概念**: - PowerShell的工作原理:了解PowerShell的核心组件,包括运行...
同时,Linux的shell脚本编程能力也是提高工作效率的重要技能,它允许你自动化执行一系列任务。 Windows则是由微软公司开发的商业化操作系统,广泛应用于个人电脑和平板设备。Windows以其图形化用户界面和丰富的应用...
DOS的核心在于命令行界面,用户通过输入特定的命令来执行任务,如文件管理、磁盘操作、程序运行等。学习DOS,首先要掌握的是基本的命令语法和常用命令。例如,`dir`命令用来显示当前目录下的文件和子目录,`cd`用于...
用户需输入特定的命令来执行任务,例如`dir`用于查看目录,`copy`用于复制文件。 2. **文件系统管理**:DOS支持FAT(File Allocation Table)文件系统,用于组织和管理硬盘上的文件和目录。FAT16、FAT32是DOS时代...
例如,你可以在这里找到如何使用grep命令在大量文本中快速查找信息,或者如何使用Powershell在Windows环境中实现高级任务自动化。 接着,我们讨论一下LOLBAS的概念。LOLBAS的理论基础是,攻击者往往不依赖外部工具...
记事本虽然功能基础,但通过自动化工具,我们可以实现一些高效和复杂的任务,比如批量处理文本、自动化脚本编写等。 在描述中,“记事本_自动化”没有提供具体的信息,但我们可以推测这是关于如何利用编程或脚本...