为服务器和驱动器名称循环数组

Looping an array for servers and drive names

我试图在我的服务器上查找旧文件,但在使用 Get-NeglectedFiles 函数的驱动器路径时遇到了一些问题。我的服务器路径一直显示为 \server\ 。

Function Get-NeglectedFiles

{

 Param([string[]]$path,

       [int]$numberDays)

 $cutOffDate = (Get-Date).AddDays(-$numberDays)

 Get-ChildItem -Path $path -Recurse |

 Where-Object {$_.LastAccessTime -le $cutOffDate}

}


$Endresults = @()
$serverlist = get-content "C:\temp\serverlist.txt"


foreach($server in $serverlist) {
    $results = Get-WmiObject -ComputerName $Server -Class Win32_Share | select name

    $Endresults += New-Object psobject -Property @{
        Servername = $server
        Result = $results
        }
    }
foreach($drive in $server){
    $drives = $results | Where-Object { $_ -ne $null}
    $serverpath = "\" + $server + "\" + $drives + "\"
}
    {Get-NeglectedFiles -path $serverpath -numberDays 90 | select name, lastaccesstime
}

您可能想做这样的事情(我稍微简化了它,但您可以对其进行扩展):

$serverlist = Get-Content 'C:\temp\serverlist.txt';
foreach ($server in $serverlist) {
    $drives = Get-WmiObject -ComputerName $Server -Class Win32_Share;

    foreach ($drive in $drives.Name) {
        $serverpath = "\$server$drive\";
        $serverpath;

        Get-NeglectedFiles -path $serverpath -numberDays 90 | select Name, LastAccessTime;
    };
};

解释:

  • 从文件中获取服务器名称列表 serverlist.txt
  • 对于该列表中的每个服务器:
    • 检索该服务器上的共享名称列表
      • 为该服务器上的每个共享生成一个 serverpath 和 运行 Get-NeglectedFiles

旁注:

您可能还应该检查返回的内容:

Get-WmiObject -ComputerName $Server -Class Win32_Share

并确保返回的所有共享都是您要使用的。例如,当我 运行 它时,我得到像 IPC$print$ADMIN$ 这样的共享,以及默认驱动器共享,以及所有其他自定义共享在服务器上创建。您可能不会从这些文件中清除文件。

另一个旁注:

您可能需要考虑在 Get-NeglectedFiles 命令中使用 -File 参数,这样您就可以只定位文件而不是目录。