101462
Goto Top

Powershell (.ps1) via Batch (.cmd) starten (Aufgabenplanung)

Windows Small Business Server 2008
.ps1 & .cmd

Ich habe eine Powershell-Datei (.ps1), die bei meim Server und diversen PC's den Festplattenspeicher ausliest und mir den Bericht per Email zu kommen lässt.

# First lets create a text file, where we will later save the freedisk space info
$freeSpaceFileName = "FreeSpace.htm"  
$serverlist = "sl.txt"  
$warning = 25
$critical = 10
New-Item -ItemType file $freeSpaceFileName -Force
# Getting the freespace info using WMI
#Get-WmiObject win32_logicaldisk  | Where-Object {$_.drivetype -eq 3} | format-table DeviceID, VolumeName,status,Size,FreeSpace | Out-File FreeSpace.txt
# Function to write the HTML Header to the file
Function writeHtmlHeader
{
param($fileName)
$date = ( get-date ).ToString('yyyy/MM/dd')  
Add-Content $fileName "<html>"  
Add-Content $fileName "<head>"  
Add-Content $fileName "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>"  
Add-Content $fileName '<title>EVOLUTION.COM DiskSpace Report</title>'  
Add-Content $fileName '<STYLE TYPE="text/css">'  
Add-Content $fileName  "<!--"  
Add-Content $fileName  "td {"  
Add-Content $fileName  "font-family: Tahoma;"  
Add-Content $fileName  "font-size: 11px;"  
Add-Content $fileName  "border-top: 1px solid #999999;"  
Add-Content $fileName  "border-right: 1px solid #999999;"  
Add-Content $fileName  "border-bottom: 1px solid #999999;"  
Add-Content $fileName  "border-left: 1px solid #999999;"  
Add-Content $fileName  "padding-top: 0px;"  
Add-Content $fileName  "padding-right: 0px;"  
Add-Content $fileName  "padding-bottom: 0px;"  
Add-Content $fileName  "padding-left: 0px;"  
Add-Content $fileName  "}"  
Add-Content $fileName  "body {"  
Add-Content $fileName  "margin-left: 5px;"  
Add-Content $fileName  "margin-top: 5px;"  
Add-Content $fileName  "margin-right: 0px;"  
Add-Content $fileName  "margin-bottom: 10px;"  
Add-Content $fileName  ""  
Add-Content $fileName  "table {"  
Add-Content $fileName  "border: thin solid #000000;"  
Add-Content $fileName  "}"  
Add-Content $fileName  "-->"  
Add-Content $fileName  "</style>"  
Add-Content $fileName "</head>"  
Add-Content $fileName "<body>"  

Add-Content $fileName  "<table width='100%'>"  
Add-Content $fileName  "<tr bgcolor='#CCCCCC'>"  
Add-Content $fileName  "<td colspan='7' height='25' align='center'>"  
Add-Content $fileName  "<font face='tahoma' color='#003399' size='4'><strong>EVOLVE.COM DiskSpace Report - $date</strong></font>"  
Add-Content $fileName  "</td>"  
Add-Content $fileName  "</tr>"  
Add-Content $fileName  "</table>"  

}

# Function to write the HTML Header to the file
Function writeTableHeader
{
param($fileName)

Add-Content $fileName "<tr bgcolor=#CCCCCC>"  
Add-Content $fileName "<td width='10%' align='center'>Drive</td>"  
Add-Content $fileName "<td width='50%' align='center'>Drive Label</td>"  
Add-Content $fileName "<td width='10%' align='center'>Total Capacity(GB)</td>"  
Add-Content $fileName "<td width='10%' align='center'>Used Capacity(GB)</td>"  
Add-Content $fileName "<td width='10%' align='center'>Free Space(GB)</td>"  
Add-Content $fileName "<td width='10%' align='center'>Freespace %</td>"  
Add-Content $fileName "</tr>"  
}

Function writeHtmlFooter
{
param($fileName)

Add-Content $fileName "</body>"  
Add-Content $fileName "</html>"  
}

Function writeDiskInfo
{
param($fileName,$devId,$volName,$frSpace,$totSpace)
$totSpace=[math]::Round(($totSpace/1073741824),2)
$frSpace=[Math]::Round(($frSpace/1073741824),2)
$usedSpace = $totSpace - $frspace
$usedSpace=[Math]::Round($usedSpace,2)
$freePercent = ($frspace/$totSpace)*100
$freePercent = [Math]::Round($freePercent,0)
 if ($freePercent -gt $warning)
 {
 Add-Content $fileName "<tr>"  
 Add-Content $fileName "<td>$devid</td>"  
 Add-Content $fileName "<td>$volName</td>"  

 Add-Content $fileName "<td>$totSpace</td>"  
 Add-Content $fileName "<td>$usedSpace</td>"  
 Add-Content $fileName "<td>$frSpace</td>"  
 Add-Content $fileName "<td>$freePercent</td>"  
 Add-Content $fileName "</tr>"  
 }
 elseif ($freePercent -le $critical)
 {
 Add-Content $fileName "<tr>"  
 Add-Content $fileName "<td>$devid</td>"  
 Add-Content $fileName "<td>$volName</td>"  
 Add-Content $fileName "<td>$totSpace</td>"  
 Add-Content $fileName "<td>$usedSpace</td>"  
 Add-Content $fileName "<td>$frSpace</td>"  
 Add-Content $fileName "<td bgcolor='#FF0000' align=center>$freePercent</td>"  
 #<td bgcolor='#FF0000' align=center> 
 Add-Content $fileName "</tr>"  
 }
 else
 {
 Add-Content $fileName "<tr>"  
 Add-Content $fileName "<td>$devid</td>"  
 Add-Content $fileName "<td>$volName</td>"  
 Add-Content $fileName "<td>$totSpace</td>"  
 Add-Content $fileName "<td>$usedSpace</td>"  
 Add-Content $fileName "<td>$frSpace</td>"  
 Add-Content $fileName "<td bgcolor='#FBB917' align=center>$freePercent</td>"  
 # #FBB917
 Add-Content $fileName "</tr>"  
 }
}
Function sendEmail
{ param($from,$to,$subject,$smtphost,$htmlFileName)
$body = Get-Content $htmlFileName
$smtp= New-Object System.Net.Mail.SmtpClient $smtphost
$msg = New-Object System.Net.Mail.MailMessage $from, $to, $subject, $body
$msg.isBodyhtml = $true
$smtp.send($msg)

}

writeHtmlHeader $freeSpaceFileName
foreach ($server in Get-Content $serverlist)
{
 Add-Content $freeSpaceFileName "<table width='100%'><tbody>"  
 Add-Content $freeSpaceFileName "<tr bgcolor='#CCCCCC'>"  
 Add-Content $freeSpaceFileName "<td width='100%' align='center' colSpan=6><font face='tahoma' color='#003399' size='2'><strong> $server </strong></font></td>"  
 Add-Content $freeSpaceFileName "</tr>"  

 writeTableHeader $freeSpaceFileName

 $dp = Get-WmiObject win32_logicaldisk -ComputerName $server |  Where-Object {$_.drivetype -eq 3}
 foreach ($item in $dp)
 {
 Write-Host  $item.DeviceID  $item.VolumeName $item.FreeSpace $item.Size
 writeDiskInfo $freeSpaceFileName $item.DeviceID $item.VolumeName $item.FreeSpace $item.Size

 }
Add-Content $freeSpaceFileName "</table>"  
}
writeHtmlFooter $freeSpaceFileName
$date = ( get-date ).ToString('yyyy/MM/dd')  
sendEmail send@email.com receive@email.com "Disk Space Report - $Date" hub1 $freeSpaceFileName  

Wenn ich diese besagte Powershell-Datei aufrufe via powershell oder cmd funktioniert alles

Auszug aus cmd:
@echo off

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe ". 'C:\Program Files\bin\FreeSpace.ps1'"  

exit

füge ich diese cmd in die Aufgabenplanung ein, steht zwar da, das die ps-datei ausgeführt wurde, aber in der email seh ich nur eine Zeile (Überschrift).

Eine ähnliche ps1 datei die ich über Exchange-Verwaltungsconsole aufrufe über cmd und Aufgabenplanung funktioniert einwandfrei. Nur diese nicht.


Danke im Voraus

Content-Key: 170367

Url: https://administrator.de/contentid/170367

Printed on: April 23, 2024 at 17:04 o'clock

Member: filippg
filippg Jul 25, 2011 at 18:46:12 (UTC)
Goto Top
Hallo,

eine EMail bekommst du aber? Dann wird ja das Skript selber schonmal ausgeführt.
Wenn der Tabellenheader drin ist, aber keine Diskdaten, liegt der Verdacht nahe, dass keine Diskdaten ausgelesen wurden.
Kann natürlich daran liegen, dass der Nutzer, der den Scheduled Task ausführt nicht für WMI berechtigt ist. Hast du das schon sichergestellt?
Mein Tipp wäre aber erstmal, dass das Arbeitsverzeichnis nicht stimmt. Die sl.txt gibst du nur als relativen Dateinamen an, nicht absolut. Versuch doch das mal.

Gruß

Filipp
Mitglied: 101462
101462 Jul 26, 2011 at 04:45:41 (UTC)
Goto Top
Man dankt =)

Ja, Email hatte ich bekommen, allerdings nur die Überschrift wurde ausgegeben ...
Script wurde im Aufgabenplaner schon als Administrator ausgeführt (daran lags nicht)

Deine Lösung mit der Anpassung des Pfades hat gepasst:

Vorher:
# First lets create a text file, where we will later save the freedisk space info
$freeSpaceFileName = "FreeSpace.htm"  
$serverlist = "sl.txt"  
[...]

Nachher:
# First lets create a text file, where we will later save the freedisk space info
$freeSpaceFileName = "FreeSpace.htm"  
$serverlist = "C:\reports\sl.txt"  
[...]