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: