サーバー管理 PowerShellリソース管理

良い一日。



今日、管理者はネットワークリソースで、個人ディレクトリで使用されているGB従業員の数を追跡する必要がありました(ディスクドライブはネットワークドライブを接続して割り当てられます)。 個人リソースの最大許容サイズは1 GBであると想定しています。 このサイズが制限を超える場合、管理者に通知する必要があります。 また、個人リソースのサイズの急激な増加を制御する必要もあります。 たとえば、従業員の個人ディレクトリが週に200 MBずつ増加する場合、管理者に通知する必要があります。





したがって、上記の要件をすべて実装したPowershellコード:



メール送信機能。 この機能は普遍的ではなく、タスクに合わせて調整されています。 つまり メッセージの件名、受信者は変わらないという事実を受け入れます。 ボディのみが変更され、関数の入力パラメーターとして設定します。



function EmailNotification($Mail_body) { $Sender = "audit@..." $Receipt = "levitskaks@gmail.com" $Server = "gmail.com.ua" $Object = "DirSize: " + (Get-Date) $SMTPclient = new-object System.Net.Mail.SmtpClient $Server #Specify SMTP port if needed $SMTPClient.port = 25 #Activate SSL if needed #$SMTPclient.EnableSsl = $true #Specify email account credentials if needed $SMTPAuthUsername = "levitskaks@gmail.com" $SMTPAuthPassword = "pass" $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($SMTPAuthUsername, $SMTPAuthPassword) $Message = new-object System.Net.Mail.MailMessage $Sender, $Receipt, $Object, $Mail_body #-$Message.IsBodyHtml = $true; $SMTPclient.Send($Message) }
      
      







main関数に渡します。 着信パラメーター:

-ソースディレクトリ。 各従業員のディレクトリのリストがあるディレクトリ。

-バイト単位の最大許容サイズ。

-作業のログを保存する方法。



 function Check-Size-Directory ($dir, $GB, $Logpath) {
      
      







年の曜日を決定します。 執筆時点では、スクリプトは47週間でした。

また、月曜日に週1回チェックを実行することに関心があります。 チェックのロジックは次のとおりです。偶数週にログ「0.log」が保存されます。 奇妙な週に、「1.log」ファイルを保存します。 変更日「0.log」が変更日「1.log」より大きい場合、論理的には先週が偶数であると判断します。 また、サイズが200 MB以上増加したディレクトリを確認します。



 [Int32]$Monday = (Get-Date -UFormat "%w") $Monday [Int32]$Week = (Get-Date -UFormat "%W") $Week if ($week%2 -eq 0 -and $Monday -eq 1){ $LogPathFile = $LogPath + "\" + ($week%2).ToString() + ".log" If (!(Test-Path -path $LogPathFile)){ Write-Host " " New-Item -Path $LogPathFile -ItemType File } $ToFile = "" | Out-File $LogPathFile Write-Host " " Get-ChildItem -path $dir | %{ $dir_property = dir $_.FullName -recurse | where {-Not $_.PSIsContainer}| Measure-Object -Property length -Sum
      
      







最初のチェックが必要です:1 GBより大きいサイズのディレクトリをチェックします。



  if ($dir_property.Sum -gt $GB){ $Mail_body+= "  " + $_.FullName + "    1 .`n" $Mail_body+= "  " + $_.FullName + "  " + (($dir_property.Sum)/1024/1024) + " .`n" $Mail_body+= "------------------------------------------------------------------------------------------`n" <b>$ToFile = $_.DirectoryName + " " + (($dir_property.Sum)/1024/1024) | Out-File $LogPathFile -Append</b> } else { Write-Host "   : " $_.FullName } } EmailNotification -Mail_body $Mail_body
      
      







ディレクトリの名前とサイズをセパレーター「|」で保存した後、ファイルの内容を解析します。



 <b>$ToFile = $_.DirectoryName + " " + (($dir_property.Sum)/1024/1024) | Out-File $LogPathFile -Append</b>
      
      







1週間前のファイルと比較するために、どのファイルを新規と見なすかを決定します。



 $Mail_body = "" If ((Get-Item -Path $LogPath\0.log).LastWriteTime -gt (Get-Item -Path $LogPath\1.log).LastWriteTime){ $log_content = Get-Content (Get-ChildItem -Path $LogPath\0.log) foreach ($data in $log_content) { $x = $data.split("|") $xc1 = $x[0] $xc2 = $x[1] $log_content = Get-Content (Get-ChildItem -Path $LogPath\1.log) foreach ($data in $log_content) { $y = $data.split("|") if ($xc1 -eq $y[0]){ if(([Int32]$xc2 - [Int32]$y[1]) -gt 200){ $Mail_body += "   : " + $xc1 + "`n     : " + $y[1] + " ." + "`n     : " + $xc2 + " .`n" } } } } EmailNotification -Mail_body $Mail_body } }
      
      







週のパリティ/奇数のチェックは、年の受信週を法で割ることによってチェックされます:



 <b>$week%2</b>
      
      







奇数週の同様のチェック:



  if ($week%2 -eq 1 -and $Monday -eq 1){ Write-Host " " $LogPathFile = $LogPath + "\" + ($week%2).ToString() + ".log" If (!(Test-Path -path $LogPathFile)){ Write-Host " " New-Item -Path $LogPathFile -ItemType File } $ToFile = "" | Out-File $LogPathFile Get-ChildItem -path $dir | %{ $dir_property = dir $_.FullName -recurse | where {-Not $_.PSIsContainer}| Measure-Object -Property length -Sum if ($dir_property.Sum -gt $GB){ $Mail_body+= "  " + $_.FullName + "    1 .`n" $Mail_body+= "  " + $_.FullName + "  " + (($dir_property.Sum)/1024/1024) + " .`n" $Mail_body+= "------------------------------------------------------------------------------------------`n" $ToFile = $_.Name + "|" + (($dir_property.Sum)/1024/1024) | Out-File $LogPathFile -Append } else { Write-Host "   : " $_.FullName } } EmailNotification -Mail_body $Mail_body $Mail_body = "" If ((Get-Item -Path $LogPath\1.log).LastWriteTime -gt (Get-Item -Path $LogPath\0.log).LastWriteTime){ $log_content = Get-Content (Get-ChildItem -Path $LogPath\1.log) foreach ($data in $log_content) { $x = $data.split("|") $xc1 = $x[0] $xc2 = $x[1] $log_content = Get-Content (Get-ChildItem -Path $LogPath\0.log) foreach ($data in $log_content) { $y = $data.split("|") if ($xc1 -eq $y[0]){ if(([Int32]$xc2 - [Int32]$y[1]) -gt 200){ $Mail_body += "   : " + $xc1 + "`n     : " + $y[1] + " ." + "`n     : " + $xc2 + " .`n" $Mail_body } } } } EmailNotification -Mail_body $Mail_body } } }
      
      







開始するには、受信パラメーターを決定し、チェックを実行します。



 # :       1  $GB = 1073741824 $dir = "D:\Program Files" Check-Size-Directory -dir $dir -GB 107374 -Logpath "D:"
      
      







メールでメッセージを確認した結果:



件名:DirSize:11/27/2015 11:32:05

日付:2015年11月27日11:32:05 +0200

From:sizefoldres@gmail.com

宛先:levitskaks@gmail.com



ディレクトリF:\ Shared \ PrivateData \ BRUのサイズが1 GBのサイズを超えています。

F:\ Shared \ PrivateData \ BRUディレクトリのサイズは1239.06250095367 Mbです。

-



ディレクトリサイズF:\ Shared \ PrivateData \ Danが1 GBのサイズを超えています。

F:\ Shared \ PrivateData \ Danディレクトリのサイズは1670.62088680267 Mbです。

-



ディレクトリサイズF:\ Shared \ PrivateData \ DYAは1 GBを超えています。

F:\ Shared \ PrivateData \ DYAディレクトリのサイズは7456.12028884888 Mbです。

-



ディレクトリサイズF:\ Shared \ PrivateData \ GLUは1 GBを超えています。

F:\ Shared \ PrivateData \ GLUディレクトリのサイズは2198.93785953522 Mbです。

-

...



ファイル0.logの内容:



 ActiveX|2.8662109375 AvPinTool|0.5712890625 BDE|10.4070873260498 <b>drivers|6.512216567993</b> Drv for Secureoken 337|0.129350662231445 eclipse-standard-kepler-SR2-win32|545.861120223999 flash|122.166826248169 FTP_Drive|0.252327919006348 Install|431.435597419739 Jabber|55.9909982681274 LibreOffice_4_3_4|215.234375 Liga9|336.688585281372 Mail (address_book)|0.141551971435547 nkicntInit|0.166786193847656 powershell_3.0|14.0534420013428 PowerShell_4_0|46.8222227096558 single|630.298968315125 Total Commander|6.67717361450195 WinImage|1.12846660614014 zabbix|1.37527465820313 |0.584843635559 CSPKeyUtil.exe|0.89208984375 jdk-8u65-windows-i586.exe|181.22908782959 jre-8u65-windows-i586.exe|47.8077087402344 LimeActiveXCrypt.cab|5.14455604553223 npp.6.7.4.Installer.exe|7.59689044952393 SkypeSetupFull_6.21.exe|34.3624038696289 winapcupsd-3.14.12.exe|5.84123229980469
      
      







1.logファイルの内容:



 ActiveX|2.8662109375 AvPinTool|0.5712890625 BDE|10.4070873260498 <b>drivers|276.512216567993</b> Drv for Secureoken 337|0.129350662231445 eclipse-standard-kepler-SR2-win32|545.861120223999 flash|122.166826248169 FTP_Drive|0.252327919006348 Install|431.435597419739 Jabber|55.9909982681274 LibreOffice_4_3_4|215.234375 Liga9|336.688585281372 Mail (address_book)|0.141551971435547 nkicntInit|0.166786193847656 powershell_3.0|14.0534420013428 PowerShell_4_0|46.8222227096558 single|630.298968315125 Total Commander|6.67717361450195 WinImage|1.12846660614014 zabbix|1.37527465820313 |205.584843635559 CSPKeyUtil.exe|0.89208984375 jdk-8u65-windows-i586.exe|181.22908782959 jre-8u65-windows-i586.exe|47.8077087402344 LimeActiveXCrypt.cab|5.14455604553223 npp.6.7.4.Installer.exe|7.59689044952393 SkypeSetupFull_6.21.exe|34.3624038696289 winapcupsd-3.14.12.exe|5.84123229980469
      
      







2つのファイルを比較した結果:



ディレクトリサイズの劇的な増加:D:\ Program Files \ drivers

先週のサイズは6.512216567993Mbでした。

今週のサイズは276.512216567993 Mbです。



結果は情報であり、管理者の要求に応じて、リソースを使用した任意のアクション(アーカイブや転送、パラメーターによるファイルの選択、リポジトリへの送信など)を実行できます。



ご清聴ありがとうございました。



All Articles