(A vizsgaidőszak végével most van egy kis lélegzetvételnyi szünet, így most jut idő a félév alatt felgyűlt IT feladatok megoldására.) Adott a Windows Serverbe beépített File Server Resource Manager (FSRM), amivel kvótákat meg fájl kategorizálásokat, jelentéseket meg hasonló feladatokat lehet megcsinálni. Jó bevezetők:
Lehet szépen kvótákat beállítani, majd ha az elér egy bizonyos százalékot, akkor email értesítést lehet küldeni a felhasználóknak. A gond csak az, hogy ez nekünk egy olyan szerveren volt, ami nem tartományi tag. Helyi felhasználóhoz – már amennyire én tudom – pedig nem lehet email címet megadni (ezen minden egyes alkalommal meglepődöm). Úgyhogy a kvóta értesítés tesztelése során a következő hibát naplózta a rendszer:
Log Name: Application Source: SRMSVC Event ID: 12306 Level: Error Description: A File Server Resource Manager Service email action could not be run. Operation: Running email action. Quota limit reached. Processing File Server Resource Manager event Context: Action type: Email Action Mail-from address: FSRM@mit.bme Mail-reply-to address: FSRM@mit.bme Mail-to address: Mail-CC address: Mail-BCC address: Mail subject: Quota limit exceeded Mail message text: User SERVER\user has reached the quota limit for quota on d:\quotatest\micskeiz on server SERVER. The quota limit is 100.00 MB and the current usage is 81.50 MB (81% of limit). Quota path: d:\quotatest\micskeiz Threshold percent: 100 Error-specific details: Error: IFsrmEmailExternal::SendMail, 0x8004531c, The parameter 'addresses' cannot be an empty string. Parameter name: addresses
És tényleg, a Mail-to mező üres, így nem csoda, hogy nem tudja elküldeni. Keresgettem, de mintha ez másnak valahogy nem tűnt volna még fel (talán ez kapcsolódik kicsit a témához, de itt meg később AD-ről beszélnek már: Server 2008: In FSRM, where is does variable [Source Io Owner Email] come from). Úgyhogy valamit kézzel kellett hackelni.
- A GUI-ról a TO mezőt nem lehet szerkeszteni.
- Parancssorból (dirquota.exe) lehetne már módosítani a TO értéket is (lásd: Configuration files for notifications in File Server Resource Manager). Azonban a [Source File Owner] makró SERVER\login formában adja vissza a felhasználót, így azt közvetlenül nem lehet felhasználni még akkor se, ha login@domain formájú email címeink vannak.
- Maradt tehát az, hogy valami saját parancsot hívunk meg.
Egy egyszerű PowerShell script elvégzi a feladatot. A következőkre kell figyelni:
- Command: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
- Command arguments: -command d:\scripts\Send-MailMessage2.ps1 -userNameWithDomain ‘[Source Io Owner]’ -quotaRemotePath ‘[Quota Remote Paths]’ -quotaLimit ‘[Quota Limit MB]’ -quotaUsed ‘[Quota Used MB]’ -quotaTreshold ‘[Quota Threshold]’
- Az argumentumoknál tehát ‘ ‘ karaktereket kell használni a stringeknél és nem “-t. Ezen kívül nem lehet script blockot ({} közötti parancsok) átadni a powershell.exe-nek ha nem powershellből hívjuk meg
- A parancsot Local Service-ként nem futtatta nekem le, csak Local Systemként.
Végezetül a scipt:
# Name: Send-MailMessage2 # Author: Micskei Zoltán # Date: 2010.06.29. # Desc: sends a custom quota notification # Param: # param( [string] $userNameWithDomain, [string] $quotaRemotePath, [string] $quotaLimit, [string] $quotaUsed, [string] $quotaTreshold ) $DEFAULT_DOMAIN = "mydomain.hu" $FROM = "FSRM@mydomain.hu" $SMTP_SERVER = "localhost" $SERVER_ALIAS = "\\fileserver.mydomain.hu" $SERVER_NAME = "\\SERVER" if ( ! $userNameWithDomain.Contains("\") ) { Write-Error("userNameWithDomain is in wrong format, does not contain \") return } $to = [String]::Format("{0}@{1}", ($userNameWithDomain.Split("\"))[1], $DEFAULT_DOMAIN) $quotaRemotePath = $quotaRemotePath.Replace($SERVER_NAME,$SERVER_ALIAS) $subject = "Kvota tullepes a $quotaRemotePath konyvtaron" $body = "Tullepted a $quotaLimit MB megengedett kvota $quotaTreshold %-at a $quotaRemotePath konyvtaron. Aktalis hasznalat: $quotaUsed MB. Lassan torolj valamit a megosztasrol!" Send-MailMessage -To $to -Subject $subject -From $FROM -Body $body -SmtpServer $SMTP_SERVER Write-output "Message sent to $to" |
Azért jó lett volna, ha van valami beépített megoldás erre. Megkérdeztem a Technet fórumon,de ott se tudtak jobbat:)