在 Windows 11 中,WMIC(Windows Management Instrumentation Command-line)工具已被废弃,微软推荐使用 PowerShell 中的 Get-WmiObject 和 Get-CimInstance 等 cmdlet 来替代其功能。

在 Windows 11 中,WMIC(Windows Management Instrumentation Command-line)工具已被废弃,微软推荐使用 PowerShell 中的 Get-WmiObjectGet-CimInstance 等 cmdlet 来替代其功能。不过,WMIC 被停用可能会对一些管理和自动化任务造成影响,尤其是在一些自动化脚本或企业环境中,管理员习惯性依赖 WMIC 来获取系统信息或执行管理任务。以下是一些替代方案和另类思路,帮助解决这一问题:

1. PowerShell 的 Get-WmiObject 和 Get-CimInstance

  • Get-WmiObject: 这是 PowerShell 中最接近 WMIC 的 cmdlet,仍然可以获取系统的 WMI 信息。尽管它未来可能会被淘汰,但目前在很多系统中仍然有效。

    示例:

    powershellCopy Code
    Get-WmiObject -Class Win32_OperatingSystem
  • Get-CimInstance: 这是微软推荐的现代替代方案,采用更现代的通信协议(CIM — Common Information Model),性能较好,并且兼容性强。CIM 使用的是 WS-Man(Web Services for Management)协议,相对于 WMI(使用 DCOM),CIM 更加高效且易于跨平台使用。

    示例:

    powershellCopy Code
    Get-CimInstance -ClassName Win32_OperatingSystem

    差异:

    • Get-WmiObject 基于 DCOM 协议,性能和跨平台支持较差。
    • Get-CimInstance 基于 WS-Man 协议,支持远程管理,性能和兼容性更好。

2. 使用 PowerShell CIM Cmdlets 进行远程管理

  • PowerShell 的 CIM Cmdlets 不仅可以用来获取本地机器的信息,还能通过 远程 PowerShell 会话来管理远程机器。在许多情况下,CIM Cmdlets 提供了比 WMI 更好的性能和扩展性。

    示例(远程查询):

    powershellCopy Code
    Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName 'RemoteComputer'

    这样可以绕过 WMIC 的停用,并仍能执行跨机器的管理任务。

3. 替代的命令行工具

如果您更习惯于命令行而不想完全依赖 PowerShell,可以使用以下工具和命令来替代 WMIC:

  • Sysinternals 工具集:Sysinternals 是微软提供的一组强大的管理工具,许多 WMIC 能执行的操作,Sysinternals 的工具(如 PsExec, PsInfo, PsList 等)可以实现相同的功能。

    例如,使用 PsInfo 查看远程系统的硬件和操作系统信息:

    powershellCopy Code
    PsInfo \\RemoteComputer
  • PowerShell 远程命令:可以使用 Enter-PSSessionInvoke-Command 来实现远程命令执行,替代 WMIC 的远程功能。

    示例:

    powershellCopy Code
    Enter-PSSession -ComputerName RemoteComputer

    然后在远程会话中执行类似 WMIC 的命令。

4. 利用其他 WMI 工具

如果您仍然需要使用 WMI 进行管理操作,可以考虑使用一些其他的工具来代替 WMIC:

  • WMI Explorer: 这是一个图形界面的工具,允许你浏览 WMI 类和实例,执行查询等,适合用于管理和开发。
  • WBEMTest: Windows 内置的 WMI 测试工具,可以通过图形界面执行 WMI 查询和操作。

5. 编写自定义脚本或应用程序

如果现有的 PowerShell Cmdlets 不足以满足您的需求,您可以编写自定义脚本或小型应用程序,直接与 WMI 或 CIM 接口交互。例如,可以使用 .NET 提供的 System.Management 命名空间直接查询 WMI。

示例(C#):

csharpCopy Code
using System;
using System.Management;

class Program
{
    static void Main()
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
        foreach (ManagementObject os in searcher.Get())
        {
            Console.WriteLine("OS: " + os["Caption"]);
        }
    }
}

6. 使用第三方管理工具

  • Ansible: 一个自动化工具,可通过 WinRM 和 PowerShell 执行远程管理任务,完全替代 WMIC 的管理功能。
  • Chef, Puppet: 类似 Ansible,Chef 和 Puppet 可以自动化并管理 Windows 系统,提供丰富的模块来执行 WMI 类似的功能。

7. 使用 Windows Admin Center

如果您的环境中有多个 Windows 机器,并且希望有一个集中管理的解决方案,可以考虑 Windows Admin Center。这是微软提供的现代化 Web 控制台,支持对 Windows 服务器和工作站的全面管理,能替代许多传统管理工具的功能,包括 WMIC。


 

WMIC 的停用并不意味着 Windows 系统的管理能力受限。通过 PowerShell 的 Get-CimInstanceGet-WmiObject、Sysinternals 工具、远程 PowerShell 命令、以及第三方自动化工具(如 Ansible、Chef 等),管理员可以有效地替代 WMIC 并继续执行管理任务。

如果您在迁移过程中遇到困难,可以考虑逐步过渡到这些新的工具和方法,尤其是 PowerShell,既是微软推荐的解决方案,也是最具扩展性的现代管理平台。


讨论如何在 Windows 11 或更新的 Windows 系统中有效替代 WMIC,可以进一步探索一些常见的管理场景和更多替代方案。

8. 使用 PowerShell 执行常见的 WMIC 命令

如果你习惯使用 WMIC 命令来执行一些常见任务,比如获取系统信息、管理用户等,下面是几个常用 WMIC 命令的 PowerShell 替代方式:

获取操作系统信息

WMIC 命令:

bashCopy Code
wmic os get Caption, Version, BuildNumber

PowerShell 替代:

powershellCopy Code
Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object Caption, Version, BuildNumber

获取磁盘信息

WMIC 命令:

bashCopy Code
wmic diskdrive get model, size

PowerShell 替代:

powershellCopy Code
Get-CimInstance -ClassName Win32_DiskDrive | Select-Object Model, Size

获取系统的 CPU 信息

WMIC 命令:

bashCopy Code
wmic cpu get caption, maxclockspeed

PowerShell 替代:

powershellCopy Code
Get-CimInstance -ClassName Win32_Processor | Select-Object Caption, MaxClockSpeed

获取计算机的网络适配器信息

WMIC 命令:

bashCopy Code
wmic nic get name, macaddress

PowerShell 替代:

powershellCopy Code
Get-CimInstance -ClassName Win32_NetworkAdapter | Select-Object Name, MACAddress

获取计算机上的所有用户信息

WMIC 命令:

bashCopy Code
wmic useraccount get name, domain, disabled

PowerShell 替代:

powershellCopy Code
Get-CimInstance -ClassName Win32_UserAccount | Select-Object Name, Domain, Disabled

9. 使用 PowerShell 远程执行管理任务

PowerShell 提供了强大的远程管理功能,您可以通过 Enter-PSSessionInvoke-Command 命令在远程计算机上执行 WMIC 替代命令。这样的好处是可以集中管理多个机器,而无需在每个机器上分别执行操作。

启用 PowerShell 远程管理

首先,确保在目标机器上启用了 PowerShell 远程管理(PowerShell Remoting)功能:

powershellCopy Code
Enable-PSRemoting -Force

远程执行命令

然后,您可以通过 Invoke-Command 在远程计算机上执行 PowerShell 命令。

powershellCopy Code
Invoke-Command -ComputerName RemoteComputerName -ScriptBlock {
    Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object Caption, Version, BuildNumber
}

如果目标机器的 PowerShell Remoting 已启用且配置正确,上面的命令将会返回远程计算机的操作系统信息。

创建远程会话

如果你需要与远程计算机建立交互式会话,可以使用 Enter-PSSession 命令:

powershellCopy Code
Enter-PSSession -ComputerName RemoteComputerName

在远程会话中,你可以执行任何 PowerShell 命令,就像在本地机器上一样。

10. Sysinternals 工具集替代方案

微软的 Sysinternals 工具集提供了多种用于系统诊断和管理的命令行工具,这些工具可作为 WMIC 的有效替代方案。

  • PsExec:通过 PsExec 可以在远程计算机上执行命令,类似于 WMIC 提供的远程管理功能。

    示例:

    powershellCopy Code
    PsExec \\RemoteComputerName cmd
  • PsInfo:类似于 WMIC,您可以通过 PsInfo 获取远程计算机的系统信息,包括操作系统版本、安装日期等。

    示例:

    powershellCopy Code
    PsInfo \\RemoteComputerName
  • PsList:用于查看远程计算机上的进程信息。

    示例:

    powershellCopy Code
    PsList \\RemoteComputerName

这些工具在许多情况下都比 WMIC 更加灵活和高效。

11. 管理群集和虚拟化环境

在涉及到虚拟化和群集管理时,传统的 WMIC 功能无法满足现代环境的需求。可以使用以下微软工具来替代:

Hyper-V 管理

在管理虚拟机时,可以使用 PowerShell 的 Hyper-V 模块来执行虚拟机创建、配置和管理等任务。WMIC 过去也常用于虚拟机相关信息的查询,但 PowerShell 提供了更强大的控制能力。

示例:列出所有虚拟机

powershellCopy Code
Get-VM

Windows Admin Center

Windows Admin Center 是一个基于 Web 的管理工具,专门用于管理 Windows Server 和 Windows 10/11 的集群、虚拟机、存储等。它的功能非常强大,可以替代很多传统的命令行工具和管理界面,特别适合需要集中管理多个服务器的环境。

  • 支持远程桌面、文件管理、事件查看器等多种管理功能。
  • 支持与 Azure 集成,提供现代化的云管理功能。

12. 管理和自动化

对于需要在多个计算机上执行重复管理任务的管理员,除了 PowerShell,自动化工具也非常重要:

  • Ansible:Ansible 是一个开源的自动化工具,可以通过 SSH 或 WinRM 与 Windows 系统进行交互,替代 WMIC 实现系统管理。

    示例:

    yamlCopy Code
    - name: Get OS information
      win_command: systeminfo
      register: os_info
    
    - debug:
        var: os_info.stdout
  • Puppet & Chef:这两款工具同样可以用于自动化配置和管理,支持跨平台操作,并且可以通过其专门的 Windows 管理模块替代 WMIC。

13. 自定义脚本与应用程序

如果您有特殊的需求或无法通过现有工具解决问题,可以使用编程语言(如 C# 或 Python)直接与 WMI 接口进行交互,或者开发自定义工具来完成所需的任务。

  • C# 示例(查询 CPU 信息)

    csharpCopy Code
    using System;
    using System.Management;
    
    class Program
    {
        static void Main()
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
            foreach (ManagementObject queryObj in searcher.Get())
            {
                Console.WriteLine("CPU: " + queryObj["Name"]);
            }
        }
    }
  • Python 示例(查询操作系统信息)

    pythonCopy Code
    import wmi
    
    c = wmi.WMI()
    for os in c.Win32_OperatingSystem():
        print(f"OS: {os.Caption}, Version: {os.Version}")

通过这些自定义脚本,可以轻松获取和操作系统信息、硬件信息等,并实现与 WMIC 相似的功能。


 

尽管 WMIC 已被废弃,但 Windows 系统依然提供了丰富的替代方案,通过 PowerShell(尤其是 Get-CimInstanceGet-WmiObject)、Sysinternals 工具集远程管理功能自动化工具(如 Ansible) 等方式,您可以无缝地管理和自动化 Windows 系统和应用。对于复杂的需求,您还可以开发自定义脚本或应用程序,通过 WMI 或 CIM 接口直接进行交互。

选择适合自己工作流和管理环境的工具,可以确保平稳过渡到新的管理方式,并提高系统的管理效率。


探讨如何在 Windows 11 和更高版本中更好地替代 WMIC,并扩展一些高级管理和自动化技巧。

14. 管理系统服务和进程

WMIC 还常被用于管理和查询系统服务、进程等信息。PowerShell 在这方面也提供了强大的替代功能。

获取系统服务信息

WMIC 命令:

bashCopy Code
wmic service get name, state, startmode

PowerShell 替代:

powershellCopy Code
Get-Service | Select-Object Name, Status, StartType

这条 PowerShell 命令列出了所有服务的名称、状态(运行中或已停止)和启动类型(自动、手动、禁用)。

管理系统进程

WMIC 命令:

bashCopy Code
wmic process list brief

PowerShell 替代:

powershellCopy Code
Get-Process | Select-Object Name, Id, CPU, Path

这条 PowerShell 命令列出了所有进程的名称、ID、CPU 占用和路径,您也可以根据需要筛选和排序进程信息。

停止或启动服务

WMIC 命令:

bashCopy Code
wmic service where "name='ServiceName'" call stopservice

PowerShell 替代:

powershellCopy Code
Stop-Service -Name "ServiceName"
powershellCopy Code
Start-Service -Name "ServiceName"

PowerShell 提供了更简洁和可编程的命令来启动或停止服务。

15. Windows Event Viewer(事件查看器)替代

WMIC 有时也被用来查询和查看事件日志。PowerShell 提供了更加灵活的日志管理方式,您可以根据事件 ID 或时间范围来筛选和分析日志。

查询事件日志

WMIC 命令:

bashCopy Code
wmic nteventlog where "Logfile = 'Application'" get Message, TimeWritten

PowerShell 替代:

powershellCopy Code
Get-WinEvent -LogName Application | Select-Object Message, TimeCreated

这条 PowerShell 命令可以获取“应用程序”日志中的所有事件及其消息和时间戳。您可以根据需要使用 Where-Object 进一步过滤特定事件。

查询特定事件

如果你只想查看某些特定事件(例如错误或警告),可以使用以下 PowerShell 命令:

powershellCopy Code
Get-WinEvent -LogName Application | Where-Object {$_.LevelDisplayName -eq "Error"} | Select-Object TimeCreated, Message

16. 批量操作和远程管理

除了 PowerShell 之外,您还可以使用其他工具进行批量管理,尤其是在多个计算机上执行任务时。结合 Windows 的远程管理功能,您可以同时管理多个系统,避免手动在每台机器上执行命令。

使用 PowerShell 远程执行任务

PowerShell 远程管理是通过 PowerShell Remoting 功能实现的,您可以使用 Invoke-Command 在远程计算机上执行脚本。通过集成多个任务,您可以批量操作多个机器。

假设您希望在多个远程计算机上执行查询操作:

powershellCopy Code
$computers = @("Computer1", "Computer2", "Computer3")
Invoke-Command -ComputerName $computers -ScriptBlock {
    Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object Caption, Version
}

您也可以为每台计算机分别指定不同的操作:

powershellCopy Code
$computers = @("Computer1", "Computer2", "Computer3")
Invoke-Command -ComputerName $computers -ScriptBlock {
    Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name
}

这种方法可以帮助您同时管理多台机器,大大提高效率。

17. 自动化和调度任务

在 Windows 系统中,PowerShell 可以通过 Windows Task Scheduler(任务调度程序)来执行定时任务,类似于 WMIC 中的一些自动化任务。结合 PowerShell 脚本,您可以安排系统的定期维护和监控任务。

使用 Task Scheduler 执行 PowerShell 脚本

假设您有一个 PowerShell 脚本需要定期运行,您可以创建一个任务来自动执行它:

  1. 打开任务调度程序,选择“创建基本任务”。
  2. 输入任务名称和描述。
  3. 在“触发器”部分设置任务的执行频率(每天、每周等)。
  4. 在“操作”部分选择“启动程序”,并指定要运行的 PowerShell 脚本路径。
  5. 完成后,任务将会根据指定的时间间隔自动运行。

使用 PowerShell 脚本调度任务

您也可以通过 PowerShell 脚本来创建和管理任务。例如,创建一个每天执行的任务:

powershellCopy Code
$Action = New-ScheduledTaskAction -Execute "Powershell.exe" -Argument "C:\Scripts\MyScript.ps1"
$Trigger = New-ScheduledTaskTrigger -Daily -At "3:00PM"
$TaskSettings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
Register-ScheduledTask -Action $Action -Trigger $Trigger -TaskName "MyScheduledTask" -Settings $TaskSettings

这个脚本将在每天的 3 点自动运行 MyScript.ps1 文件。

18. 使用 Windows Admin Center

如果您的环境中有多个 Windows 服务器或计算机,Windows Admin Center 是一个非常强大的管理工具,可以替代很多传统的命令行工具(包括 WMIC)来进行集中管理。

Windows Admin Center 提供了一个 Web 界面,您可以在其中:

  • 远程管理多个计算机。
  • 查看和配置网络、存储、计算资源。
  • 管理虚拟机、容器等。
  • 执行实时监控和日志查看。

它非常适合企业级环境,特别是涉及到多个计算机和服务器的管理。

19. 结合 Azure 服务进行云端管理

如果您使用 Azure 云服务,PowerShell 和 Azure CLI 也可以与本地 Windows 环境集成,实现跨平台、跨环境的管理。例如,Azure Automation 可以帮助您将脚本自动化,Azure Monitor 可以实时监控您的基础设施。

使用 Azure Automation 执行任务

Azure Automation 允许您创建 Runbook(自动化脚本),这些脚本可以在 Azure 中托管,并且可以跨多台机器运行。

例如,您可以创建一个自动化任务,在 Azure 中定期检查本地机器的操作系统版本或 CPU 使用率,并根据条件触发警报或进一步的操作。

powershellCopy Code
# 在 Azure Automation 中执行的 PowerShell 脚本示例
Get-AzureVM | Select-Object Name, Status, Location

监控和自动化日志

Azure Monitor 与 PowerShell 的集成也让日志管理变得更加高效。例如,您可以使用以下命令将 Windows 事件日志上传到 Azure Monitor:

powershellCopy Code
Send-AzureRmLog -ResourceGroupName "MyResourceGroup" -EventLog "Application"

通过这种方式,您可以实时分析所有服务器的日志,并通过 Azure 的 AI 功能进行深度分析和自动化响应。

 

通过上述工具和方法,您可以有效地替代 WMIC 并提高 Windows 系统管理的效率。PowerShell、Windows Admin Center、Azure 服务、Sysinternals 工具集等都提供了比 WMIC 更强大和灵活的功能。

  • PowerShell 是最重要的替代工具,它可以通过 Get-CimInstanceGet-WmiObject 等命令代替 WMIC 完成大部分管理任务。
  • 远程管理(通过 PowerShell Remoting、Sysinternals 工具、Azure)使您能够跨多台计算机集中管理。
  • 自动化和调度任务 使日常管理任务得以自动化,并确保系统维护的持续性。
  • Windows Admin Center 和 Azure 服务 提供了现代化的管理平台,适合大规模 IT 环境。

这些工具和技术可以帮助您轻松过渡到 WMIC 废弃后的管理方式,同时提高管理效率和灵活性。


 

posted @ 2024-12-03 12:58  suv789  阅读(176)  评论(0编辑  收藏  举报