You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 07:15:32