使用Python拆分PowerShell模块函数为同名独立文件的实现方法
PowerShell模块批量拆分函数为独立文件实现
需求说明
- 待处理文件:因.psm1格式直接读取异常,转换得到的txt格式PowerShell模块文件,包含200余个大小不一的函数
- 目标:将每个函数单独拆分为独立文件,文件名与对应函数名完全一致
- 现有代码已完成文件读取、按
\nFunction初步拆分函数文本块,未实现按函数名导出文件的逻辑
待处理文件内的函数格式示例:
Function get-serverlist{ Some code some code some code } Function get-windowsServices{ Some code some code some code }
完整可运行代码
import os import re # 路径配置 source_file = "C:/user/someuser/powershell.txt" output_folder = "C:/user/someuser/split_functions" # 自动创建输出目录,已存在则不报错 os.makedirs(output_folder, exist_ok=True) # 读取源文件,指定编码避免乱码,可根据文件实际情况替换为gbk/utf-8-sig with open(source_file, "r", encoding="utf-8") as f: file_content = f.read() # 拆分函数块,兼容function大小写、关键字前后带缩进/空格的不规范写法 function_blocks = re.split(r"\n\s*[Ff]unction\s+", file_content) # 遍历块,第一个块是文件头部的注释、配置等非函数内容,直接跳过 for block in function_blocks[1:]: # 跳过空块 if not block.strip(): continue # 提取函数名:截断第一个{、空格外的内容,得到纯函数名 function_name = block.split("{")[0].split()[0].strip() # 补回拆分时被切掉的Function前缀,拼接为完整函数代码 full_function_code = "Function " + block # 写入对应文件 output_path = os.path.join(output_folder, f"{function_name}.ps1") with open(output_path, "w", encoding="utf-8") as f: f.write(full_function_code)
逻辑说明
- 修复原代码语法问题:原代码
open方法内的文件路径未加字符串引号,属于Python语法错误,无法直接运行 - 替换原固定字符串拆分逻辑为正则拆分,可识别小写
function、关键字前后带空格/缩进的写法,适配更多非标准格式的模块文件 - 自动跳过拆分后产生的空块、文件头部非函数内容,避免生成无效文件
- 所有拆分后的文件统一存入独立目录,不会和源文件混杂
- 函数名提取逻辑做了兼容,无论函数名后直接跟
{还是带空格再跟{,都能准确提取纯函数名,不会把特殊符号带入文件名
常见问题处理
- 若生成的文件出现乱码,将
open方法的encoding参数替换为utf-8-sig或gbk,匹配源文件实际编码即可 - 若个别函数名提取错误,检查对应函数是否存在Function关键字与函数名之间换行的极端写法,对应调整正则拆分规则即可适配
- 运行完成后核对输出目录的文件数量,与模块内函数总数一致即拆分成功
内容的提问来源于stack exchange,提问作者Leo Torres
相关产品推荐
相关产品推荐

