从入门到精通:掌握 CMD 与 PowerShell 之间的秘密

news2024/9/20 0:23:27

在日常使用 Windows 系统时,很多人都习惯于打开 CMD(命令提示符)来执行各种操作,从简单的文件管理到复杂的脚本编写,CMD 作为一个经典的工具确实陪伴我们走过了漫长的岁月。然而,随着系统管理需求的提升和自动化任务的复杂化,CMD 的局限性日益显现。此时,PowerShell 应运而生,它不仅继承了 CMD 的传统,还在此基础上大幅扩展,成为了一个功能强大、灵活多变的命令行和脚本编写环境

在本文呢中,我们将一起深入探讨 CMD 与 PowerShell 之间的区别,了解为什么 PowerShell 能够成为 CMD 的完美替代品。我们还会解密 PowerShell 中的独门利器——Cmdlet,看看它们如何帮助你轻松应对系统管理和任务自动化的挑战。最后,你将学会如何自定义并封装自己的 Cmdlet,让 PowerShell 真正成为你的得力助手。无论你是一个初学者还是经验丰富的 IT 专业人士,本文都会为你打开一扇通往更高效、更强大 Windows 管理世界的大门。

1.CMD 与 PowerShell 的区别

  1. 历史背景与发展

    • CMD:作为 Windows 的传统命令行工具,CMD 源于早期的 DOS 操作系统,具有简单的命令集和功能,主要用于执行基础的 Windows 系统命令。
    • PowerShell:推出于 2006 年,是一种更现代化的命令行界面和脚本语言环境,专为系统管理和自动化任务设计。它不仅能执行 Windows 命令,还集成了 .NET 框架,支持丰富的 Cmdlet 和复杂的脚本操作。
  2. 功能对比

    • 命令支持
      • CMD 仅支持基本的 Windows 命令,功能较为单一。
      • PowerShell 支持 Cmdlet、脚本语言特性(如变量、函数、循环)和传统的 CMD 命令,还能执行 Linux 风格的命令(通过别名实现)。
    • 脚本与扩展性
      • CMD 的脚本功能局限于批处理脚本,缺乏强大的编程能力。
      • PowerShell 则是一个完整的脚本语言环境,可以编写复杂的自动化脚本,操作对象和数据更加灵活。
    • 兼容性与别名机制
      • 为了兼容旧版的 CMD,PowerShell 通过 alias(别名)机制,将 CMD 命令映射到等效的 PowerShell Cmdlet。例如,在 PowerShell 中输入 dir 实际上调用的是 Get-ChildItem
      • 你可以通过 Get-Alias 查看所有别名映射关系,或通过 Get-Command 查看命令对应的 Cmdlet。
        在这里插入图片描述

2.Cmdlet 的场景及命令使用

  1. Cmdlet 概述

    Cmdlet 是 PowerShell 中专用的命令,它们由 .NET 库编写,设计用于执行特定任务。与传统的命令不同,Cmdlet 返回的是 .NET 对象,而不是文本。这使得数据处理更加灵活,可以通过管道符 | 将数据流从一个命令传递到另一个命令。

  2. Cmdlet 的作用

    • 系统管理:通过 Cmdlet,你可以轻松地管理和监控系统资源,如进程、服务、文件系统等。Cmdlet 如 Get-Process 可以帮助你查看所有运行的进程,Start-Service 则可以启动指定服务。
    • 自动化任务:借助 Cmdlet,你可以编写脚本自动执行重复性任务,从而提高工作效率。例如,通过 Get-EventLog 查看事件日志并使用 Export-Csv 导出为 CSV 文件,你可以轻松完成数据的采集和存档。
    • 数据处理与转换:Cmdlet 能够处理和转换数据,适合用于管道式操作。比如,Select-Object 可以选择对象的特定属性,Where-Object 则用于筛选符合条件的数据。
  3. 常用 Cmdlet 示例

    • 系统信息管理
      • Get-Process:获取当前正在运行的进程信息。
      • Get-Service:列出系统中所有服务及其状态。
    • 文件与目录操作
      • Get-ChildItem(别名 dir):列出指定目录的内容。
      • Copy-Item:复制文件或文件夹。
    • 网络管理
      • Test-Connection(类似 ping):测试网络连接。
      • Get-NetIPAddress:获取当前系统的 IP 地址信息。
  4. 管道符的使用

    • PowerShell 中的管道符 | 允许将一个 Cmdlet 的输出作为另一个 Cmdlet 的输入。这种设计使得复杂的数据处理任务可以通过简单的命令链实现。
    • 示例
      • Get-Process | Where-Object {$_.CPU -gt 100}:筛选出 CPU 占用超过 100 的进程。
      • Get-ChildItem | Sort-Object Name:按文件名排序目录内容。
  5. Alias 与 Cmdlet 的兼容性

    • PowerShell 为了兼容传统的 CMD 命令,通过 alias(别名)机制将旧命令映射到对应的 Cmdlet。例如,输入 ls 实际上调用的是 Get-ChildItem
    • 使用 Get-Alias 可以查看所有的别名映射关系,使用 Get-Command 可以查看某个命令对应的实际 Cmdlet。

3.自定义封装 Cmdlet 命令

  1. 什么是自定义 Cmdlet?

    • 自定义 Cmdlet 是指用户通过 PowerShell 脚本或编写 .NET 代码扩展 PowerShell 功能,创建新的命令。这种灵活性允许你根据特定需求来设计命令,提升工作流程的效率。
  2. 示例:通过脚本自定义 Cmdlet

    • 你可以直接在 PowerShell 脚本中定义一个自定义函数,像使用 Cmdlet 一样调用它。以下是一个示例代码:
    function Get-LargeFiles {
        param (
            [string]$Path = ".",
            [int]$SizeThresholdMB = 100
        )
        
        Get-ChildItem -Path $Path -Recurse | Where-Object {
            $_.Length -gt ($SizeThresholdMB * 1MB)
        } | Select-Object Name, Length, FullName
    }
    
    # 使用示例
    Get-LargeFiles -Path "C:\Your\Directory" -SizeThresholdMB 500
    
    • 解释
      • Get-LargeFiles 是一个自定义的 Cmdlet,它接受目录路径和文件大小阈值两个参数,递归搜索目录下大于指定大小的文件,并输出其名称、大小和完整路径。
      • 通过管道符将 Get-ChildItem 的输出传递给 Where-Object 来筛选符合条件的文件,最后使用 Select-Object 提取并显示相关属性。
  3. 示例:通过 .NET 代码创建 Cmdlet

    • 如果你需要更高级的功能,可以通过 C# 编写 .NET 程序并将其打包成 Cmdlet。在 Visual Studio 中创建一个新的类库项目,然后参考以下代码:
    using System;
    using System.Management.Automation;
    
    [Cmdlet(VerbsCommon.Get, "Greeting")]
    public class GetGreetingCmdlet : Cmdlet
    {
        [Parameter(Mandatory = true)]
        public string Name { get; set; }
    
        protected override void ProcessRecord()
        {
            WriteObject($"Hello, {Name}!");
        }
    }
    
    • 解释
      • Get-Greeting 是一个自定义 Cmdlet,用于生成问候语。它接受一个 Name 参数并输出相应的问候信息。
      • 将此类库编译为 DLL 后,可以通过 Import-Module 命令加载到 PowerShell 中,然后像使用其他 Cmdlet 一样调用 Get-Greeting
  4. 总结
    自定义 Cmdlet 可以根据实际需求扩展 PowerShell 的功能,无论是通过脚本函数还是编写 .NET 代码,都能为你的工作提供极大的便利和灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是EDR、NDR、MDR、XDR?他们之间什么区别?

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 概述 EDR是什…

opencv之图像平滑处理

文章目录 前言1.什么是平滑处理2.均值滤波2.1基本原理2.1 函数语法 3.方框滤波3.1基本原理3.2函数语法 4.高斯滤波4.1基本原理4.2函数语法 5.中值滤波5.1基本原理5.2 函数语法 6.双边滤波6.1基本原理 温馨提示 前言 **图像平滑处理是图像处理和计算机视觉领域中的一个核心技术…

yolov8改进策略,有可以直接用的代码,80余种改进策略,有讲解

YOLOv8改进策略介绍 YOLOv8是在YOLOv7的基础上进一步发展的目标检测模型,继承了YOLO系列模型的优点,如实时性、准确性和灵活性。然而,任何模型都有进一步改进的空间,以提高其性能、准确性和鲁棒性。下面是针对YOLOv8的一些改进策…

电容的分类

电容作为电子产品中不可或缺的元件,其种类繁多,各具特色。以下是电容的主要分类、作用及优缺点概述: 一、电容的分类 电容的分类方式多样,常见的分类方式包括按结构、用途、电解质类型及制造材料等。 按结构分类: 固…

搞懂奇偶校验

当我们有一串二进制的数据时,如何在这串二进制数据的最前面,或者最后面,添加一位的奇检验位或者偶校验位呢? (1)首先要明确使用什么校验:你使用奇校验,还是偶检验? &am…

使用 EasyExcel 高效读取大文件 Excel

使用 EasyExcel 高效读取大文件 Excel 的最佳实践 在现代应用中,数据处理经常涉及到大规模数据集的处理,Excel 作为一种常见的文件格式,经常用于数据导入和导出。然而,传统的 Excel 处理库如 Apache POI 在处理大文件时可能会面临…

基于Java+SpringBoot+Vue的植物健康系统

基于JavaSpringBootVue的植物健康系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅 某信 gzh 搜索【智能编程小助手】获取项…

(学习总结15)C++11小语法与拷贝问题

C11小语法与拷贝问题 auto关键字范围forinitializer_list深拷贝与浅拷贝写时拷贝 以下代码环境为 VS2022 C。 auto关键字 在早期 C/C 中 auto 的含义是:使用 auto 修饰的变量,是具有自动存储器的局部变量,不过一般都会隐藏,导致…

科研绘图 - Python - 柱状图代码及展示

1 import pandas as pd import matplotlib.pyplot as pltstudents pd.read_excel(./Students.xlsx)print(----原始数据----) print(students)students.sort_values(by2017,inplaceTrue,ascendingFalse) students.plot.bar(xField,y[2016,2017],color[orange,red])plt.title(I…

【Redis】Redis 客户端开发与 Java 集成:RESP协议解析与实战操作

目录 客⼾端Redis Java使⽤ 样例列表引⼊依赖配置端⼝转发连接 Redis Server基础操作字符串操作列表操作哈希表操作集合操作有序集合操作访问集群 Redis Java 集成到 Spring Boot使⽤ Spring Boot 连接 Redis 单机创建项⽬配置 redis 服务地址创建 Controller使⽤ String使⽤ L…

华为OD机试真题 - 分割均衡字符串 - 贪心算法(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、…

集成电路学习:什么是GPIO通用输入输出

GPIO:通用输入输出 GPIO,全称General Purpose Input/Output,即通用输入/输出端口,是嵌入式系统中非常重要的基本硬件资源之一。以下是对GPIO的详细解析: 一、GPIO的定义与功能 GPIO是一种非常灵活的接口,可…

ping不通本地虚拟机的静态ip的解决方案

找到网络配置文件 一般我们设置虚拟机文件为静态IP地址, 比如 /etc/sysconfig/network-scripts/ifcfg-ens33 记住Gateway 192.168.200.2 查看虚拟网络编辑器 把子网ip改为192.168.200.0 前三部分相同,第四部分是0 把nat设置中的网关ip改成Gateway 1…

时空图卷积网络:用于交通流量预测的深度学习框架-1

摘要 准确的交通预测对于城市交通控制和引导至关重要。由于交通流的高度非线性和复杂性,传统方法无法满足中长期预测任务的需求,且往往忽略了空间和时间的依赖关系。本文提出一种新的深度学习框架——时空图卷积网络(STGCN)来解决交通领域的时间序列预测…

「MyBatis」图书管理系统 v1.0

🎇个人主页:Ice_Sugar_7 🎇所属专栏:JavaEE 🎇欢迎点赞收藏加关注哦! 图书管理系统 v1.0 🍉登录🍉图书操作🍌图书类🍌页面信息🍌操作 &#x1f34…

Java中的经典排序算法:快速排序、归并排序和计数排序详解(如果想知道Java中有关快速排序、归并排序和计数排序的知识点,那么只看这一篇就足够了!)

前言:排序算法在计算机科学中占有重要地位,不同的算法适用于不同的场景。本文将深入探讨快速排序、归并排序和计数排序。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下本文大致的讲解内…

新生在线分班查询,用这个小程序制作仅需一分钟!

今天许多学校已陆续开学,老师们又开始忙碌起来。他们需要将新生的分班信息逐一通知给每位家长,这不仅是一项繁琐的工作,而且效率也不高。传统的方法是通过电话、短信或邮件一一通知,这不仅耗时耗力,还容易出现信息传递…

百度文库文章-暂存下-------题 目: 链式简单选择排序

题 目: 链式简单选择排序 初始条件: 理论:学习了《数据结构》课程,掌握了基本的数据结构和常用的算法; 实践:计算机技术系实验室提供计算机及软件开发环境。 要求完成的主要任务: (包括课程设计工作量…

如何用pytorch进行图像分类

如何用pytorch进行图像分类 使用PyTorch进行图像分类是深度学习中的一个常见任务,涉及一系列步骤,从数据预处理到模型训练和评估。下面将详细描述每个步骤,从零开始构建一个图像分类器。 1. 安装必要的库 在开始之前,首先需要确…

驱动(RK3588S)第四课时:模块化编程

目录 一、什么是模块化编程二、怎么把自己编译代码给加载到开发板上运行三、驱动编程的框架四、驱动编程具体实例1、编写单模块化驱动代码2、编写多模块化驱动代码3、编写向模块传参驱动代码4、编写多模块化驱动代码另一种方式 一、什么是模块化编程 在嵌入式里所谓的模块化编…