【问题标题】:Read XML Config into PowerShell array将 XML 配置读入 PowerShell 数组
【发布时间】:2015-03-10 13:48:23
【问题描述】:

我正在尝试创建一个 PS 脚本,该脚本将从 XML 文件中读取多个文件目录,然后根据文件类型和修改日期 > 10 天我想删除文件。

我不确定我应该如何访问配置值以便我可以设置一个 foreach 循环。目前我的脚本中有这个

#Read XML Config File to get settings
[xml]$configfile = Get-Content "C:\Project\TestForXML.xml"

#Declare and set variables from Config values
$dirs = @($configfile.Settings.DirectoryName)
$scanSubDirectories = $configfile.Settings.ScanSubDirectories
$deleteAllFiles = $configfile.Settings.deleteAllFiles
$fileTypesToDelete = $configfile.Settings.FileTypesToDelete
$liveSiteLogs = $configfile.Settings.LiveSiteLogs
$fileExclusions = $configfile.Settings.FileExclusions
$retentionPeriod = $configfile.Settings.RetentionPeriod
$aicLogs = $configfile.Settings.AICLogs
$aicLogsRententionPeriod = $configfile.Settings.AICLogsRententionPeriod

$Now = Get-Date -format d 
$Days = "10" 
$LastWrite = $Now.AddDays(-$retentionPeriod) 
$aicLastWrite = $Now.AddDays(-$aicLogsRententionPeriod) 

$Logs = Get-Childitem $dirs -Include $fileTypesToDelete,$liveSiteLogs -Recurse | Where {$_.LastWriteTime -le "$LastWrite"} 


foreach ($Log in $Logs) 
    { 
    Remove-Item $Log.FullName 
    $Msg =Write-Output "Deleting File $Log" 
    $Msg | out-file "C:\Desktop\Output.txt" -append 
    }

我的 XML 配置文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Settings>
<DirectoryName>"ServerA\C$\logs", "ServerB\C$\logfiles", 
               "ServerC\C$\logfiles", "ServerD\C$\logs"</DirectoryName>
<AICLogs>D:\DebugXML</AICLogs>
<AICLogsRententionPeriod>30</AICLogsRententionPeriod>
<ScanSubDirectories>True</ScanSubDirectories>
<DeleteAllFiles>False</DeleteAllFiles>
<FileTypesToDelete>.txt;.log;.mf</FileTypesToDelete>
<LiveSiteLogs>livesite.runtime.*</LiveSiteLogs> 
<FileExclusions>fdlogfile.log</FileExclusions>
<RetentionPeriod>13</RetentionPeriod>

【问题讨论】:

  • 您的 XML 配置文件格式错误,没有关闭 &lt;/Settings&gt; 标记
  • 很抱歉我的复制和粘贴没有完全粘贴。关闭 标记在那里

标签: arrays xml powershell config


【解决方案1】:

我不得不更改以下行。

$dirs = @($configfile.Settings.DirectoryName)

为了这样的事情。

$dirs = @($configfile.Settings.DirectoryName.Split(",").Trim())

让我知道这是否能让你更接近。

【讨论】:

    猜你喜欢
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2012-04-13
    相关资源
    最近更新 更多