沒問題。只是分享。道歉,如果這是錯誤的場地和/或方法,但我已經從這些論壇採取了很多,只是想稍微回過頭來,以防其他人喜歡試圖學習PS並在PS中做一些基本上有用的事情。道歉,但我必須通過編輯器運行腳本。反正這裏是:Powershell腳本來監控DFSR積壓
###################################################################################################
# File: DFSR-check-3-show-backlog.ps1
# Desc: Simple monitor of DFSR backlog.
#
# Vers Date Who Description
# ---- ---- --- -----------
# v0.01 11-Aug-2016 sdo Initial draft, based on commands from BM.
# v0.02 12-Aug-2016 sdo Use "Out-String" to trim the blank lines of the table.
# v0.03 12-Aug-2016 sdo Extract count from verbose output if "100" items are returned.
# v0.04 12-Aug-2016 sdo Write to a log file.
# v0.05 12-Aug-2016 sdo Only display when different or every 100 entries.
# v0.06 12-Aug-2016 sdo Same layout and counter as other two scripts.
# v0.07 12-Aug-2016 sdo If the return backlog value is "", make it "0".
# v0.08 12-Aug-2016 sdo If display is "0,0", make it "-", which is easier to see activity.
# v0.09 12-Aug-2016 sdo Round anything > 100 to units of 100.
# v0.10 12-Aug-2016 sdo Use a function so that display updates less often.
###################################################################################################
###################################################################################################
# Functions...
Function fn_count($p1) {
$return = [string]$p1
if ($return -eq "") {Return "0"}
if (fn_is_numeric($return)) {
$number = [int]$return
switch ($number) {
{$_ -ge 100} {$return = $(([math]::Round($_/100)) * 100) ; $return=[string]$return+"+" ; Return $return }
{$_ -ge 1} {Return "<100" }
{$_ -eq 0} {Return "0" }
}
}
Return $return
}
Function fn_display_header {
""
" Disp Cnt AppAxx AppBxxxWorking AppCxxxx AppKxx AppTxxxFiles"
" ===== ===== ====== ============== ======== ====== ============"
}
Function fn_is_numeric($p1) {
Return ($($p1.Trim()) -Match "^[-+]?([0-9]*\.[0-9]+|[0-9]+\.?)$")
}
###################################################################################################
# Main code...
$script_spec = $PSCommandPath
$script_path = [System.IO.Path]::GetDirectoryName( $script_spec )
$script_name = [System.IO.Path]::GetFileNameWithoutExtension($script_spec )
$script_log = [System.IO.Path]::ChangeExtension( $script_spec, ".log")
$Host.UI.RawUI.WindowTitle = $script_name
$line = ""
$z_count = 0
$z_lines = 0
fn_display_header
fn_display_header | Out-File $script_log -Append
while ($true) {
$prev = $line
$z_count++
if (($z_count % 100) -eq 0) {$prev = ""}
###################################################################################################
# Establish whether DFSR is up/enabled/available, or unknown...
$set = $(DFSRDiag backlog /rgname:AppAxx /rfname:AppAxx /sendingmember:ZZZPAAACSFT001 /receivingmember:ZZZPAAACSFT002)
if ($LastExitCode -eq 0) {$AppAxx_Diag = "ok"} else {$AppAxx_Diag = "UNKNOWN"}
$set = $(DFSRDiag backlog /rgname:AppBxxxWorking /rfname:AppBxxxWorking /sendingmember:ZZZPAAACSFT001 /receivingmember:ZZZPAAACSFT002)
if ($LastExitCode -eq 0) {$AppBxxxWorking_Diag = "ok"} else {$AppBxxxWorking_Diag = "UNKNOWN"}
$set = $(DFSRDiag backlog /rgname:AppCxxxx /rfname:AppCxxxx /sendingmember:ZZZPAAACSFT001 /receivingmember:ZZZPAAACSFT002)
if ($LastExitCode -eq 0) {$AppCxxxx_Diag = "ok"} else {$AppCxxxx_Diag = "UNKNOWN"}
$set = $(DFSRDiag backlog /rgname:AppKxx /rfname:AppKxx /sendingmember:ZZZPAAACSFT001 /receivingmember:ZZZPAAACSFT002)
if ($LastExitCode -eq 0) {$AppKxx_Diag = "ok"} else {$AppKxx_Diag = "UNKNOWN"}
$set = $(DFSRDiag backlog /rgname:AppTxxxFiles /rfname:AppTxxxFiles /sendingmember:ZZZPAAACSTA003 /receivingmember:ZZZPAAACSTA004)
if ($LastExitCode -eq 0) {$AppTxxxFiles_Diag = "ok"} else {$AppTxxxFiles_Diag = "UNKNOWN"}
###################################################################################################
# Get DFSR back-log counts, from both sides... or report the "unknown" from the diagnostics...
if ($AppAxx_Diag -eq "ok") {
$verbose = $($set = $(Get-DFSRBackLog -Verbose -SourceComputerName ZZZPAAACSFT001 -DestinationComputerName ZZZPAAACSFT002 -GroupName AppAxx -ErrorAction SilentlyContinue | Select FullPathname)) 4>&1
if ($?) {$count = [string]$set.Count} else {$count = "ERROR"}
if ($count -ne "ERROR") {
if ($count -ne "100") { $count = fn_count($count) } else {
$verbose = [string]$verbose ; $count = $verbose.Split(" ")[-1] ; $count = fn_count($count) } }
$AppAxx_Display = $count
$verbose = $($set = $(Get-DFSRBackLog -Verbose -SourceComputerName ZZZPAAACSFT002 -DestinationComputerName ZZZPAAACSFT001 -GroupName AppAxx -ErrorAction SilentlyContinue | Select FullPathname)) 4>&1
if ($?) {$count = [string]$set.Count} else {$count = "ERROR"}
if ($count -ne "ERROR") {
if ($count -ne "100") { $count = fn_count($count) } else {
$verbose = [string]$verbose ; $count = $verbose.Split(" ")[-1] ; $count = fn_count($count) } }
$AppAxx_Display = $AppAxx_Display + "," + $count
} else {
$AppAxx_Display = $AppAxx_Diag
}
if ($AppBxxxWorking_Diag -eq "ok") {
$verbose = $($set = $(Get-DFSRBackLog -Verbose -SourceComputerName ZZZPAAACSFT001 -DestinationComputerName ZZZPAAACSFT002 -GroupName AppBxxxWorking -ErrorAction SilentlyContinue | Select FullPathname)) 4>&1
if ($?) {$count = [string]$set.Count} else {$count = "ERROR"}
if ($count -ne "ERROR") {
if ($count -ne "100") { $count = fn_count($count) } else {
$verbose = [string]$verbose ; $count = $verbose.Split(" ")[-1] ; $count = fn_count($count) } }
$AppBxxxWorking_Display = $count
$verbose = $($set = $(Get-DFSRBackLog -Verbose -SourceComputerName ZZZPAAACSFT002 -DestinationComputerName ZZZPAAACSFT001 -GroupName AppBxxxWorking -ErrorAction SilentlyContinue | Select FullPathname)) 4>&1
if ($?) {$count = [string]$set.Count} else {$count = "ERROR"}
if ($count -ne "ERROR") {
if ($count -ne "100") { $count = fn_count($count) } else {
$verbose = [string]$verbose ; $count = $verbose.Split(" ")[-1] ; $count = fn_count($count) } }
$AppBxxxWorking_Display = $AppBxxxWorking_Display + "," + $count
} else {
$AppBxxxWorking_Display = $AppBxxxWorking_Diag
}
if ($AppCxxxx_Diag -eq "ok") {
$verbose = $($set = $(Get-DFSRBackLog -Verbose -SourceComputerName ZZZPAAACSFT001 -DestinationComputerName ZZZPAAACSFT002 -GroupName AppCxxxx -ErrorAction SilentlyContinue | Select FullPathname)) 4>&1
if ($?) {$count = [string]$set.Count} else {$count = "ERROR"}
if ($count -ne "ERROR") {
if ($count -ne "100") { $count = fn_count($count) } else {
$verbose = [string]$verbose ; $count = $verbose.Split(" ")[-1] ; $count = fn_count($count) } }
$AppCxxxx_Display = $count
$verbose = $($set = $(Get-DFSRBackLog -Verbose -SourceComputerName ZZZPAAACSFT002 -DestinationComputerName ZZZPAAACSFT001 -GroupName AppCxxxx -ErrorAction SilentlyContinue | Select FullPathname)) 4>&1
if ($?) {$count = [string]$set.Count} else {$count = "ERROR"}
if ($count -ne "ERROR") {
if ($count -ne "100") { $count = fn_count($count) } else {
$verbose = [string]$verbose ; $count = $verbose.Split(" ")[-1] ; $count = fn_count($count) } }
$AppCxxxx_Display = $AppCxxxx_Display + "," + $count
} else {
$AppCxxxx_Display = $AppCxxxx_Diag
}
if ($AppKxx_Diag -eq "ok") {
$verbose = $($set = $(Get-DFSRBackLog -Verbose -SourceComputerName ZZZPAAACSFT001 -DestinationComputerName ZZZPAAACSFT002 -GroupName AppKxx -ErrorAction SilentlyContinue | Select FullPathname)) 4>&1
if ($?) {$count = [string]$set.Count} else {$count = "ERROR"}
if ($count -ne "ERROR") {
if ($count -ne "100") { $count = fn_count($count) } else {
$verbose = [string]$verbose ; $count = $verbose.Split(" ")[-1] ; $count = fn_count($count) } }
$AppKxx_Display = $count
$verbose = $($set = $(Get-DFSRBackLog -Verbose -SourceComputerName ZZZPAAACSFT002 -DestinationComputerName ZZZPAAACSFT001 -GroupName AppKxx -ErrorAction SilentlyContinue | Select FullPathname)) 4>&1
if ($?) {$count = [string]$set.Count} else {$count = "ERROR"}
if ($count -ne "ERROR") {
if ($count -ne "100") { $count = fn_count($count) } else {
$verbose = [string]$verbose ; $count = $verbose.Split(" ")[-1] ; $count = fn_count($count) } }
$AppKxx_Display = $AppKxx_Display + "," + $count
} else {
$AppKxx_Display = $AppKxx_Diag
}
if ($AppTxxxFiles_Diag -eq "ok") {
$verbose = $($set = $(Get-DFSRBackLog -Verbose -SourceComputerName ZZZPAAACSTA003 -DestinationComputerName ZZZPAAACSTA004 -GroupName AppTxxxFiles -ErrorAction SilentlyContinue | Select FullPathname)) 4>&1
if ($?) {$count = [string]$set.Count} else {$count = "ERROR"}
if ($count -ne "ERROR") {
if ($count -ne "100") { $count = fn_count($count) } else {
$verbose = [string]$verbose ; $count = $verbose.Split(" ")[-1] ; $count = fn_count($count) } }
$AppTxxxFiles_Display = $count
$verbose = $($set = $(Get-DFSRBackLog -Verbose -SourceComputerName ZZZPAAACSTA004 -DestinationComputerName ZZZPAAACSTA003 -GroupName AppTxxxFiles -ErrorAction SilentlyContinue | Select FullPathname)) 4>&1
if ($?) {$count = [string]$set.Count} else {$count = "ERROR"}
if ($count -ne "ERROR") {
if ($count -ne "100") { $count = fn_count($count) } else {
$verbose = [string]$verbose ; $count = $verbose.Split(" ")[-1] ; $count = fn_count($count) } }
$AppTxxxFiles_Display = $AppTxxxFiles_Display + "," + $count
} else {
$AppTxxxFiles_Display = $AppTxxxFiles_Diag
}
###################################################################################################
# Build the table for display...
if ($AppAxx_Display -eq "0,0") {$AppAxx_Display = "-"}
if ($AppBxxxWorking_Display -eq "0,0") {$AppBxxxWorking_Display = "-"}
if ($AppCxxxx_Display -eq "0,0") {$AppCxxxx_Display = "-"}
if ($AppKxx_Display -eq "0,0") {$AppKxx_Display = "-"}
if ($AppTxxxFiles_Display -eq "0,0") {$AppTxxxFiles_Display = "-"}
$table = @()
$table = New-Object PSObject -Property @{
AppAxx = $AppAxx_Display
AppBxxxWorking = $AppBxxxWorking_Display
AppCxxxx = $AppCxxxx_Display
AppKxx = $AppKxx_Display
AppTxxxFiles = $AppTxxxFiles_Display
}
$line = ($table | Format-Table -HideTableHeaders `
@{ expression = { $_.AppAxx } ; width = 15 } `
,@{ expression = { $_.AppBxxxWorking } ; width = 15 } `
,@{ expression = { $_.AppCxxxx } ; width = 15 } `
,@{ expression = { $_.AppKxx } ; width = 15 } `
,@{ expression = { $_.AppTxxxFiles } ; width = 15 } `
| Out-String).Trim()
if ($line -ne $prev) {
$z_lines++
if (($z_lines % 10) -eq 0) {
fn_display_header
fn_display_header | Out-File $script_log -Append
}
$display = $(Get-Date -Format T) + " " + $("{0:F0}" -f $z_lines).PadLeft(5) + " " + $("{0:F0}" -f $z_count).PadLeft(5) + " " + $line
$display
$display | Out-File $script_log -Append
}
Start-Sleep -Seconds 10
}
exit
腳本的功能是...對於五個不同的DFSR羣集對和五個不同的DFSR命名空間,請檢查DFSR(即複製)是否已啓用/開啓/已啓動/已配置,如果是,則查詢兩端DFSR關係並顯示積壓計數器。我已經使用了一個函數來減少顯示/報告/列表/屏幕/顯示更新率,即我對積壓計數的微小變化不感興趣,但我確實想跟蹤基本活動和大量積壓事件,即檢測DFSR實際上在工作。 HTH。 – sdo
如果你想展示你寫的代碼,請使用博客或論壇。如果您必須將其發佈在SO上:如果您發佈有關您的腳本解決的問題的問題,然後將您的腳本(包括一些解釋)作爲自己的答案發布,但只是將代碼發佈爲(非 - )問題顯然是題外話題。 –
好 - 理解 - 不會再發生。 – sdo