PowerShell-Skript zum Melden von freiem Speicherplatz auf Servern

PowerShell-Skript zum Melden von freiem Speicherplatz auf Servern

Ich bin verpflichtet, Berichte über den freien Speicherplatz auf unseren Exchange-Servern zu erhalten. Ich habe diesen Link gefunden:https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Script-Sample-f7164554

Aber ich kann es nicht erfolgreich ausführen. Kennt jemand eine bessere/einfachere Möglichkeit, dies zu tun? Ich brauche den Bericht nicht als E-Mail, sondern nur als CSV-Datei. Ich verwende Windows 10 und $PSVersionTable zeigt:

Name                           Value    
PSVersion                      5.1.14393.3053                                                                                                                                                 
PSEdition                      Desktop                                                                                                                                                        
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                                                        
BuildVersion                   10.0.14393.3053                                                                                                                                                
CLRVersion                     4.0.30319.42000                                                                                                                                                
WSManStackVersion              3.0                                                                                                                                                            
PSRemotingProtocolVersion      2.3                                                                                                                                                            
SerializationVersion           1.1.0.1

Der Fehler, den ich bekomme:

-ErrorAction : The term '-ErrorAction' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, 
verify that the path is correct and try again.
At C:\scripts\getdiskspace.ps1:7 char:1
+ -ErrorAction SilentlyContinue
+ ~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (-ErrorAction:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Dasselbe gilt für -ComputerName. Das Seltsame ist jedoch, dass es immer noch ausgeführt wird und die CSV-Datei erstellt, aber anstelle von 4 Servern enthält es nur die Festplattengrößenlisten des lokalen Hosts.

Ich konnte dieses Skript dazu bringen, die E-Mail zu senden, und ich kann den Taskplaner verwenden, um es wöchentlich auszuführen. Ich muss nur diesen Fehler herausfinden und herausfinden, warum nur die Festplattengröße eines Servers (Localhost) angezeigt wird. Hier ist das genaue Skript, das ich verwendet habe:

$File = Import-csv C:\scripts\getdiskspace.csv
$DiskReport = ForEach ($Servernames in ($File))  
 
{
Get-WmiObject win32_logicaldisk <#-Credential $RunAccount#> ` 
-ComputerName $Servernames -Filter "Drivetype=3" ` 
-ErrorAction SilentlyContinue 
 
#return only disks with 
#free space less   
#than or equal to 0.1 (10%) 
 
#Where-Object {   ($_.freespace/$_.size) -le '0.1'} 
 
}  
 
 
#create reports 
 
$DiskReport |  
 
Select-Object @{Label = "Server Name";Expression = {$_.SystemName}}, 
@{Label = "Drive Letter";Expression = {$_.DeviceID}}, 
@{Label = "Total Capacity (GB)";Expression = {"{0:N1}" -f( $_.Size / 1gb)}}, 
@{Label = "Free Space (GB)";Expression = {"{0:N1}" -f( $_.Freespace / 1gb ) }}, 
@{Label = 'Free Space (%)'; Expression = {"{0:P0}" -f ($_.freespace/$_.size)}} | 
 
#Export report to CSV file (Disk Report) 
 
Export-Csv -path "C:\scripts\DiskReport_$logDate.csv" -NoTypeInformation 
  
#Send disk report using the exchange email module 
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn; 
 
#Import-Module "\\Servername\ServerStorageReport\ExchangeModule\Exchange.ps1" -ErrorAction SilentlyContinue 
 
#Attach and send CSV report (Most recent report will be attached) 
 
$messageParameters = @{                         
                Subject = "Weekly Server Storage Report"                         
                Body = "Attached is Weekly Server Storage Report.All reports are located in C:\scripts\, but the most recent  is sent weekly"                    
                From = "Email name1 <[email protected]>"                         
                To = "Email name1 <[email protected]>" 
                CC = "Email name2 <[email protected]>" 
                Attachments = (Get-ChildItem C:\scripts\*.* | sort LastWriteTime | select -last 1)                    
                SmtpServer = "mail.example.com"                         
            }     
Send-MailMessage @messageParameters -BodyAsHtml

-----Unten sehen Sie, wie meine CSV aussieht:

Servernames
server1
server2
server3
server4

Antwort1

ok, das hat funktioniert:

$LogDate = get-date -f yyyyMMddhhmm
$File = Get-Content -Path C:\StorageReport\Servers.txt

$DiskReport = ForEach ($Servernames in ($File)) 

{Get-WmiObject win32_logicaldisk <#-Credential $RunAccount#> `
-ComputerName $Servernames -Filter "Drivetype=3" `
-ErrorAction SilentlyContinue 
} 

$DiskReport | 

Select-Object @{Label = "Server Name";Expression = {$_.SystemName}},
@{Label = "Drive Letter";Expression = {$_.DeviceID}},
@{Label = "Total Capacity (GB)";Expression = {"{0:N1}" -f( $_.Size / 1gb)}},
@{Label = "Free Space (GB)";Expression = {"{0:N1}" -f( $_.Freespace / 1gb ) }},
@{Label = 'Free Space (%)'; Expression = {"{0:P0}" -f ($_.freespace/$_.size)}} |

Export-Csv -path "C:\StorageReport\DiskReport_$logDate.csv" -NoTypeInformation

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn; 

$messageParameters = @{                        
                Subject = "Weekly Server Storage Report"                        
                Body = "Attached is Weekly Server Storage Report.All reports are located in C:\StorageReport\, but the                

          most recent  is sent weekly"                   
                From = "Email name1 <[email protected]>"                        
                To = "Email name1 <[email protected]>"
                CC = "Email name2 <[email protected]>"
                Attachments = (Get-ChildItem C:\StorageReport\*.* | sort LastWriteTime | select -last 1)                   
                SmtpServer = "SMTPServerName.com"                        
            }   
Send-MailMessage @messageParameters -BodyAsHtml

Antwort2

$Servers = Get-Content "C:\users\$env:username\desktop\input.txt"
$Drives = "C:","D:","E:"
 
$report = @()
 
#Looping each server
Foreach($Server in $Servers)
{
    $Server = $Server.trim()
    Write-Host "Processing $Server" -ForegroundColor Green
    Try
    {
        $Disks = Get-WmiObject -Class win32_logicaldisk -ComputerName $Server -ErrorAction Stop
    }
    Catch
    {
        $_.Exception.Message
        Continue
    }    
        If(!$Disks)
        {
            Write-Warning "Something went wrong"
        }
        Else
        {
            # Adding properties to object
            $Object = New-Object PSCustomObject
            $Object | Add-Member -Type NoteProperty -Name "ServerName" -Value $Server
         
            Foreach($Letter in $Drives)
            {
                Switch ($Letter)
                {
                    "C:"     { $Val = "OSDDisk (C:)"}
                    "D:"     { $Val = "Data (D:)"}
                    "E:"     { $Val = "Mountpoint_log (E:)"}
                }
 
                $FreeSpace = ($Disks | Where-Object {$_.DeviceID -eq "$Letter"} | Select-Object @{n="FreeSpace";e={[math]::Round($_.FreeSpace/1GB,2)}}).freespace 
                If($FreeSpace)
                {
                    $Value = "$Freespace" + " GB"
                    $Object | Add-Member -Type NoteProperty -Name "$Val" -Value $Value   
                }
                Else
                {
                    $Object | Add-Member -Type NoteProperty -Name "$Val" -Value "(not found)"
                }
            }
            $report += $object
        }
} 
 
#Display results
return $report
 
#Save results to CSV file
$report | Export-Csv -Path C:\users\$env:username\desktop\free_space.csv -NoTypeInformation -Force
Share:

verwandte Informationen