Arrays 尝试使用两个数组作为变量来搜索文件名(powershell)
我需要在多台服务器上搜索多个(命名)文件夹,以查找与特定日期匹配的文件,并使用Powershell将这些文件复制到本地文件夹。文件夹的数量与服务器的数量大小不同。即我需要\server1\interfacefolders\folder1\server1\interfacefolders\folder2\server2\interfacefolders\folder1\server2\interfacefolders\folder2等 我已经将以下设置为数组/变量,为这做准备,我认为“嵌套”foreach循环可以工作,但它爆炸了…有什么想法如何开始吗Arrays 尝试使用两个数组作为变量来搜索文件名(powershell),arrays,powershell,copy,Arrays,Powershell,Copy,我需要在多台服务器上搜索多个(命名)文件夹,以查找与特定日期匹配的文件,并使用Powershell将这些文件复制到本地文件夹。文件夹的数量与服务器的数量大小不同。即我需要\server1\interfacefolders\folder1\server1\interfacefolders\folder2\server2\interfacefolders\folder1\server2\interfacefolders\folder2等 我已经将以下设置为数组/变量,为这做准备,我认为“嵌套”for
[string[]]$ProdServerArray = "server1", "server2", "server3"
[string[]]$InterfaceArray = "folder1", "folder2" "folder3" do {
$date = Read-host "Enter date (MM/DD/YYYY) : " } while ($date -as [datetime] -isnot [datetime])
$date = $date -as [datetime]
$destination = new-item c:\GetFilesResults\$($date.toshortdatestring().replace("/","-")) -type directory
$path = foreach ($ProdServer in $ProdServerArray)
{
$folder = foreach ($Interface in $InterfaceArray)
{
$file = "\\$path\InterfaceFolder\$folder\*"
if ("$file".LastWriteTime -gt $date.date)
{
Copy-Item -Path $file.fullname -Destination $destination
}
}
}
要从这两个数组生成完整的文件夹名,可以使用两个嵌套的
foreach
循环。一旦有了这些值,就可以通过类似于-f
字符串格式操作符的方式构建路径
我省略了代码的其余部分,因为它似乎与您提出的问题无关。[咧嘴笑]
输出
\\serverAAA\InterfaceFolders\folder1
\\serverAAA\InterfaceFolders\folder2
\\serverAAA\InterfaceFolders\folder3
\\serverAAA\InterfaceFolders\folder666
==============================
\\serverBbBbBb\InterfaceFolders\folder1
\\serverBbBbBb\InterfaceFolders\folder2
\\serverBbBbBb\InterfaceFolders\folder3
\\serverBbBbBb\InterfaceFolders\folder666
==============================
\\server_CCC\InterfaceFolders\folder1
\\server_CCC\InterfaceFolders\folder2
\\server_CCC\InterfaceFolders\folder3
\\server_CCC\InterfaceFolders\folder666
==============================
要从这两个数组生成完整的文件夹名,可以使用两个嵌套的
foreach
循环。一旦有了这些值,就可以通过类似于-f
字符串格式操作符的方式构建路径
我省略了代码的其余部分,因为它似乎与您提出的问题无关。[咧嘴笑]
输出
\\serverAAA\InterfaceFolders\folder1
\\serverAAA\InterfaceFolders\folder2
\\serverAAA\InterfaceFolders\folder3
\\serverAAA\InterfaceFolders\folder666
==============================
\\serverBbBbBb\InterfaceFolders\folder1
\\serverBbBbBb\InterfaceFolders\folder2
\\serverBbBbBb\InterfaceFolders\folder3
\\serverBbBbBb\InterfaceFolders\folder666
==============================
\\server_CCC\InterfaceFolders\folder1
\\server_CCC\InterfaceFolders\folder2
\\server_CCC\InterfaceFolders\folder3
\\server_CCC\InterfaceFolders\folder666
==============================
首先,行中缺少一个逗号: [string[]$InterfaceArray=“folder1”、“folder2”folder3” 此外,据我所知,您的do-while循环似乎没有完成任何事情,因为只有在指定日期的12:00:00AM时间才是真正的。无论您以格式(MM/DD/YYYY)输入的日期是什么,它们都不会相等,除非我在上面提到过这种情况 因为您正在搜索多个服务器,所以Invoke命令是您的朋友,因为foreach循环将串联运行,而这将并行运行。它将同时向每个服务器发送搜索命令 我不太清楚您到底想做什么,所以我没有填写实际的搜索代码(见下文),但我留下的空白部分是您输入要查找的文件名/文件名模式的位置。如果你能提供更多的清晰信息,我可以在需要时提供进一步的帮助 (注意:$filepath是您希望搜索的文件路径,尽管不言自明。您可以使用与Lee_Dailey提供的方法类似的方法生成它们。我建议删除分隔线并将生成的路径保存到字符串系统。数组对象)
Invoke命令-ComputerName$ProdServerArray-ScriptBlock{Get Childitem–Path$filepath-Recurse-ErrorAction SilentlyContinue |其中{}
首先,行中缺少一个逗号:
[string[]$InterfaceArray=“folder1”、“folder2”folder3”
此外,据我所知,您的do-while循环似乎没有完成任何事情,因为只有在指定日期的12:00:00AM时间才是真正的。无论您以格式(MM/DD/YYYY)输入的日期是什么,它们都不会相等,除非我在上面提到过这种情况
因为您正在搜索多个服务器,所以Invoke命令是您的朋友,因为foreach循环将串联运行,而这将并行运行。它将同时向每个服务器发送搜索命令
我不太清楚您到底想做什么,所以我没有填写实际的搜索代码(见下文),但我留下的空白部分是您输入要查找的文件名/文件名模式的位置。如果你能提供更多的清晰信息,我可以在需要时提供进一步的帮助
(注意:$filepath是您希望搜索的文件路径,尽管不言自明。您可以使用与Lee_Dailey提供的方法类似的方法生成它们。我建议删除分隔线并将生成的路径保存到字符串系统。数组对象)
Invoke命令-ComputerName$ProdServerArray-ScriptBlock{Get Childitem–Path$filepath-Recurse-ErrorAction SilentlyContinue |其中{}
不幸的是,由于安全权限,我无法在这些服务器上运行远程powershell,并且该命令必须在本地运行。我需要做的是从一天(比如2020年1月16日)收集xml文件,以便制定系统升级的回滚计划。因此“\$ProdServerArray\InterfaceFiles\$InterfaceArray***”(匹配创建/修改日期为2020年1月16日)复制到本地路径,如“C:\Results\$ProdServerArray\InterfaceFiles\$InterfaceArray*”。不幸的是,由于安全许可,我无法在这些服务器上运行远程powershell,并且该命令必须在本地运行。我需要做的是从一天(比如2020年1月16日)收集xml文件,以便制定系统升级的回滚计划。因此“\$ProdServerArray\InterfaceFiles\$InterfaceArray**”(匹配创建/修改日期为2020年1月16日)复制到本地路径,如“C:\Results\$ProdServerArray\InterfaceFiles\$InterfaceArray*”
Invoke-Command -ComputerName $ProdServerArray -ScriptBlock {Get-Childitem –Path $filepath -Recurse -ErrorAction SilentlyContinue |where {<your code here>}}