0

f5 LTM の結果のテキスト ファイルを取得し、これを検索可能な配列に入れるスクリプトを作成して、昨日と今日の結果を比較できるようにしようとしています。

これはファイルの例です。

MemberCount  : 2
Name         : /Common/blah1
Availability : AVAILABILITY_STATUS_GREEN
Enabled      : ENABLED_STATUS_ENABLED
Status       : The pool is available

MemberCount  : 2
Name         : /Common/blah2
Availability : AVAILABILITY_STATUS_GREEN
Enabled      : ENABLED_STATUS_ENABLED
Status       : The pool is available

したがって、理想的には、名前を一意のフィールドにし、リストを並べ替えて、昨日から今日までのステータスの変化を比較できるようにしたいと考えています。

結果を電子メールで送信するために取り組んでいるコードは次のとおりですが、オブジェクトの変更を電子メールで取得したい行ごとの違いしかありません。

Add-PSSnapIn iControlSnapIn

$f5_hosts = '192.168.x.x', '192.168.x.x'
$uid = 'xx'
$pwd ='xx'


foreach($f5_host in $f5_hosts){
$f5_host_out = $(get-date -f yyyyMMdd)+"_"+$f5_host+".txt"
$f5_host_out_yesterday = $((get-date).AddDays(-1).ToString('yyyyMMdd'))+"_"+$f5_host+".txt"

#Check login details and generate LTM output file for $f5_host
Initialize-F5.iControl -HostName $f5_host -Username $uid -password $pwd
Get-F5.LTMPool | out-file $f5_host_out

#// Check if EMP file for yesterday exists and send results else send error 
if (Test-Path $f5_host_out_yesterday){
$f5_host_Result = compare-object -ReferenceObject (Get-Content $f5_host_out) -DifferenceObject (Get-Content $f5_host_out_yesterday )
$f5_host_out_yesterday+": file is Present!"
$Text_Body = $f5_host+": difference `r`n"
$Text_Body += ($f5_host_Result | out-string)
Send-MailMessage -to simon.thomason@racq.com.au -from simon.thomason@racq.com.au -subject $f5_host+": F5 Daily LTM Check" -body $Text_Body -smtpserver mailrelay.racqgroup.local
}else{
$f5_host_out_yesterday+": is not file is Present!"
Send-MailMessage -to simon.thomason@racq.com.au -from simon.thomason@racq.com.au -subject $f5_host+": Check failed" -body "Yesterday's file is not present" -smtpserver mailrelay.racqgroup.local
}
}

#Limit File retention to 30days.
$limit = (Get-Date).AddDays(-30)
#Get script location
$path = Get-Location

# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

したがって、出力として、このようなものを電子メールで見たいだけです

Difference From yesterday to today

Yesterday
MemberCount  : 2
Name         : /Common/blah1
Availability : AVAILABILITY_STATUS_GREEN
Enabled      : ENABLED_STATUS_ENABLED
Status       : The pool is available

Today
MemberCount  : 2
Name         : /Common/blah1
Availability : AVAILABILITY_STATUS_RED
Enabled      : ENABLED_STATUS_ENABLED
Status       : The pool is available
4

2 に答える 2

0

わかりました、パスワードのエクスポートとインポートに関する 2 番目の質問では、暗号化はユーザーごとに (マシンごとに確信しています) 行われるため、エクスポートして別のアカウントにインポートさせることはできませんが、単純に保存するだけです。これらの機能を使用できる暗号化されたパスワード:

Function Out-EncryptedPasswordFile{
[cmdletbinding()]
Param(
    [Parameter(Mandatory = $true)]
    [string]$Password,
    [Parameter(Mandatory = $true)]
    [ValidateScript({If(Test-Path (Split-Path $_)){$true}else{Throw "Unable to create file, directory '$(Split-Path $_)\' does not exist."} })][String]$Path
)
    ConvertTo-SecureString -AsPlainText $Password -Force | ConvertFrom-SecureString | Set-Content $Path -Encoding Unicode
}

#Usage Example
#Out-EncryptedPasswordFile TestP@ssw0rd c:\temp\password.txt

Function Import-EncryptedPasswordFile{
[cmdletbinding()]
Param(
    [Parameter(Mandatory = $true)]
    [ValidateScript({Test-Path $_})][string]$Path
)
    $SSPassword = Get-Content $Path | ConvertTo-SecureString
    $Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($SSPassword)
    [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)
    [System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
}

#Usage Example
#Import-EncryptedPasswordFile C:\temp\password.txt
于 2016-04-14T23:33:00.273 に答える
0

正しいか間違っているかは定かではありませんが、これは私が探していた結果をもたらしました。json が使用されたので、オブジェクトを保存して powershell オブジェクトに戻すことができました。

Add-PSSnapIn iControlSnapIn

$f5_hosts = 'x.x.x.x', 'x.x.x.x'
$uid = 'xx'
$pwd ='xx'


foreach($f5_host in $f5_hosts){
$f5_host_out = $(get-date -f yyyyMMdd)+"_"+$f5_host+".json"
$f5_host_out_yesterday = $((get-date).AddDays(-1).ToString('yyyyMMdd'))+"_"+$f5_host+".json"

#Check login details and generate LTM output file for $f5_host
Initialize-F5.iControl -HostName $f5_host -Username $uid -password $pwd
Get-F5.LTMPool | ConvertTo-Json |  out-file $f5_host_out


#// Check if EMP file for yesterday exists and send results else send error 
if (Test-Path $f5_host_out_yesterday){

$f5_host_json_today = Get-Content -Raw $f5_host_out | ConvertFrom-Json
$f5_host_json_yesterday = Get-Content -Raw $f5_host_out_yesterday | ConvertFrom-Json


$f5_host_Result = Compare-Object -ReferenceObject ($f5_host_json_today | Sort-Object ) -DifferenceObject ($f5_host_json_yesterday | Sort-Object ) -property MemberCount, Name, Status, Availability, Enabled, Status | sort-object -property Name
#$f5_host_Result
$f5_host_out_yesterday+": file is Present!"
$Text_Body = $f5_host+": difference `r`n"
$Text_Body += ($f5_host_Result | out-string)
Send-MailMessage -to y@x -from y@x -subject $f5_host+": F5 Daily LTM Check" -body $Text_Body -smtpserver blah
}else{
$f5_host_out_yesterday+": is not file is Present!"
Send-MailMessage -to y@x -from y@x -subject $f5_host+": Check failed" -body "Yesterday's file is not present" -smtpserver blah
}
}

#Limit File retention to 30days.
$limit = (Get-Date).AddDays(-30)
#Get script location
$path = Get-Location

# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
于 2016-04-17T04:29:03.497 に答える