PowerShell开发:从命令起步,构建基础函数与脚本模块

立即解锁
发布时间: 2025-09-13 00:16:54 阅读量: 4 订阅数: 9 AIGC
### PowerShell 开发:从命令起步,构建基础函数与脚本模块 #### 1. 开发流程的重要性 在 PowerShell 开发中,发现、测试和完善命令的过程贯穿始终。很多人在 VS Code 中花费大量时间编写代码,运行却失败,原因在于忽视了发现、测试和编码的流程。利用 VS Code 中的 PowerShell 扩展可以方便地查找、输入和运行命令,若运行失败能及时修复并重复该过程,成功后将代码复制到脚本中。这一过程能确保命令的正确性,减少脚本中的错误。 #### 2. 明确需求 有句话说得好:“PowerShell 简单,Windows 复杂”。由于长期使用图形用户界面(GUI),很多人对 Windows 底层操作并不了解。比如,不清楚分区、磁盘、逻辑磁盘和磁盘卷的区别,这会使使用 PowerShell 进行底层控制变得困难。在 PowerShell.org 的论坛上,常有人询问代码问题,却因使用 PowerShell 访问 .NET Framework 底层内容,导致问题本质并非 PowerShell 本身,而是复杂的 .NET 相关内容。还有人询问关于 USB 设备插入事件列表的问题,这其实是在处理底层操作系统时遇到的难题。因此,发现、测试和编码的过程至关重要,先明确要做什么以及如何做,再利用交互式 PowerShell 控制台进行操作,最后用脚本编辑器将操作组合成脚本。 #### 3. 实践:更改服务登录名和密码 - **任务说明**:之前设计了一个更改服务登录名和密码的工具,不能使用 `Set-Service` 命令,需使用 CIM。主要任务是找到能更改服务登录名和密码的 CIM 类,可借助搜索引擎,提示是类名以 `Win32_` 开头。同时要确保能使用该类完成任务,需在 CIM 中调用相关内容。实验时可选择 Background Intelligent Transfer Service (BITS) 或 Print Spooler 服务,操作 BITS 不会导致 Windows 崩溃,但在非实验室计算机上操作时要注意,BITS 是 Windows Update 等重要功能的基础,操作完成后需将其重置为以 LocalSystem 登录且无密码。 - **具体操作** - **查找 CIM 类**:通过 Google 搜索“change windows service password”,找到 Microsoft.com 页面(http://mng.bz/1noL),确定 `Win32_Service` 类可实现该功能。 - **查找调用方法**:在 PowerShell 中运行 `Get-Command -verb invoke`,找到 `Invoke-CimMethod` 并阅读其帮助文件,得到更改 BITS 服务启动用户名和密码的命令: ```powershell $CimMethodParameters = @{ Query = "SELECT * FROM Win32_Service WHERE Name='BITS'" Method = "Change" Arguments = @{ 'StartName' = 'DOMAIN\User' 'StartPassword' = 'P@ssw0rd' } ComputerName = $env:computername } Invoke-CimMethod @CimMethodParameters ``` - **命令解释**:使用 `-Query` 是因为需要 `Win32_Service` 的特定实例,而非计算机上的所有服务。`-ComputerName` 参数在针对远程机器时会很有用,这里使用环境变量 `$env:computername` 确保使用正确。命令返回一个对象,`ReturnValue` 为 0 表示成功,22 表示提供的用户名无效,可在编写工具时将返回对象捕获到变量中以确保每台计算机操作成功。 - **重置服务**:操作完成后,使用以下命令将 BITS 服务重置: ```powershell Invoke-CimMethod -Query "SELECT * FROM Win32_Service WHERE Name='BITS'" -Method Change -Arguments @{'StartName'='LocalSystem'} ``` #### 4. 构建基础函数 - **函数原则**:PowerShell 中的基本函数自诞生起就是重要组成部分,是 PowerShell 能理解的多种命令类型之一。构建工具时,函数应遵循范围紧凑和自包含的原则。范围紧凑指函数只做一件事,自包含意味着函数内部信息仅来自声明的输入参数,不依赖外部变量或除文件系统 PSDrives 或环境变量之外的其他来源;函数输出应仅到 PowerShell 管道,创建文件、更新数据库等操作属于动作而非输出。 - **设计输入参数**:以 `Get-MachineInfo` 函数为例,根据设计和使用示例创建基本参数: ```powershell f ```
corwn 最低0.47元/天 解锁专栏
买1年送3月
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

李_涛

知名公司架构师
拥有多年在大型科技公司的工作经验,曾在多个大厂担任技术主管和架构师一职。擅长设计和开发高效稳定的后端系统,熟练掌握多种后端开发语言和框架,包括Java、Python、Spring、Django等。精通关系型数据库和NoSQL数据库的设计和优化,能够有效地处理海量数据和复杂查询。
最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看

最新推荐

功能安全入门必读:电气_电子系统安全设计核心要点(99%新手忽略的关键基础)

![电气∕电子∕可编程电子安全相关系统的功能安全](https://www.sensonic.com/assets/images/blog/sil-levels-4.png) # 摘要 功能安全在电气/电子系统设计中具有关键意义,尤其在汽车、工业控制和智能设备等领域,直接关系到人身安全与系统可靠性。本文系统梳理了功能安全的基本概念及其在行业中的重要地位,深入解析了ISO 26262等核心标准的体系结构、安全生命周期及功能安全等级(ASIL)划分方法。文章进一步探讨了系统、硬件与软件层面的安全设计策略,涵盖了故障避免、冗余设计、安全机制实现等关键技术。结合动力总成、自动驾驶与电池管理系统等

使用.NET5将本地应用程序升级到云端

### 使用 .NET 5 将本地应用程序升级到云端 #### 云优化应用程序转型规划 云原生应用程序的主要优势在于可扩展性、敏捷性和成本效益,这些都源于对云服务的使用。然而,如果遗留应用程序年代久远且采用单体架构构建,那么云原生应用程序通常需要进行重大的架构更改和代码重写。 并没有一种适用于所有场景的通用方法。根据组织对现代化和重建的意愿,有几种选择可直接或分阶段使用,借助微服务和无服务器架构将遗留单体应用程序转变为云原生应用程序。下面逐一介绍这些选项: 1. **基础设施即服务 (IaaS)**:使用 IaaS 时,应用程序只需重新部署在云端托管的虚拟机上。与其他选项相比,这种方法对应

HTML5安全漏洞与攻击场景解析

### HTML5安全漏洞与攻击场景解析 #### 1. 利用开放重定向漏洞 在单页应用和数据驱动应用中,动态加载十分常见,以支持更快的加载时间。为防止攻击,可使用白名单域名,但如果这些域名中存在开放重定向,仍可能导致问题。以下是相关代码示例: ```javascript <script> var url = destination; if (url.indexOf ("https://browsersec.com/") == 0 || url.indexOf ("https://browsersec.net") == 0) { var xhr = new XMLHttpRequest();

汽车软件架构评估:ATAM方法解析

### 汽车软件架构评估:ATAM方法解析 #### 1. 可用性与可靠性场景 可用性和可靠性场景会对产品的外部质量产生影响,能让我们对因未满足性能要求(非功能需求)而产生的潜在缺陷进行分析。以下是相关场景介绍: - **场景12**:系统出现故障并通知用户,系统可能会以降级方式继续运行。需要探讨存在哪些优雅降级机制。 - **场景13**:检测集成到系统中的第三方或商用现货(COTS)软件中存在的软件错误,以进行安全分析。 #### 2. 性能场景 性能场景同样会影响产品的外部质量,可用于分析系统满足性能要求的能力。相关场景如下: - **场景14**:启动汽车,系统需在5秒内激活。 -

智慧城市建模与建筑制造的创新发展

### 智慧城市建模与建筑制造的创新发展 #### 1. 动态城市模型构建的挑战与解决方案 构建动态城市模型面临诸多技术问题,且不太可能有一套完整的城市信息模型集。目前存在多种生成非信息模型的系统,如 Blender、3D Basemap、Google Earth 和 Google Maps 等。其中,Basemap 包含不同详细程度的数据,有利于高效查看。 城市模型会从多个不同来源获取大量信息,可通过分布式的云架构进行管理。游戏技术在处理类似问题上有丰富经验,例如一些游戏拥有超过 5 亿注册玩家,随时有数百万人在线。第 12 章的零售信息建模系统大多使用了游戏技术(Unity)。由于城市

混淆代码分析与反混淆技术解析

### 混淆代码分析与反混淆技术解析 #### 1. 代码混淆与反分析基础 在代码安全领域,为防止程序被逆向工程分析,开发者会采用各种反逆向工程技术。比如Shiva程序,它通过创建子进程并让子进程立即附加到父进程的方式来进行自我保护。若附加操作失败,Shiva会终止运行,因为它假定有调试器在监控其进程;若操作成功,其他调试器就无法附加到Shiva进程,从而保证程序能在不被观察的情况下继续运行。而且,在这种运行模式下,两个Shiva进程可以相互改变对方的状态,这使得使用静态分析技术很难确定Shiva二进制文件的确切控制流路径。 当面对这些被混淆的程序时,如何进行分析是一个挑战。由于反逆向工程

AdobeIllustrator图像处理与项目分享技巧

# Adobe Illustrator 图像处理与项目分享技巧 ## 一、图像操作基础 ### 1.1 创建和编辑不透明度蒙版 在处理图像时,不透明度蒙版是一个非常实用的工具。以下是创建和编辑不透明度蒙版的详细步骤: 1. **设置默认颜色**:按下 D 键,为新矩形设置默认描边(黑色,1 磅)和填充(白色),这样便于选择和移动矩形。 2. **选择对象**:选择选择工具,按住 Shift 键并点击海滩图像,同时选中该图像。 3. **创建蒙版**:点击属性面板标签以显示属性面板,点击“不透明度”打开透明度面板,然后点击“创建蒙版”按钮。点击该按钮后,它会变为“释放”,若再次点击,图像将不再

高级滤镜使用指南:液化与消失点滤镜详解

### 高级滤镜使用指南:液化与消失点滤镜详解 在图像处理领域,高级滤镜能够为我们带来更多创意和专业的效果。本文将详细介绍液化滤镜和消失点滤镜的使用方法,以及相关的操作技巧。 #### 1. 液化滤镜(Liquify)处理人脸 首先,我们来探讨如何使用液化滤镜处理人脸图像。 ##### 1.1 打开文件 要继续探索液化面板,可通过“文件(File)”➤“打开(Open)”,选择“womens_heads_start.psd”文件。 ##### 1.2 人脸感知液化(Face-Aware Liquify) 在画笔工具区域下方,有一个名为“人脸感知液化”的选项。你可以根据需要测试各种设置。

领导者的自我关怀:应对挑战与压力的关键

### 领导者的自我关怀:应对挑战与压力的关键 在领导他人的过程中,我们常常会遇到各种挑战和压力。这些挑战不仅来自于帮助他人改善状况时的不确定性,还来自于领导工作本身所带来的各种压力。因此,学会自我关怀对于领导者来说至关重要。 #### 帮助他人的挑战 在帮助他人时,我们可能会遇到一些难以应对的情况。有些人会将自己视为受害者,总是消极对待一切,期望最坏的结果。他们没有改变现状的意愿,这会让我们陷入救援者的角色中无法自拔。一旦我们发现试图帮助的人有这种受害者心态,或许就该建议他们寻求专业帮助,然后我们适时抽身。 帮助他人改善状况时,成功的衡量标准往往难以确定,而且具有很强的主观性。干预措施

PHP与JavaScript应用的托管、报告与分发指南

# PHP与JavaScript应用的托管、报告与分发指南 ## 1. 引言 在当今数字化时代,Web应用的托管、报告生成以及数据分发是数据处理流程中的重要环节。本文将介绍如何利用PHP和JavaScript进行用户数据的收集与分析,同时详细阐述如何将相关应用部署到Amazon Lightsail这一轻量级云托管平台上。 ## 2. 数据收集方法 ### 2.1 主动数据收集 - **二进制数据收集**:通过`ajax.php`、`binary.html`和`create.sql`等文件实现,利用jQuery库进行交互。示例代码如下: ```php // ajax.php部分代码 try