我希望有人能帮助我。我是powershell的新手,正在努力寻找正确的方法来处理我的脚本中的一些东西。脚本是使用veeam powershell命令对我们的备份进行恢复检查。我们有7个备份作业,每个作业中有不同的服务器,每个作业中有不同的驱动器被备份。有时,服务器处于多个作业中,因为我们每天将备份作业拷贝到USB时必须跨作业拆分驱动器(所以我们必须平衡每个作业中备份的数据量,以便可以将驱动器复制到USB驱动器)。我可以编写整个脚本并使其工作,但它大约有800行长,效率非常低,虽然我的团队很容易理解(稍后还有我!)我目前的方法几乎是围绕着为每个备份作业执行某些操作,然后在每个磁盘上为该作业中的每个服务器执行某些操作。我想使用阵列/循环来减少它。我已经想出了如何使用基本循环和阵列,但我正在为能够链接阵列中的驱动器和服务器而挣扎,例如:
$Backupjob1 = "Backup Job 1E"
$Backupjob1Servers =@('Server1','Server2')
某种阵列,允许服务器1和服务器2使用不同数量的多个驱动器。
$Backupjob1ServeDrives =@(Server1.Drive1 ='C', Server1.Drive2 ='F', Server2.Drive1 = 'C')
然后我需要遍历它,以便在每次循环中,它在server 1上执行一个操作,然后在第一个驱动器上执行下一个驱动器。一旦server 1完成,它在server 2上的第一个驱动器上执行该操作,然后在第二个驱动器上重复。
我理解循环遍历数组的基本知识,但我很难理解如何创建一个数组的数组,可以处理上述问题,然后正确地循环遍历它。
我被困在不确定什么阵列工作,有什么选项。
2条答案
按热度按时间2hh7jdfx1#
一种方法是将你的配置外部化到一个json文件或类似的文件中,然后将其提供给你的脚本。下面是一个使用json字符串的例子:
这演示了如何处理所引用的数组的数组,您有一个服务器对象数组,每个服务器对象都有一个驱动器数组,因此在服务器的每次迭代中,您也要迭代服务器的驱动器。
如果您将字符串保存到配置文件中,则脚本可以读取该字符串,然后如果您对备份配置进行任何更改,则只需更改配置文件,而无需更改脚本。
qncylg1j2#
听起来你想要一个 * 字典 * 类型--谢天谢地,PowerShell有一个内置的无序字典类型,叫做 * 哈希表 *。
要构造哈希表文本,请使用
@{...}
而不是@(...)
:要遍历此数据结构,请使用一个简单的嵌套循环: