我正在写一个基本上会执行以下操作的脚本:
从文本文件中读取一些参数:
DriveLetter ThreeLetterCode ServerName VolumeLetter Integer
EG。 W MSS SERVER01 C 1
这些值恰好形成文件夹目标W:\MSS\
,以及符合以下命名约定的文件名:
SERVERNAME_VOLUMELETTER_VOL-b00X-iYYY.spi - Where The X is the Integer above
我需要稍后解决的值Y,因为这恰好是增量映像(备份)的值,我需要计算出最新的增量值。
所以此刻 - >计算文件中的行数,并循环这么多行。
$lines = Get-Content -Path PostBackupCheck-Textfile.txt | Measure-Object -Line
for ($i=0; $i -le $lines.Lines; $i++)
在这个循环中,我需要做一个Get-Content来读取我当前正在查看的行,即第0行,第1行,第2行,因为我在开头和分割时写的格式会有多行该行成为一个数组,其中文件的每个部分,如上面的命名约定,在[0],[1],a [2]中。等
原因是,我需要对包含这些内容的文件夹进行排序,按日期查找最新文件,然后取出_iXXX.spi
部分并将其放入数组值a[X]
所以我有一个完整的文件名来安装。此值将替换iYYY.spi
这有点复杂,因为我还必须确保在使用-Include执行Get-ChildItem之前,我按日期对其进行排序,我只包含与文本文件中输入的参数匹配的文件名:
所以,
SERVER01_C_VOL-b001-iYYY.spi and not anything else.
i.e. not SERVER01_D_VOL-b001-iYYY.spi
然后从Get-ChildItem -Include上的排序中取出iYYY值并将其放入相应的数组项中。
我真的不知道从哪里开始,所以任何想法都值得赞赏!
希望我已经详细解释过了。我还将代码放在了Pastebin上:http://pastebin.com/vtFifTW6
答案 0 :(得分:3)
这不需要那么复杂。您可以先使用简单的管道操作文件中的行:
Get-Content PostBackupCheck-Textfile.txt |
Foreach-Object {
$drive, $folder, $server, $volume, [int]$i = -split $_
...
}
循环内的行在空格处分割当前输入行并分配适当的变量。这样可以省去处理数组的麻烦。随后的所有内容也需要在所述循环中。
然后,您可以构建文件名模式:
$filename = "$server_$drive_VOL-b$($i.ToString('000'))-i*.spi"
您可以使用它来查找所有拟合文件并按日期对它们进行排序:
$lastFile = Get-ChildItem $filename | sort LastWriteTime | select -last 1