求助:PowerShell文本处理,在特定行后边插入字符


PowerShell交流中心分类: Powershell基础求助:PowerShell文本处理,在特定行后边插入字符
0
PS_Alex asked 3年 ago

我在项目中碰到一个问题:
使用PowerShell对Windows组策略进行合规检查后,对不合规的组策略手动合规。这时需要创建一个模板,格式如下
=============
[System Access]
MaximumPasswordAge = 90
[Event Audit]
AuditSystemEvents = 3
[Registry Values]
machine/system/currentcontrolset/services/lanmanserver/parameters/autodisconnect=4,15
=============
对于不同类型的组策略需要插入到相应的模块下边
在linux下可以用sed来实现“插入特定行之后”的操作,但是在PowerShell中我没找到类似的命令。
另外,客户不允许安装其他工具,只能使用Windows原生自带的命令实现。
请各位提供一个思路,多谢!

×用微信扫描并分享
1 Answers
1
Best Answer
Mooser Lee 管理员 answered 3年 ago
Get-Content .\a.txt | foreach {
# 当前行 $_
#匹配到特定行
if(($_ -eq '满足条件')){
    "{0}加入自己的字符" -f $_
}

} | Out-File .\b.txt

 

2018/5/9更新如下:

我上面的脚本肯定能解决你的问题,关键是我写的是思路,你需要根据自己实际情况进行改造:

Get-Content .\input.txt | foreach {
    if($_ -eq '[System Access]') {
        "{0}`n{1}" -f $_ ,'MaximumPasswordAge = 90'
    }
    elseif($_ -eq '[Event Audit]'){
        "{0}`n{1}" -f $_ ,'AuditSystemEvents = 3'
    }
    elseif($_ -eq '[Registry Values]'){
        "{0}`n{1}“ -f $_ ,'machine/system/currentcontrolset/services/lanmanserver/parameters/autodisconnect=4,15'
    }
    else{
    $_
    }
} | Out-File .\output.txt
PS_Alex replied 3年 ago

感谢您的回答,但是这个方法没能解决我的问题。
很抱歉,是我没有描述清楚。
我举一个例子。
原始模板template.inf最开始内容如下:
=============
[System Access]
[Event Audit]
[Registry Values]
=============
我有三条策略需要插入到模板template.inf中:
1.账户策略:MaximumPasswordAge = 90 插入到 账户策略模块[System Access]这一行下边
2.审计策略:AuditSystemEvents = 3 插入到 审计策略模块[Event Audit]这一行下边
3.安全策略:MaximumPasswordAge = 90 插入到 安全策略模块[Registry Values]这一行下边

PowerShell实现效果template.inf内容如下:
=============
[System Access]
MaximumPasswordAge = 90
[Event Audit]
AuditSystemEvents = 3
[Registry Values]
machine/system/currentcontrolset/services/lanmanserver/parameters/autodisconnect=4,15
=============

请问有什么好方法吗?

Mooser Lee 管理员 replied 3年 ago

已更新

PS_Alex replied 3年 ago

不好意思,这几天在忙别的事情,刚看到。确实能解决我的问题,多谢您的帮助!