`

PowerShell基础教程(22)——执行网络任务

阅读更多

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>

此命令将返回有关 DHCPDNS、路由和其他次要 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>

摘要信息的更有用形式是仅显示 AddressResponseTime 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>

检索网络适配器属性<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 适配器它们是支持用于所有适配器的 RASPPTPQoS 和其他服务的常规软件元素因此没有它们自己的地址。

可以使用 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<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 处启用它但是省略此步骤不会导致任何错误。

对特定适配器解除和续订 DHCP 租约<o:p></o:p>

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>

对所有适配器解除和续订 DHCP 租约<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>

创建网络共享<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>

删除网络共享<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 可用。

 
分享到:
评论

相关推荐

    PowerShell基础教程.doc

    ◆Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象; ◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口; ◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用...

    powershell教程

    powershell学习教程,powershell学习教程powershell学习教程powershell学习教程powershell学习教程powershell学习教程powershell学习教程

    Windows PowerShell教程合集

    --|PowerShell基础教程 --|WindowsPowerShelluserGuide |powershell 中文教程 --|Windows PowerShell 入门指南.pdf --|Windows PowerShell 入门.pdf --|Windows PowerShell 语言快速参考.rtf |Manning.Windows....

    Powershell 实例教程

    Powershell 实例教程 Powershell 实例教程Powershell 实例教程

    PowerShell基础教程

    PowerShell基础教程,需要的请下载

    PowerShell打印服务器打印任务状态监控_打印出错自动邮件报警

    使用PowerShell脚本自动监控服务器或者电脑上的所有打印机驱动,如果有Error的任务卡在驱动中导致后续的打印任务全部卡在上面,脚本会执行一个邮件通知 邮件通知内容: - 打印机名 - Error状态的打印机任务名 - ...

    精通windows server 2008 命令行与powershell电子书PDF版(第一卷)

    3.4.10 schtasks——任务计划 132 3.5 任务管理 145 3.5.1 shutdown——关闭或重启计算机 145 3.5.2 start——运行 146 3.5.3 tapicfg——TAPI应用程序目录分区 147 3.5.4 taskkill——结束任务进程 149 3.5.5 ...

    精通windows server 2008 命令行与powershell 电子书PDF单文件完整版

    3.4.10 schtasks——任务计划 132 3.5 任务管理 145 3.5.1 shutdown——关闭或重启计算机 145 3.5.2 start——运行 146 3.5.3 tapicfg——TAPI应用程序目录分区 147 3.5.4 taskkill——结束任务进程 149 3.5.5 ...

    精通windows server 2008 命令行与powershell电子书PDF版(第二卷)

    3.4.10 schtasks——任务计划 132 3.5 任务管理 145 3.5.1 shutdown——关闭或重启计算机 145 3.5.2 start——运行 146 3.5.3 tapicfg——TAPI应用程序目录分区 147 3.5.4 taskkill——结束任务进程 149 3.5.5 ...

    PowerShell 基础教程

    ◆Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象; ◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口; ◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用...

    精通windows server 2008 命令行与powershell电子书PDF版(第三卷)

    3.4.10 schtasks——任务计划 132 3.5 任务管理 145 3.5.1 shutdown——关闭或重启计算机 145 3.5.2 start——运行 146 3.5.3 tapicfg——TAPI应用程序目录分区 147 3.5.4 taskkill——结束任务进程 149 3.5.5 ...

    精通windows server 2008 命令行与powershell 电子书PDF版(第四卷)

    3.4.10 schtasks——任务计划 132 3.5 任务管理 145 3.5.1 shutdown——关闭或重启计算机 145 3.5.2 start——运行 146 3.5.3 tapicfg——TAPI应用程序目录分区 147 3.5.4 taskkill——结束任务进程 149 3.5.5 ...

    Win7PowerShell使用教程

    Win7PowerShell使用教程,学习这个脚本还是有好处的,看看吧

    Powershell管理系列教程.docx

    Powershell管理系列教程,Powershell 操作AD Powershell 管理域帐号

    Powershell教程

    非常好用的Powershell教程,共享给大家

    Powershell_技术教程

    PowerShell 提供了也许是最简单且最灵活的方法来自动执行各种各样的管理任务,从而您的工作效率和效力都得到提高。 但更为重要的是,Microsoft 正在 PowerShell™ 之上构建 Exchange Server 2007 和 System Center ...

    powershell 教程

    powershell可以提高工作效率,用于服务器管理,浅显易懂。

    PowerShell 入门基础教程

    Windows PowerShell 是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。 现在win2008,win7都集成了PowerShell,系统不带PowerShell可以...

    操作系统安全:常用的PowerShell命令.pptx

    为防止恶意脚本的执行,PowerShell有一个执行策略,默认情况下,这个执行策略被设为受限的,意味PowerShell脚本无法执行,;你可以使用下面的Get-ExecutionPolicy命令确定当前的执行策略:;2. 像文件系统那样操作...

    PowerShell中Job相关命令及并行执行任务详解

    在 PowerShell 中可以轻松的执行后台任务并且让多个后台任务并行执行。本文介绍 PowerShell 中 Job 相关的一些命令,并通过 demo 演示如何在后台同时执行多个任务。下面话不多说了,来一起看看详细的介绍吧。 ...

Global site tag (gtag.js) - Google Analytics