我在项目中碰到一个问题:
使用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原生自带的命令实现。
请各位提供一个思路,多谢!
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
感谢您的回答,但是这个方法没能解决我的问题。
很抱歉,是我没有描述清楚。
我举一个例子。
原始模板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
=============
请问有什么好方法吗?
已更新
不好意思,这几天在忙别的事情,刚看到。确实能解决我的问题,多谢您的帮助!