Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 尝试使用两个数组作为变量来搜索文件名(powershell)_Arrays_Powershell_Copy - Fatal编程技术网

Arrays 尝试使用两个数组作为变量来搜索文件名(powershell)

Arrays 尝试使用两个数组作为变量来搜索文件名(powershell),arrays,powershell,copy,Arrays,Powershell,Copy,我需要在多台服务器上搜索多个(命名)文件夹,以查找与特定日期匹配的文件,并使用Powershell将这些文件复制到本地文件夹。文件夹的数量与服务器的数量大小不同。即我需要\server1\interfacefolders\folder1\server1\interfacefolders\folder2\server2\interfacefolders\folder1\server2\interfacefolders\folder2等 我已经将以下设置为数组/变量,为这做准备,我认为“嵌套”for

我需要在多台服务器上搜索多个(命名)文件夹,以查找与特定日期匹配的文件,并使用Powershell将这些文件复制到本地文件夹。文件夹的数量与服务器的数量大小不同。即我需要\server1\interfacefolders\folder1\server1\interfacefolders\folder2\server2\interfacefolders\folder1\server2\interfacefolders\folder2等

我已经将以下设置为数组/变量,为这做准备,我认为“嵌套”foreach循环可以工作,但它爆炸了…有什么想法如何开始吗

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