我的任务是自动执行每月维护。基本上我需要将 xmla 文件中的日期值编辑到下个月。
这是 XMLA 文件中的相关部分:
<Process xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Type>ProcessFull</Type>
<Object>
<DatabaseID>OLAPQA</DatabaseID>
<CubeID>Model</CubeID>
<MeasureGroupID>TRANSACTIONS</MeasureGroupID>
<PartitionID>TRANSACTIONS 201410</PartitionID>
</Object>
</Process>
<Process xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Type>ProcessFull</Type>
<Object>
<DatabaseID>OLAPQA</DatabaseID>
<CubeID>Model</CubeID>
<MeasureGroupID>TRANSACTIONS</MeasureGroupID>
<PartitionID>TRANSACTIONS 201411</PartitionID>
</Object>
</Process>
<Process xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Type>ProcessFull</Type>
<Object>
<DatabaseID>OLAPQA</DatabaseID>
<CubeID>Model</CubeID>
<MeasureGroupID>TRANSACTIONS</MeasureGroupID>
<PartitionID>TRANSACTIONS 201412</PartitionID>
</Object>
</Process>
我需要使用以下逻辑编写一个 windows powershell 脚本:
- 获取当前日期并验证它是否是该月的第一天
- 如果是,则计算前一天(以计算前 2 年/月值)
- 搜索 XMLA 文件以用新值替换以前的年/月组合
我已经解决了 1 号和 2 号,但我在 3 号上遇到了一些问题。
这是我的代码:
$con = Get-Content .\Process2Periods.xmla
$con | % { $_.Replace("((Get-Date).AddMonths(-2) | Get-Date -Format "yyyyMM")", ("((Get-Date).AddMonths(-1) | Get-Date -Format "yyyyMM")") } | Set-Content .\Process2Periods.xmla
我如何做到这一点是运行以下代码,它与上面的代码不同:
$con = Get-Content .\Process2Periods.xmla
$con | % { $_.Replace("201410", "201411") } | Set-Content .\Process2Periods.xmla
我的问题是如何使这种动态化而不是将值硬编码到脚本中。我需要这个来每月更改三个标签。该代码适用于字符串值,但如何将某些代码的输出作为字符串值?我应该使用变量吗?
提前致谢。