Я пытаюсь найти старые файлы на своих серверах, и у меня возникли небольшие проблемы с путем к диску для функции 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$
, а также общие ресурсы диска по умолчанию и все другие пользовательские общие ресурсы, созданные на сервере. Вы, вероятно, не собираетесь очищать файлы от них.
Еще одно примечание:
Возможно, вы захотите использовать параметр -File
внутри вашей команды Get-NeglectedFiles
, чтобы вы нацеливались только на файлы, а не на каталоги.
Это отлично работает! И последний вопрос: знаете ли вы, как использовать Export-Excel для перечисления каждого сервера на отдельном листе?
Также мне кажется, что я не могу использовать -Exclude для этих букв дисков: $serverlist = Get-Content 'C:\temp\serverlist.txt'; foreach ($server в $serverlist) { $drives = Get-WmiObject -ComputerName $Server -Class Win32_Share | Where-Object { $_.Name -notlike 'C$','ADMIN$','IPC$','print$'} foreach ($drive in $drives.Name) { $serverpath = "\\$server\ $диск\"; $серверный путь; Get-NeglectedFiles -path $serverpath -numberDays 365 | выберите Имя, LastAccessTime, LastWriteTime, Каталог | Экспорт-Excel-Путь $PWD-Автофильтр }; };
@ctw -notlike
не принимает массив элементов, попробуйте изменить его на -notin
Это сработало, также я разобрался с проблемой Export-Excel: Get-NeglectedFiles -path $serverpath -numberDays 365 | выберите Имя, LastAccessTime, LastWriteTime, Каталог | Export-Excel -WorksheetName "$serverpath" -Path "C:\temp\OldFiles($server).xlsx" -AutoFilter
Я не уверен, что это как-то связано с этим, но $null должен быть слева от оператора сравнения