View/Test-ServerAllFunctions.Task.ps1
Function Global:Test-ServerAllFunctions{ $TestResult = @() $TestResult += (Test-WsusServer) $TestResult += (Test-IisWsusPoolPath) $TestResult += (Test-SqlServerInstancePath) Test-FileServerResourceManager If ($False -notin $TestResult){ $MainWindow.Dispatcher.Invoke({ Write-Verbose "All services connection successfully established" $MainWindow.FindName("AllConnectionSuccessfully").Visibility = [System.Windows.Visibility]::Visible }) } } Function Global:Test-WsusServer{ Try{ Import-Module UpdateServices -ErrorAction Stop } Catch{ $MainWindow.Dispatcher.Invoke({ Write-Warning "Not found [UpdateServices] module: $($_.Exception.Message)" $MainWindow.FindName("WsusServerTextBox").Focus() $MainWindow.FindName("WsusServerConnectionFailure").Visibility = [System.Windows.Visibility]::Visible }) Return $False } Try{ Get-WsusServer -Name $CurrentConfig.Wsus.Server -PortNumber $CurrentConfig.Wsus.Port | Out-Null Write-Verbose "WSUS Server connected to $($CurrentConfig.Wsus.Server):$($CurrentConfig.Wsus.Port) successfully established" $MainWindow.Dispatcher.Invoke({ $MainWindow.FindName("WsusServerConnectionFailure").Visibility = [System.Windows.Visibility]::Collapsed }) Return $True } Catch{ $MainWindow.Dispatcher.Invoke({ Write-Warning "WSUS Server connected to $($CurrentConfig.Wsus.Server):$($CurrentConfig.Wsus.Port) failed: $($_.Exception.Message)" $MainWindow.FindName("WsusServerTextBox").Focus() $MainWindow.FindName("WsusServerConnectionFailure").Visibility = [System.Windows.Visibility]::Visible }) Return $False } } Function Global:Test-FileServerResourceManager{ Function Global:Convert-DisplayByteSize{ Param ([Parameter(Mandatory,ValueFromPipeline)][Uint64]$ByteSize) $Buffer = New-Object Text.StringBuilder 100 $ShlwapiStrFormatByteSize::StrFormatByteSize($ByteSize, $Buffer, $Buffer.Capacity) | Out-Null $Buffer.ToString() } Try{ Import-Module FileServerResourceManager -ErrorAction Stop } Catch{ $MainWindow.Dispatcher.Invoke({ Write-Warning "Not found [FileServerResourceManager] module: $($_.Exception.Message)" }) Return $False } Try{ Import-Module Storage -ErrorAction Stop } Catch{ $MainWindow.Dispatcher.Invoke({ Write-Warning "Not found [Storage] module: $($_.Exception.Message)" }) Return $False } Try{ $WsusContentDirectory = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Update Services\Server\Setup").ContentDir If ($WsusContentDirectory -ne $Null){ If (Test-Path $WsusContentDirectory){ $MainWindow.Dispatcher.Invoke({ $MainWindow.FindName("FileQuotaContainer").Visibility = [System.Windows.Visibility]::Visible $Script:ShlwapiStrFormatByteSize = Add-Type -PassThru -Name "ShlwapiStrFormatByteSize" -MemberDefinition "[DllImport(""Shlwapi.dll"", CharSet = CharSet.Auto)] public static extern long StrFormatByteSize(long fileSize, System.Text.StringBuilder buffer, int bufferSize);" $MainWindow.FindName("WsusContentFolderInformationListBoxItem").DataContext = ([String]::Format("現在 {0}", ((Get-ChildItem $WsusContentDirectory -Recurse | Measure-Object -Property Length -Sum).Sum | Convert-DisplayByteSize))) $VolumeInformation = Get-Volume -FilePath $WsusContentDirectory $MainWindow.FindName("WsusContentDriveInformationListBoxItem").DataContext = ([String]::Format("空き領域 {0} / {1}", ($VolumeInformation.SizeRemaining | Convert-DisplayByteSize), ($VolumeInformation.Size | Convert-DisplayByteSize))) $MainWindow.FindName("QuotaSizeTextBox").Maximum = [int]($VolumeInformation.Size / 1073741824) $MainWindow.FindName("QuotaSizeTextBox").Value = [int]($VolumeInformation.Size / 10737418240) If (@(Get-FsrmQuota | Where-Object Path -like $WsusContentDirectory)[0] -ne $Null){ $MainWindow.FindName("ConfigureFileQuotaExpander").IsExpanded = $True $MainWindow.FindName("QuotaSizeTextBox").Value = [int](@(Get-FsrmQuota -Path $WsusContentDirectory)[0].Size / 1073741824) } }) } } Write-Verbose "Initialize FileServerResourceManager and Storage module successfully established" } Catch{ $MainWindow.Dispatcher.Invoke({ Write-Warning "FileServerResourceManager failed: $($_.Exception.Message)" }) Return $False } } Function Global:Test-IisWsusPoolPath{ Try{ Import-Module WebAdministration -ErrorAction Stop } Catch{ $MainWindow.Dispatcher.Invoke({ Write-Warning "Not found [WebAdministration] module: $($_.Exception.Message)" $MainWindow.FindName("IisConnectionFailure").Visibility = [System.Windows.Visibility]::Visible $MainWindow.FindName("WsusPoolApplicationContainer").Visibility = [System.Windows.Visibility]::Collapsed }) Return $False } If (-not (Test-Path $CurrentConfig.Wsus.IisWsusPoolPath)){ $MainWindow.Dispatcher.Invoke({ Write-Warning "CurrentConfig.Wsus.IisWsusPoolPath ($($CurrentConfig.Wsus.IisWsusPoolPath)) が見つかりませんでした" $MainWindow.FindName("IisConnectionFailure").Visibility = [System.Windows.Visibility]::Visible $MainWindow.FindName("WsusPoolApplicationContainer").Visibility = [System.Windows.Visibility]::Collapsed }) Return $False } Else{ $MainWindow.Dispatcher.Invoke({ $MainWindow.FindName("WsusPoolApplicationContainer").Visibility = [System.Windows.Visibility]::Visible $MainWindow.FindName("WsusQueueLengthLabel").DataContext = "現在: $(((Get-ItemProperty $CurrentConfig.Wsus.IisWsusPoolPath -Name "queueLength").Value).Tostring("#,#"))" $MainWindow.FindName("WsusCpuLimitLabel").DataContext = "現在: $((Get-ItemProperty $CurrentConfig.Wsus.IisWsusPoolPath -Name "cpu.limit").Value) %" $MainWindow.FindName("WsusRapidFailProtectionIntervalLabel").DataContext = "現在: $([TimeSpan]::Parse((Get-ItemProperty $CurrentConfig.Wsus.IisWsusPoolPath -Name "failure.rapidFailProtectionInterval").Value).TotalMinutes) 分" $MainWindow.FindName("WsusRapidFailProtectionMaxCrashesLabel").DataContext = "現在: $(((Get-ItemProperty $CurrentConfig.Wsus.IisWsusPoolPath -Name "failure.rapidFailProtectionMaxCrashes").Value).Tostring("#,#"))" $MainWindow.FindName("WsusPeriodicRestartPrivateMemoryLabel").DataContext = "現在: $(((Get-ItemProperty $CurrentConfig.Wsus.IisWsusPoolPath -Name "recycling.periodicRestart.privateMemory").Value).Tostring("#,#")) KB" $MainWindow.FindName("WsusPeriodicRestartMemoryLabel").DataContext = "現在: $(((Get-ItemProperty $CurrentConfig.Wsus.IisWsusPoolPath -Name "recycling.periodicRestart.memory").Value).Tostring("#,#")) KB" }) Return $True } } Function Global:Get-WsusSqlServerName{ If (Test-Path "HKLM:\SOFTWARE\Microsoft\Update Services\Server\Setup"){ $ServerInstancePath = (Get-Item -Path "HKLM:\SOFTWARE\Microsoft\Update Services\Server\Setup").GetValue("SqlServerName") If ($ServerInstancePath -eq "MICROSOFT##WID"){ $ServerInstancePath = "\\.\pipe\Microsoft##WID\tsql\query" } Return $ServerInstancePath } } Function Global:Get-SqlCmdPath{ $Path = (Get-ChildItem "$($env:ProgramFiles)\Microsoft SQL Server\Client SDK\ODBC\" -Recurse -Filter "sqlcmd.exe" -File | Sort-Object FullName -Descending | Select-Object -First 1).FullName If ($Path -eq $Null){ $Path = $DefaultConfig.MaintenanceSql.SqlCmdPath } Return $Path } Function Global:Test-SqlServerInstancePath{ $SuccessfullyConnectedToSql = $False $WsusSqlServerName = Get-WsusSqlServerName $MainWindow.Dispatcher.Invoke({ $MainWindow.FindName("ServerInstancePathTextBox").DataContext = $WsusSqlServerName }) If ($CurrentConfig.MaintenanceSql.SqlCmdMode -eq "psmodule"){ Try{ Write-Verbose "[Invoke-Sqlcmd] SELECT @@VERSION: $((Invoke-Sqlcmd -ServerInstance $WsusSqlServerName -Query 'SELECT @@VERSION' -Encrypt Optional).Column1)" $SuccessfullyConnectedToSql = $True } Catch{} } Else{ Try{ If ((Start-Process (Get-SqlCmdPath) -ArgumentList "-S $WsusSqlServerName -q ""exit(SELECT @@VERSION)""" -Wait -NoNewWindow -PassThru).ExitCode -eq -102){ $SuccessfullyConnectedToSql = $True } } Catch{ $MainWindow.Dispatcher.Invoke({ Write-Warning "Get-SqlCmdPath ($(Get-SqlCmdPath)) が見つかりませんでした。SQLCMD ($(Get-SqlCmdPath)) が実行できるか確認してください: $($_.Exception.Message)" $MainWindow.FindName("SqlConnectionFailure").Visibility = [System.Windows.Visibility]::Visible $MainWindow.FindName("SqlContainer").Visibility = [System.Windows.Visibility]::Collapsed $MainWindow.FindName("ScheduleSqlContainer").Visibility = [System.Windows.Visibility]::Collapsed }) Return $False } } If(-not $SuccessfullyConnectedToSql){ $MainWindow.Dispatcher.Invoke({ Write-Warning "データベース ($WsusSqlServerName) が見つかりませんでした" $MainWindow.FindName("SqlConnectionFailure").Visibility = [System.Windows.Visibility]::Visible $MainWindow.FindName("SqlContainer").Visibility = [System.Windows.Visibility]::Collapsed $MainWindow.FindName("ScheduleSqlContainer").Visibility = [System.Windows.Visibility]::Collapsed }) Return $False } $MainWindow.Dispatcher.Invoke({ $MainWindow.FindName("SqlContainer").Visibility = [System.Windows.Visibility]::Visible $MainWindow.FindName("ScheduleSqlContainer").Visibility = [System.Windows.Visibility]::Visible #$MainWindow.FindName("SqlMinimumMemoryLabel").DataContext = "現在: $((Invoke-Sqlcmd -ServerInstance (Get-WsusSqlServerName) -InputFile (Join-Path (Get-Module Wsustainable).ModuleBase "Assets\Get-SqlMinimumMemorySize.sql") -Encrypt Optional).run_value) MB" $MainWindow.FindName("SqlMinimumMemoryLabel").DataContext = "現在: $((Invoke-Sqlcmd -ServerInstance (Get-WsusSqlServerName) -InputFile (Join-Path $PSScriptRoot "..\Assets\Get-SqlMinimumMemorySize.sql") -Encrypt Optional).run_value) MB" }) Write-Verbose "データベース ($WsusSqlServerName) へ接続できました" Return $True } |