使用以下逻辑编写 Powershell 脚本的指南 [关闭]

Posted

技术标签:

【中文标题】使用以下逻辑编写 Powershell 脚本的指南 [关闭]【英文标题】:Guidance for writing a Powershell script with the following logic [closed] 【发布时间】:2014-12-12 19:05:57 【问题描述】:

使用此逻辑编写 Windows Power Shell 脚本

获取当前日期并验证是否是该月的第一天 如果是,则计算前一天(以便计算前 2 年/月值) 搜索 XMLA 文件以用新值替换以前的年/月组合

大家好,

我的任务是编写具有上述逻辑的 powershell 脚本。这个脚本需要每天在我在工作中维护的系统上运行。我是编程新手,所以我很难开始。如果有人有任何信息可以将我推向正确的方向,我将不胜感激。先感谢您。

另外,我会经常检查这个,所以如果有人有任何问题,请询问。谢谢

编辑:

以下是我需要编辑的文件中的代码:

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

所以当它是一个月的第一天时,我需要进入这个文件并将每个日期值基本上增加一个。如果这有助于回答任何问题,只是想添加它。仍在处理所有逻辑,但我会在遇到问题时发布问题。谢谢大家。

编辑 2:

得到了我需要的输出:

(Get-Date).AddMonths(-2) | Get-Date -Format "yyyyMM"
(Get-Date).AddMonths(-1) | Get-Date -Format "yyyyMM"
(Get-Date) | Get-Date -Format "yyyyMM"

现在需要查看 Get-ChildItem 来编辑文件。这可能比我想象的要困难,因为标签是相同的。希望这个 cmdlet 有一些选项。

【问题讨论】:

Get-Date 肯定是您想要开始的地方。有了它,您可以轻松计算前一天、前一个月。然后你可能想查看 Get-ChildItem 来浏览文件并获取它们的属性。 不错。非常感谢你。我现在就开始搜索这个。 【参考方案1】:

你放在这里的代码不多 但这里有一些开始的指针......

if((Get-Date).Day -eq 1)
    # this is the first day of the month
    $yesterdayDay = (Get-Date).AddDays(-1).Day # this is the day of day before
    $yesterdayMonth = (Get-Date).AddDays(-1).Month # this is the month of day before
    $yesterdayYear = (Get-Date).AddDays(-1).Year # this is the year of day before
    $XMLfile = Get-ChildItem -Path "YourXmlFilePath"
    # rest of code ...

希望对你有帮助。

*在评论中的FORMAT问题后编辑:

$date = (Get-Date).AddDays(-1)
$dateFormat = Get-Date -Format "MMyyyy"
$dateFormat

或单排:

(Get-Date).AddDays(-1) | Get-Date -Format "MMyyyy"

很高兴你得到了答案;)

【讨论】:

谢谢您,先生。这很有帮助。 好的,所以我尝试了 (Get-Date).AddDays(-1) ,效果很好。现在我需要格式化,但是当我运行 (Get-Date).AddDays(-1) -format MMyyyy 时,我收到一条错误消息:“您必须在右侧提供一个值表达式'-f' 运算符。我将如何格式化输出?你有什么建议吗?研究看看我是否可以为你提供类似 unix 的管道功能。 你是最棒的。我会支持你,但我没有所需的代表。谢谢。 没问题。只需将其标记为已回答,这样它就不会在 Feed 过滤器中显示为未回答。 好的答案得到我的投票

以上是关于使用以下逻辑编写 Powershell 脚本的指南 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Powershell企业应用 - 第05章 编写Powershell日志系统

通达OA应用中心使用手册(脚本编写指南)

使用powershell 编写一个批量移动用户到指定ou的脚本

Powershell脚本无法识别函数

试读—Windows PowerShell实战指南(第2版)

Powershell:根据逻辑驱动器名称或文件路径提取物理磁盘属性[重复]