当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 执行网络任务

作者:精品下载站 日期:2024-12-14 03:02:37 浏览:11 分类:玩电脑

执行网络任务


该示例仅适用于Windows平台。

由于 TCP/IP 是最常用的网络协议,因此大多数低级网络协议管理任务都涉及 TCP/IP。在本节中,我们使用 PowerShell 和 WMI 来执行这些任务。

列出计算机的 IP 地址

要获取本地计算机上使用的所有 IP 地址,请使用以下命令:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExpandProperty IPAddress

由于 Win32_NetworkAdapterConfiguration 对象的 IPAddress 属性是一个数组,因此必须使用 Select-ObjectExpandProperty 参数查看完整的地址列表。

10.0.0.1
fe80::60ea:29a7:a233:7cb7
2601:600:a27f:a470:f532:6451:5630:ec8b
2601:600:a27f:a470:e167:477d:6c5c:342d
2601:600:a27f:a470:b021:7f0d:eab9:6299
2601:600:a27f:a470:a40e:ebce:1a8c:a2f3
2601:600:a27f:a470:613c:12a2:e0e0:bd89
2601:600:a27f:a470:444f:17ec:b463:7edd
2601:600:a27f:a470:10fd:7063:28e9:c9f3
2601:600:a27f:a470:60ea:29a7:a233:7cb7
2601:600:a27f:a470::2ec1

使用 Get-Member cmdlet,您可以看到 IPAddress 属性是一个数组:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Get-Member -Name IPAddress
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_NetworkAdapterConfiguration

Name      MemberType Definition
----      ---------- ----------
IPAddress Property   string[] IPAddress {get;}

每个网络适配器的 IPAddress 属性实际上是一个数组。定义中的大括号表示 IPAddress 不是 System.String 值,而是 System.String 值的数组。

列出 IP 配置数据

要显示每个网络适配器的详细 IP 配置数据,请使用以下命令:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true

网络适配器配置对象的默认显示是一组非常精简的可用信息。要进行深入检查和故障排除,请使用 Select-Object 或格式化 cmdlet(例如 Format-List)来指定要显示的属性。

在现代 TCP/IP 网络中,您可能对 IPX 或 WINS 属性不感兴趣。您可以使用 Select-ObjectExcludeProperty 参数来隐藏名称以“WINS”或“IPX”开头的属性。

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExcludeProperty IPX*,WINS*

此命令返回有关 DHCP、DNS、路由和其他次要 IP 配置属性的详细信息。

对计算机执行 Ping 操作

您可以使用 Win32_PingStatus 对计算机执行简单的 ping。以下命令执行 ping,但返回冗长的输出:

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'"

摘要信息的更有用的形式是显示地址、响应时间和状态代码属性,如以下命令生成的。 Format-TableAutosize 参数调整表列的大小,以便它们在 PowerShell 中正确显示。

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'" |
    Format-Table -Property Address,ResponseTime,StatusCode -Autosize
Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0

StatusCode 为 0 表示 ping 成功。

您可以使用阵列通过单个命令对多台计算机执行 ping 操作。由于地址不止一个,因此使用 ForEach-Object 分别 ping 每个地址:

'127.0.0.1','localhost','bing.com' |
  ForEach-Object -Process {
    Get-CimInstance -Class Win32_PingStatus -Filter ("Address='$_'") |
      Select-Object -Property Address,ResponseTime,StatusCode
  }

您可以使用相同的命令格式来 ping 一个子网上的所有地址,例如使用网络号 192.168.1.0 和标准 C 类子网掩码 (255.255.255.0) 的专用网络,只能 ping 192.168 范围内的地址。 1.1 到 192.168.1.254 是合法的本地地址(0 始终保留用于网络号,255 是子网广播地址)。

要在 PowerShell 中表示 1 到 254 之间的数字数组,请使用表达式 1..254。通过将范围内的每个值添加到 ping 语句中的部分地址,可以执行完整的子网 ping:

1..254| ForEach-Object -Process {
  Get-CimInstance -Class Win32_PingStatus -Filter ("Address='192.168.1.$_'") } |
    Select-Object -Property Address,ResponseTime,StatusCode

请注意,这种生成地址范围的技术也可以用在其他地方。您可以通过以下方式生成完整的地址集:

$ips = 1..254 | ForEach-Object -Process {'192.168.1.' + $_}

检索网络适配器属性

之前,我们提到您可以使用 Win32_NetworkAdapterConfiguration 类检索常规配置属性。虽然不是严格意义上的 TCP/IP 信息,但网络适配器信息(例如 MAC 地址和适配器类型)对于了解计算机的运行情况非常有用。要获取此信息的摘要,请使用以下命令:

Get-CimInstance -Class Win32_NetworkAdapter -ComputerName .

为网络适配器分配 DNS 域

要分配自动名称解析的 DNS 域,请使用 Win32_NetworkAdapterConfigurationSetDNSDomain 方法。 Invoke-CimMethodQuery 参数采用 WQL 查询字符串。该 cmdlet 调用在查询返回的每个实例上指定的方法。

$wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True'
$args = @{ DnsDomain = 'fabrikam.com'}
Invoke-CimMethod -MethodName SetDNSDomain -Arguments $args -Query $wql

IPEnabled=True 进行过滤是必要的,因为即使在仅使用 TCP/IP 的网络上,计算机上的多个网络适配器配置也不是真正的 TCP/IP 适配器。它们是支持所有适配器的 RAS、VPN、QoS 和其他服务的通用软件元素,因此没有自己的地址。

执行 DHCP 配置任务

修改 DHCP 详细信息涉及使用一组网络适配器,就像 DNS 配置一样。您可以使用 WMI 执行多种不同的操作。

查找启用 DHCP 的适配器

要在计算机上查找启用 DHCP 的适配器,请使用以下命令:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true"

要排除有 IP 配置问题的适配器,您可以仅检索启用 IP 的适配器:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true"

检索 DHCP 属性

由于适配器的 DHCP 相关属性通常以 DHCP 开头,因此您可以使用 Format-Table 的 Property 参数仅显示这些属性:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter  "IPEnabled=$true and DHCPEnabled=$true" |
  Format-Table -Property DHCP*

在每个适配器上启用 DHCP

要在所有适配器上启用 DHCP,请使用以下命令:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=True and DHCPEnabled=False'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

使用过滤器语句 IPEnabled=True 和 DHCPEnabled=False 可以避免在已启用 DHCP 的情况下启用 DHCP。

释放和续订特定适配器上的 DHCP 租约

Win32_NetworkAdapterConfiguration 类的实例具有 ReleaseDHCPLeaseRenewDHCPLease 方法。两者的使用方式相同。通常,如果您只需要释放或续订特定子网上的适配器的地址,请使用这些方法。过滤子网上适配器的最简单方法是仅选择使用该子网网关的适配器配置。例如,以下命令释放本地计算机上从 192.168.1.254 获取 DHCP 租约的适配器上的所有 DHCP 租约:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

续订 DHCP 租约的唯一变化是使用 RenewDHCPLease 方法而不是 ReleaseDHCPLease 方法:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName RenewDHCPLease -Query $wql

笔记

在远程计算机上使用这些方法时,请注意,如果通过已释放或续订租约的适配器连接到远程系统,您可能会失去对远程系统的访问权限。

释放和续订所有适配器上的 DHCP 租约

您可以使用 Win32_NetworkAdapterConfiguration 方法、ReleaseDHCPLeaseAllRenewDHCPLeaseAll 在所有适配器上执行全局 DHCP 地址释放或续订。但是,该命令必须应用于 WMI 类,而不是特定适配器,因为全局释放和续订租约是在该类上执行的,而不是在特定适配器上执行的。 Invoke-CimMethod cmdlet 可以调用类的方法。

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

您可以使用相同的命令格式来调用 RenewDHCPLeaseAll 方法:

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

创建网络共享

要创建网络共享,请使用Win32_ShareCreate方法:

Invoke-CimMethod -ClassName Win32_Share -MethodName Create -Arguments @{
    Path = 'C:\temp'
    Name = 'TempShare'
    Type = [uint32]0 #Disk Drive
    MaximumAllowed = [uint32]25
    Description = 'test share of the temp folder'
}

这相当于 Windows 上的以下 net share 命令:

net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

要调用带有参数的 WMI 类的方法,您必须知道哪些参数可用以及这些参数的类型。例如,您可以使用以下命令列出 Win32_Class 的方法:

(Get-CimClass -ClassName Win32_Share).CimClassMethods
Name          ReturnType Parameters                                   Qualifiers
----          ---------- ----------                                   ----------
Create            UInt32 {Access, Description, MaximumAllowed, Name…} {Constructor, Implemented, MappingStrings, Stati…
SetShareInfo      UInt32 {Access, Description, MaximumAllowed}        {Implemented, MappingStrings}
GetAccessMask     UInt32 {}                                           {Implemented, MappingStrings}
Delete            UInt32 {}                                           {Destructor, Implemented, MappingStrings}

使用以下命令列出 Create 方法的参数。

(Get-CimClass -ClassName Win32_Share).CimClassMethods['Create'].Parameters
Name            CimType Qualifiers                                  ReferenceClassName
----            ------- ----------                                  ------------------
Access         Instance {EmbeddedInstance, ID, In, MappingStrings…}
Description      String {ID, In, MappingStrings, Optional}
MaximumAllowed   UInt32 {ID, In, MappingStrings, Optional}
Name             String {ID, In, MappingStrings}
Password         String {ID, In, MappingStrings, Optional}
Path             String {ID, In, MappingStrings}
Type             UInt32 {ID, In, MappingStrings}

您还可以阅读 Win32_Share 类的 Create 方法的文档。

删除网络共享

您可以使用Win32_Share删除网络共享,但该过程与创建共享略有不同,因为您需要检索要删除的特定实例,而不是Win32_Share班级。以下示例删除共享 TempShare

$wql = 'SELECT * from Win32_Share WHERE Name="TempShare"'
Invoke-CimMethod -MethodName Delete -Query $wql

连接 Windows 可访问的网络驱动器

New-PSDrive cmdlet 可以创建映射到网络共享的 PowerShell 驱动器。

New-PSDrive -Name "X" -PSProvider "FileSystem" -Root "\Server01\Public"

但是,以这种方式创建的驱动器仅可用于创建它们的 PowerShell 会话。要映射 PowerShell 外部可用的驱动器(或映射到其他 PowerShell 会话),您必须使用 Persist 参数。

New-PSDrive -Persist -Name "X" -PSProvider "FileSystem" -Root "\Server01\Public"

笔记

在提升的上下文中运行时,持久映射的驱动器可能不可用。这是 Windows UAC 的默认行为。有关更多信息,请参阅以下文章:

  • 当 UAC 配置为提示输入凭据时,无法从提升的提示中使用映射驱动器

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯