Я пытаюсь создать очень специфический сценарий отчета Powershell, в который я могу ввести список серверов через CSV или TXT и проверить определенную папку, путь которой существует на каждом сервере. Затем выведите эту информацию в отформатированный CSV-файл с именем сервера и общим размером этого единственного дерева папок.
Я просматривал следующую ветку: (Размер папки Powershell без перечисления подкаталогов, так как, кажется, есть самые близкие примеры кода того, что мне нужно выполнить, но ни один из них не настроен для ввода отчета сервера и вывод.
Сценарию не нужны никакие учетные данные, так как он будет работать с повышенными привилегиями. Я не думаю, что функция будет необходима, так как я планирую изменить определенный путь по мере возникновения различных ситуаций.
Обычно я довольно хорошо склеиваю разные сценарии, которые нахожу. Однако я немного озадачен, пытаясь найти что-то, что соответствует именно этой функции, поэтому я даже не уверен, с чего начать. Я новичок в powershell и пока не очень хорошо разбираюсь в написании сложных скриптов вручную.
servers.txt
server1
server2
есть два способа, один через smb, другой через winRM
1 + Размер папки Powershell папок без перечисления подкаталогов
$servers = Get-Content "$PSScriptRoot\servers.txt"
$path = "c$\Distr"
$result = @()
foreach ($server in $servers){
$fullpath = "\\" + $server + "\" + "$path"
$fullpath
$size = (Get-ChildItem -Recurse -Force $fullpath | Measure-Object -Property Length -Sum).sum
$array = "" | Select server, size
$array.server = $server
$array.size = $size
$result+=$array
}
$result |Export-Csv -Delimiter ";" -Encoding UTF8 -Path "$PSScriptRoot\result.csv"
если сетевое соединение достаточно медленное, то лучше использовать WinRM, но у меня сейчас нет под рукой примера.
Отлично! Вывод выглядит немного странно. Я надеялся использовать математику, чтобы округлить его в ГБ, например: [math]::Round($contents.sum / 1000000000,3)
Исправлен формат вывода с $result |Export-Csv -Path "$PSScriptRoot\result.csv"-NoTypeInformation -UseCulture
Спасибо ринату гадеву за стартовый код. Вот мой окончательный вариант с корректировками, который делает именно то, что я хотел.
$servers = Get-Content "$PSScriptRoot\servers.txt"
$path = "c$\Distr"
$result = @()
foreach ($server in $servers){
$fullpath = "\\" + $server + "\" + "$path"
$fullpath
$size = (Get-ChildItem -Recurse -Force $fullpath | Measure-Object -Property Length -Sum ).sum | ForEach-Object {[math]::Round($_/1GB,2)}
$array = "" | Select-Object Server, Size
$array.server = $server
$array.size = $size
$result+=$array
}
$result | Export-Csv -Path "$PSScriptRoot\result.csv"-NoTypeInformation -UseCulture
Это может вам помочь github.com/santisq/PSTree