-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathChapter14.ps1
150 lines (108 loc) · 5.81 KB
/
Chapter14.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# Книга рецептов автоматизации Windows Server при помощи PowerShell, 4е
# Glava 14
# 1)
Find-Module -Name PSScriptAnalyzer |
Format-List Name, Type, Desc*, Author, Company*, *Date, *URI*
Get-Command -Module PSScriptAnalyzer
Get-ScriptAnalyzerRule | Select-Object -First 1 | Format-List
Get-ChildItem d:\PS\!!!\Bad.ps1
Invoke-ScriptAnalyzer -Path d:\PS\!!!\Bad.ps1 | Sort-Object -Property Line
$Script1 = @'
function foo {"hello!"
Get-ChildItem -Path D:\PS\!!!
}
'@
$Settings = @{
IncludeRules = @("PSPlaceOpenBrace", "PSUseConsistentIndentation")
Rules = @{
PSPlaceOpenBrace = @{
Enable = $true
OnSameLine = $true
}
PSUseConsistentIndentation = @{
Enable = $true
}
}
}
Invoke-Formatter -ScriptDefinition $Script1 -Settings $Settings
$Settings.Rules.PSPlaceOpenBrace.OnSameLine = $False
Invoke-Formatter -ScriptDefinition $Script1 -Settings $Settings
# 2) BPA
Get-Module -Name BestPractices -List
Get-Command -Module BestPractices | Format-Table -AutoSize
Get-BPAModel | Format-Table -Property Name,Id, LastScanTime -AutoSize
Invoke-BpaModel -ModelID Microsoft/Windows/UpdateServices -Mode ALL | Format-Table -AutoSize
Get-BpaResult -ModelID Microsoft/Windows/UpdateServices |
Where-Object Resolution -ne $null|
Format-List -Property Problem, Resolution
# 3)
# Общая теория состоит в том, что любая сетевая проблема заключается в DNS (пока вы не докажете обратное). Вы начинаете данный рецепт с получения полного доменного имени (FQDN),
# fully qualifed domain name своего хоста и значения IP адреса его DNS сервера, а затем проверяете работает ли этот сервер DNS.
# Затем вы применяете сконфигурированный сервер DNS на предмет определения значений имён Контроллеров домена в своём домене и убеждаетесь что способны достигать каждого Контроллера домена как по порту 389 (LDAP), так и по 445 (для GPO).
# Затем вы проверяете доступность шлюза по умолчанию. Наконец, вы тестируете возможность достижения удалённого хоста по порту 80 (http) и по порту 443 (HTTP поверх SSL/ TLS).
# Получаем значение имени DNS данного хоста
$DNSDomain = $Env:USERDNSDOMAIN
$FQDN = "$Env:COMPUTERNAME.$DNSDomain"
# Получаем значение адреса этого DNS сервера
$DNSHT = @{
InterfaceAlias = "Ethernet"
AddressFamily = 'IPv4'
}
$DNSServers = (Get-DnsClientServerAddress @DNSHT).ServerAddresses
$DNSServers
# Убеждаемся в доступности этих DNS серверов
Foreach ($DNSServer in $DNSServers) {
$TestDNS = Test-NetConnection -Port 53 -ComputerName $DNSServer
$Result = $TestDNS ? "Available" : ' Not reachable'
"DNS Server [$DNSServer] is $Result"
}
# Определяем поиск Контроллеров домена в нашем домене
$DNSRRName = "_ldap._tcp." + $DNSDomain
$DNSRRName
# Получаем записи SRV для выявленных Контроллеров домена
$DCRRS = Resolve-DnsName -Name $DNSRRName -Type all |
Where-Object IP4address -ne $null
$DCRRS
# Проверяем каждый из Контроллеров домена на доступность через LDAP
ForEach ($DNSRR in $DCRRS){
$TestDC = Test-NetConnection -Port 389 -ComputerName $DNSRR.IPAddress
$Result = $TestDC ? 'DC Available' : 'DC Not reachable'
"DC [$($DNSRR.Name)] at [$($DNSRR.IPAddress)] $Result for LDAP"
}
# Проверяем доступность Контроллеров домена для SMB
ForEach ($DNSRR in $DCRRS){
$TestDC = Test-NetConnection -Port 445 -ComputerName $DNSRR.IPAddress
$Result = $TestDC ? 'DC Available' : 'DC Not reachable'
"DC [$($DNSRR.Name)] at [$($DNSRR.IPAddress)] $Result for SMB"
}
# Проверяем шлюз по умолчанию
$NIC = Get-NetIPConfiguration -InterfaceAlias Ethernet
$DG = $NIC.IPv4DefaultGateway.NextHop
$TestDG = Test-NetConnection $DG
$Result = $TestDG.PingSucceeded ? "Reachable" : ' NOT Reachable'
"Default Gateway for [$($NIC.Interfacealias) is [$DG] - $Result"
# При помощи ICMP проверяем некоторый удалённый вебсайт
$Site = 'ua.energy'
$TestIP = Test-Connection -ComputerName $Site
$ResultIP = $TestIP ? 'Site Reachable' : 'Site NOT reachable'
"ICMP to $Site : $ResultIP"
# Тестируем удалённый вебсайт по порту 80
$TestPort80 = Test-Connection -ComputerName $Site -TcpPort 80
$Result80 = $TestPort80 ? 'Site Reachable' : 'Site NOT reachable'
"$Site over port 80 : $Result80"
# Тестируем удалённый вебсайт по порту 443
$TestPort443 = Test-Connection -ComputerName $Site -TcpPort 443
$Result443 = $TestPort443 ? 'Site Reachable' : 'Site NOT reachable'
"$Site over port 443 : $Result443"
# 4) Get-NeView
Find-Module -Name Get-NetView
Install-Module -Name Get-NetView -Force -AllowClobber
Get-Module -Name Get-NetView -ListAvailable
Import-Module -Name Get-NetView -Force
$OF = 'D:\Reports'
Get-NetView -OutputDirectory $OF
# 5) swicth to Powershell 7.2.1
Get-Alias ??
Get-PSSessionConfiguration
Enable-PSRemoting
Enter-PSSession -ConfigurationName powershell.7 -ComputerName localhost