为服务器和驱动器名称循环数组
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
参数,这样您就可以只定位文件而不是目录。
我试图在我的服务器上查找旧文件,但在使用 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
参数,这样您就可以只定位文件而不是目录。