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

所以理想情况下,我想让 Name 成为唯一字段并对列表进行排序,这样我就可以比较从昨天到今天的状态变化。

这是我正在处理的通过电子邮件发送结果的代码,但它仅提供逐行差异,我宁愿在电子邮件中获取对象更改。

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

好的,关于你的第二个问题,导出和导入密码,加密是按用户完成的(我很确定每台机器),所以你不能导出它,然后让另一个帐户导入它,但只是直接保存一个加密的密码,您可以使用这些功能:

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 回答