Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/446: Рейтинг темы: голосов - 446, средняя оценка - 4.91
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
1

Полезные PowerShell скрипты

26.10.2015, 09:45. Показов 85633. Ответов 63
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здесь публикуются полезные с практической точки зрения сценарии PowerShell или те, что могут послужить отправной точкой для решения насущных задач. Также всяк сюда постящий должен соблюдать одно простое правило - предварять публикуемый сценарий инструкцией #requires -version N, где N - версия хоста, под который весь код писан (или оговаривать под какими версиями код работает), дабы не возникало путаницы и вопросов, дескать, почему не работает и прочее в этом духе; также, если в том возникает необходимость, желательно указывать версию CLR. Например:

UserAssist.ps1
PowerShell
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
#requires -version 2
<#
   .SYNOPSIS
        Приводит значения ветки реестра
        HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\*\Count
        к удобочитаемому виду
#>
(gp HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\*\Count) | % {
  $rot13 = New-Object "Collections.Generic.Dictionary[Char, Char]"
  $table = {param([Int32[]]$arr, [Int32]$lim)
    $arr | % {
      $$ = if ($_ -le $lim) {$_ + 13} else {$_ - 13}
      $rot13.Add([Char]$_, [Char]$$)
    }
  }
  $table.Invoke(65..90, 77)
  $table.Invoke(97..122, 109)
  "Session Counter      LastLaunchTime Name`n$('-'*7) $('-'*7)      $('-'*14) $('-'*4)"
}{
  $_.PSObject.Properties | ? {$_.Name -notlike 'PS*'} | % {
    $name = -join ($_.Name.ToCharArray() | % {if($rot13.ContainsKey($_)){$rot13[$_]}else{$_}})
    if ($_.Value.Length -eq 16) {
      $time = [BitConverter]::ToInt64($_.Value[8..15], 0)
      '{0,7}{1,8}{2,20} {3}' -f [BitConverter]::ToUInt32($_.Value[0..3], 0), [BitConverter]::ToUInt32(
          $_.Value[4..7], 0
      ), $(if($time -ne 0){[DateTime]::FromFileTime($time)}else{''}), $name
    }
    else {
      '{0,7}{1,8}{2,20} {3}' -f [BitConverter]::ToUInt32($_.Value[4..7], 0), '', '', $name
    }
  }
}
Clock.ps1
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#requires -version 2
<#
   .SYNOPSIS
         Изменяет заголовок хоста PowerShell на часы.
#>
& {
  $rex = '(\d{2}\:){2}\d{2}'
  [void]([PowerShell]::Create()).AddScript({
    while ($true) {
      [Console]::Title = $host.UI.RawUI.WindowTitle -replace $rex, (date -f 'HH:mm:ss')
      Start-Sleep -Seconds 1
    }
  }).BeginInvoke()
}
line.ps1
PowerShell
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
<#
   .SYNOPSIS
         Рисует разноцветные линии (с текстом и без) в хосте PowerShell.
         Есть один небольшой недостаток: не работает перекрытие рисуемой
         линией приглашения хоста.
   .NOTES
         PowerShell 2 и 4.
#>
$line = {
  param(
    [Int32]$x, [Int32]$y, [String]$msg = $null,
    [ConsoleColor]$fc = 'White', [ConsoleColor]$bc = 'Black'
  )
  
  $pos = ($raw = $host.UI.RawUI).WindowPosition
  $con = $raw.WindowSize
  
  $pos.X += $x
  $pos.Y += $y
  
  switch ([String]::IsNullOrEmpty($msg)) {
    $true  {$msg = "$([Char]32)" * $con.Width}
    $false {$msg += "$([Char]32)" * ($con.Width - $msg.Length)}
  }
  $row = $raw.NewBufferCellArray(@($msg), $fc, $bc)
  
  $raw.SetBufferContents($pos, $row)
}
[Enum]::GetValues([ConsoleColor]) | % {
  &$line 0 ($$ = [Int32]$_) "Строка $$" $_
}
Пример работы
Полезные PowerShell скрипты
2
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2015, 09:45
Ответы с готовыми решениями:

Не знаю как писать скрипты на PowerShell
1. Ввод параметров реализован через аргументы. (при запуске скрипта в командной строке аргументы...

Написать скрипты на PowerShell (.ps1) 1.Нахожденияе числа Фибоначчи по номеру 2.Вывод измененных файлов каталога
Здравствуйте, нужна помощь в написании двух скриптов на PowerShell (расширение .ps1) 1. Выведите...

Полезные BAT/CMD скрипты
В этой теме выкладываем скрипты, которые часто используются Вами или на Ваш взгляд могут иметь...

Полезные VBS скрипты и программы по работе с ними
В этой теме выкладываем скрипты, которые часто используются Вами или на Ваш взгляд могут иметь...

63
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
19.01.2016, 14:18  [ТС] 21
Author24 — интернет-сервис помощи студентам
Get-LoadedDrivers - список загруженных драйверов
PowerShell
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
#requires -version 5
function Get-LoadedDrivers {
  <#
    .SYNOPSIS
        Выводит список загруженных драйверов.
    .NOTES
        Несмотря на указанную версию PS, сценарий при минимальных правках (а может даже
        и без оных) вполне работоспособен и на более ранних версиях.
        Author: greg zakharov
  #>
  begin {
    if (($$ = [PSObject].Assembly.GetType(
      'System.Management.Automation.TypeAccelerators'
    ))::Get.Keys -notcontains 'Marshal') {
      [void]$$::Add('Marshal', [Runtime.InteropServices.Marshal])
    }
    
    $NtQuerySystemInformation = [Regex].Assembly.GetType(
      'Microsoft.Win32.NativeMethods'
    ).GetMethod('NtQuerySystemInformation')
    $ret = 0
  }
  process {
    try {
      $ptr = [Marshal]::AllocHGlobal(1024)
      if ($NtQuerySystemInformation.Invoke($null, ($par = [Object[]]@(
          11, $ptr, 1024, $ret
      ))) -ne 0) {
        $ptr = [Marshal]::ReAllocHGlobal($ptr, [IntPtr]$par[3])
        if ($NtQuerySystemInformation.Invoke($null, @(11, $ptr, $par[3], 0)) -ne 0) {
          throw New-Object InvalidOperationException('Unable get correct buffer length.')
        }
      }
      
      0..([Marshal]::ReadInt32($ptr) - 1) | % {$i = 12}{
        New-Object PSObject -Property @{
          Address = '0x{0:x}' -f [Marshal]::ReadInt32($ptr, $i)
          Size    = [Marshal]::ReadInt32($ptr, $i + 4)
          Path    = ([Marshal]::PtrToStringAnsi([IntPtr](
              $ptr.ToInt64() + $i + 20), 256
          )).Split("`0")[0]
        }
        $i += 20 + 256 + 8
      } | Select-Object Address, Size, Path
    }
    catch {
      $_.Exception
    }
    finally {
      if ($ptr) {
        [Marshal]::FreeHGlobal($ptr)
      }
    }
  }
  end {
    [void]$$::Remove('Marshal')
  }
}
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
11.02.2016, 15:44  [ТС] 22
Get-ParentProcess.ps1
PowerShell
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
#requires -version 2
function Get-ParentProcess {
  <#
    .SYNOPSIS
        Возвращет PID родителя указанного процесса.
    .EXAMPLE
        PS C:\> Get-ParentProcess 1620
 
        Name : explorer
        PID  : 1956
  #>
  param(
    [Parameter(Mandatory=$true, Position=0)]
    [Int32]$Id
  )
 
  [Regex].Assembly.GetType(
    'Microsoft.Win32.NativeMethods'
  ).GetMethods() | ? {
    $_.Name -match '\A(Nt|Open).*Process\Z'
  } | % { Set-Variable $_.Name $_ }
 
  $NtProcessBasicInfo = [Regex].Assembly.GetType(
    'Microsoft.Win32.NativeMethods+NtProcessBasicInfo'
  ).GetConstructor(
    'Public, Instance', $null, [Type[]]@(), $null
  ).Invoke($null)
 
  if (($sph = $OpenProcess.Invoke($null, @(0x400, $false, $Id))).IsInvalid) {
    return
  }
 
  [Int32[]]$ret = @()
  if ($NtQueryInformationProcess.Invoke($null, ($par = [Object[]]@(
    $sph, 0, $NtProcessBasicInfo,
    [Runtime.InteropServices.Marshal]::SizeOf($NtProcessBasicInfo), $ret
  ))) -eq 0) {
    New-Object PSObject -Property @{
      Name = (Get-Process -Id ($$ = $par[2].InheritedFromUniqueProcessId) -ea 0).Name
      PID  = $$
    } | Format-List
  }
 
  $sph.Close()
}
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
15.02.2016, 17:33  [ТС] 23
Expand-MsiPackage.ps1
PowerShell
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
#requires -version 2
function Expand-MsiPackage {
  <#
    .SYNOPSIS
        Распаковывает MSI пакеты.
    .DESCRIPTION
        Для распаковки используется msiexec, что в свою
        очередь накладывает ограничения, определенные
        данной службой.
    .EXAMPLE
        PS E:\dist> Expand-MsiPackage python-3.4.4.msi E:\python
  #>
  param(
    [Parameter(Mandatory=$true, Position=0)]
    [ValidateScript({Test-Path $_})]
    [String]$MsiPackage,
 
    [Parameter(Mandatory=$true, Position=1)]
    [String]$Destination
  )
 
  $MsiPackage = Convert-Path $MsiPackage
 
  if (!(Test-Path $Destination)) {
    [void](ni $Destination -Type directory)
  }
  msiexec /a $MsiPackage /qb TARGETDIR=$Destination
}
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
15.02.2017, 16:26  [ТС] 24
Чтение содержимого RAR-архива без сторонних утилит
PowerShell
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
function Get-RarContent {
  <#
    .SYNOPSIS
        Получает содержимое RAR-архива.
  #>
  param(
    [Parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript({Test-Path $_})]
    [String]$Path
  )
 
  begin {
    # сигнатура rar
    [Byte[]]$rar = 0x52, 0x61, 0x72, 0x21, 0x1A, 0x07, 0x00
  }
  process {
    try {
      $fs = [IO.File]::OpenRead((Convert-Path $Path))
      $br = New-Object IO.BinaryReader($fs)
 
      if (($cmp = Compare-Object ($br.ReadBytes(7)) $rar -PassThru)) {
        throw New-Object IO.IOException(
          'Specified file is nat a RAR archive, try another.'
        )
      }
      # MAIN_HEAD
      if (($mhd = $br.ReadBytes(7))[2] -ne 0x73) {
        throw New-Object IO.IOException(
          'Структура MAIN_HEAD не была найдена.'
        )
      }
      # прыгаем на первый файл
      [void]$fs.Seek((
        [BitConverter]::ToUInt16($mhd[5..6], 0) - 7
      ), [IO.SeekOrigin]::Current)
      # прогуливаемся по всем доступным значениям
      $content = while ($true) {
        $seg = $br.ReadBytes(7) # начало блока
        if (($bsz = [BitConverter]::ToUInt16($seg[5..6], 0)) -le 7) {
          break # nothing to read
        }
 
        $seg += $br.ReadBytes($bsz - 7) # весь блок
        # проверяем что текущий объект является файлом\папкой
        if ($seg[2] -eq 0x74) {
          [void]$fs.Seek((
            $cmp = [BitConverter]::ToUInt32($seg[7..10], 0) # сжатие
          ), [IO.SeekOrigin]::Current)
 
          if ((
            $atr = [BitConverter]::ToUInt32($seg[28..31], 0)
          ) -band 0x10 -or $atr -band 0x4000) {
            continue # а нафига нам пути папок?!
          }
 
          New-Object PSObject -Property @{
            Name = -join [Char[]]$seg[32..(
              32 + [BitConverter]::ToUInt16($seg[26..27], 0
            ) - 1)]
            Cmpd = $cmp
            Size = [BitConverter]::ToUInt32($seg[11..14], 0)
            Attr = -join (([IO.FileAttributes]$atr).ToString().Split(
              ', ', [StringSplitOptions]::RemoveEmptyEntries
            ) | ForEach-Object { $_[0] })
            #Crc32 = '0x{0:X}' -f ([BitConverter]::ToUInt32($seg[16..19], 0))
          }
        }
        else {
          if ([BitConverter]::ToUInt16($seg[3..4], 0) -band 0x8000) {
            [void]$fs.Seek([BitConverter]::ToUInt32(
              $seg[7..10], 0), [IO.SeekOrigin]::Current
            )
          }
        }
      } # while
    }
    catch { Write-Warning $_ }
    finally {
      if ($br) { $br.Close() }
      if ($fs) { $fs.Dispose() }
    }
  }
  end {
    if ($content) {
      $content | Select-Object Attr, Size, Cmpd, Name |
      Format-Table -AutoSize
    }
  }
}
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
26.09.2017, 18:42 25
watchdog.ps1
Набор функций-командлетов для наблюдения за изменениями файлов\директорий на основе класса FileSystemWatcher.
Для удобства использования можно поместить их в файл powershell профиля - тогда они будут доступны наравне с прочими командами сразу из консоли,
либо поместить файл модуля watchdog.ps1 в папку powershell модулей
.
PowerShell
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
# required -version 3.0
set-alias swatch Set-Watch 
function Set-Watch() {
<#
    .SYNOPSIS
        Запускает фоновый процесс отслеживания изменений файловой системы на основе класса FileSystemWatcher
    .DESCRIPTION
        Существующие фильтры отслеживаемых изменений:
        NotifyFilters.CreationTime
        NotifyFilters.LastAccess
        NotifyFilters.LastWrite
        NotifyFilters.FileName
        NotifyFilters.DirectoryName
        NotifyFilters.Security
        NotifyFilters.Size
        NotifyFilters.Attributes
    .EXAMPLE
        PS C:\> . .\watchdog.ps1           
        PS C:\> swatch -path "d:\test" -filter "*.txt"  -event Created,Deleted 
    .EXAMPLE    
        PS C:\> swatch -path "d:\test" -filter "*.txt"  -event Created,Deleted  -command "start-process notepad.exe" -test
    .LINK 
        [url]https://msdn.microsoft.com/ru-ru/library/system.io.filesystemwatcher(v=vs.110).aspx[/url]
    .LINK
        Remove-Watch
    .LINK
        Disable-Watch
    .LINK 
        Enable-Watch
    .LINK
        Get-Watch
#>
 
[CmdletBinding()] 
param(
    # путь до отслеживаемой директории
    [parameter(Mandatory=$true,Position=1)]
    [alias("p")][string]$path,                           
    [parameter(Mandatory=$true,Position=2)]
    # фильтр типов отслеживаемых файлов
    [alias("f")][string]$filter="*.*",                   
    # задает тип отслеживаемых изменений
    [alias("n")][string]$notify='FileName, LastWrite',   
    # нужно ли рекурсивно отслеживать субдиректории 
    [alias("r")][switch]$recurse,                        
     # событи(e|я) на котор(ое|ые) нужно реагировать
    [parameter(Mandatory=$true,Position=3)]
    [ValidateSet("Created","Deleted","Renamed","Changed")]
    [alias("e")][string[]]$events,                      
    [parameter(Mandatory=$false)]
    # строковые идентифкаторы событий
    [alias("name")][string[]]$id=@(),
    # действие которое нужно выполнить - передается одной строкой вместе с аругментами
    [string]$command,                                    
    # вывод переданных аргументов
    [switch]$test
    )
 
  
    $fsw = New-Object IO.FileSystemWatcher -Property @{
        Path = $path
        Filter = $filter
        IncludeSubdirectories = $recurse
        NotifyFilter = [IO.NotifyFilters]$notify
    }
    Set-Variable __watcher -Value $fsw -Scope Script
 
    Set-Variable command -Value $command -Scope Script
    
    $action = {
        #$command  = Get-Variable command -valueOnly -Scope Global
        $fullPath   = $event.SourceEventArgs.FullPath
        $fileName   = $event.SourceEventArgs.Name
        $changeType = $event.SourceEventArgs.ChangeType
        $timeStamp  = $event.TimeGenerated
        Write-Host "The file '$fileName' was $changeType at $timeStamp"
        
 
        if (![String]::IsNullOrEmpty($command)) {
            Invoke-Expression $command 
        }
 
    }
    
    $calls = [Collections.ArrayList]::new()
    
    for ($i=0; $i -lt $events.length; $i++) {
        
        if ($id.Length -eq $events.Length){
            $jobname = $id[$i]   
        } else {
            $jobname = $events[$i]
        }
        
        $params = @{SourceIdentifier = $jobname; Action = $action}
        if ((get-job).Name -ccontains $jobname) {
            Write-Host "Задание $jobname уже существует" -f Red
            
        } else {
            $regEvent = Register-ObjectEvent $fsw $events[$i] @params
            $calls.Add($regEvent)|Out-Null 
        }
        
    }
 
    # выводим аргументы функции
    if ($test) {
        $MyInvocation.BoundParameters.GetEnumerator() | Foreach { 
            echo "-$($_.Key): $($_.Value)"
        }
        $MyInvocation.UnboundArguments
        '----------------------------'
    }
 
    return $calls
}
 
set-alias unwatch Disable-Watch
function Disable-Watch() {
<#
    .SYNOPSIS
        Временно отключает обработку событий
    .LINK 
        Enable-Watch
    .LINK
        Remove-Watch
    .LINK
        Get-Watch
    .LINK
        Set-Watch
#>
    if ($__watcher) {
        $__watcher.EnableRaisingEvents = $false
        Write-Host "Отслеживание событий отключено" -f Yellow -b DarkGray
    }
}
 
set-alias watch Enable-Watch    
function Enable-Watch() {
<#
    .SYNOPSIS
        Включает обработку событий
    .LINK
        Disable-Watch
    .LINK
        Remove-Watch
    .LINK
        Get-Watch
    .LINK
        Set-Watch
#>    
    if ($__watcher) {
        $__watcher.EnableRaisingEvents = $true
        Write-Host "Отслеживание событий включено" -f Green -b DarkGray
    }
}
 
set-alias gwatch Get-Watch    
function Get-Watch() {
<#
    .SYNOPSIS
        Получает сторожевой объект для установки новых свойств (если указаны)
        и возвращает его 
    .EXAMPLE    
        PS C:\> (gwatch).filter = "*.*"     # установить новый файловый фильтр
        PS C:\> gwatch -Filter *.*
    .EXAMPLE    
        PS C:\> (gwatch).path= "c:\windows" # установить новую директорию для отслеживания
        PS C:\> gwatch -Path "c:\windows" 
    .EXAMPLE
        PS C:\> gwatch -NotifyFilter "Filename,LastWrite,LastAccess" -Filter "*.*"
    .EXAMPLE
        PS C:\> gwatch -IncludeSubdirectories
        PS C:\> gwatch -IncludeSubdirectories:$false
    .OUTPUTS
       FileSystemWatcher 
    .LINK
        Set-Watch
    .LINK
        Disable-Watch
    .LINK
        Remove-Watch
    .LINK
        Get-Watch 
#>    
param(
    [string]$Path,
    [string]$Filter,
    [switch][Boolean]$IncludeSubdirectories,
    [string]$NotifyFilter
 
)    
    if ($__watcher -eq $null) {
        Write-Host "Объект FileSystemWatcher не определен" -f Red
    } else { 
        
        $type_watcher = $__watcher.gettype()
        $MyInvocation.BoundParameters.GetEnumerator() | %{ 
           $key = $_.Key
           $value = $_.Value
           if ($key -eq "NotifyFilter") {
                $value = [IO.NotifyFilters]$value
           }
           if ($key -eq "IncludeSubdirectories") {
                [Boolean]$value = $value
           }
           $prop = $type_watcher.GetProperty($key)
           $prop.SetValue($__watcher, $value)
        }
        
        return $__watcher
    }
} 
 
 
set-alias rwatch Remove-Watch 
function Remove-Watch() {
<#
    .SYNOPSIS
        Удаляет задание по списку имен, либо все
    .EXAMPLE    
        PS C:\> rwatch Created,Deleted    # удалить задания по именам 
    .EXAMPLE    
        PS C:\> rwatch                    # удалить все задания
    .LINK 
        Set-Watch
#>     
    
    [CmdletBinding()]  
    param(
    [string[]]$names
    )
    if ($names.Length -eq 0) { 
        $names = (get-job).Name
    }
 
    
    
    foreach ($jobname in $names) {
        if ((get-job).Name -ccontains $jobname) {
            Unregister-Event $jobname -Force
            Remove-Job -Name $jobname -Force
            Write-Host "Задание $jobname удалено" -f Green -b DarkGray
        } else {
           Write-Host "Задание $jobname не найдено" -f Yellow -b DarkMagenta
        }
    }
    Set-Variable __watcher -Value $null -Scope Script
}
2
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 3
01.10.2018, 23:59 26
Доброго времени суток ! Обращаюсь к вам за помощью.

Необходимо написать запрос в PowerShell который сможет:
1. Добавить компьютер в Домен.
2. Добавить Имя Компьютера с проверкой если нету дубликата Имини.
3. И с опцыей в какую OU его добавить.

Всем заранее спасибо !
0
0 / 0 / 0
Регистрация: 24.01.2016
Сообщений: 6
21.02.2019, 13:01 27
PowerShell
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
#requires -version 2
<#
   .SYNOPSIS
        Скрипт показывает время выполнения запроса на каждом контроллере домена
        фактически тест производительности, доступности и времени отклика
#>
 
import-module ActiveDirectory
 
Get-Date
 
$obj=[ADSI]"LDAP://RootDSE"
$domain=$obj.defaultNamingContext # Узнать имя домена в Powershell
$comps=Get-ADComputer -filter * -SearchBase "OU=Domain Controllers,$domain" | Select-Object DNSHostName
 
Write-Host "HostName - IPV4Address - ResponseTime(ms) - ScriptTime(sec)"
 
foreach ($comp in $comps) {
    Write-Host $comp.DNSHostName "- " -NoNewline # Вывод строки без переноса (без символа завершения строки)
 
    # Передать IP Адрес в переменную для дальнейшего использования
    $ipAddress = Test-Connection -ComputerName $comp.DNSHostName -Count 1  | Select -ExpandProperty IPV4Address
    Write-Host $ipAddress.IPAddressToString "- " -NoNewline
 
    # Передать в переменную время отклика компьютера (ping)
    $ipTime = Test-Connection -ComputerName $comp.DNSHostName -Count 1  | Select -ExpandProperty ResponseTime
    Write-Host $ipTime "- " -NoNewline
 
    # Вычислить время работы скрипта
    $watch = [System.Diagnostics.Stopwatch]::StartNew()
    $watch.Start()  # Запуск таймера
 
    # Запрос информации о пользователях в Active Directory
    # в небольших доменах можно расширить фильтр, вместо "A*" использовать "*"
    Get-ADUser -Server $comp.DNSHostName -Filter 'Name -Like "A*"' -Properties * > null
 
    $watch.Stop()   # Остановка таймера
    Write-Host "$($watch.Elapsed.Seconds).$($watch.Elapsed.Milliseconds)"
}
0
1885 / 1107 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
21.02.2019, 18:05 28
Вместо этого:

Цитата Сообщение от Banberry Посмотреть сообщение
PowerShell
1
2
3
$obj=[ADSI]"LDAP://RootDSE"
$domain=$obj.defaultNamingContext # Узнать имя домена в Powershell
$comps=Get-ADComputer -filter * -SearchBase "OU=Domain Controllers,$domain" | Select-Object DNSHostName
Можно так:

PowerShell
1
(Get-DomainController -Domain $env:USERDNSDOMAIN).Name
Добавлено через 15 минут
В чём смысл дважды запускать Test-Connection?

Цитата Сообщение от Banberry Посмотреть сообщение
PowerShell
1
2
3
4
5
6
# Передать IP Адрес в переменную для дальнейшего использования
* * $ipAddress = Test-Connection -ComputerName $comp.DNSHostName -Count 1 *| Select -ExpandProperty IPV4Address
* * Write-Host $ipAddress.IPAddressToString "- " -NoNewline
# Передать в переменную время отклика компьютера (ping)
* * $ipTime = Test-Connection -ComputerName $comp.DNSHostName -Count 1 *| Select -ExpandProperty ResponseTime
* * Write-Host $ipTime "- " -NoNewline
Итого, тоже самое можно сделать так:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Get-DomainController -Domain $env:USERDNSDOMAIN | ForEach {
 
    $comp = $_.Name
    $ConnectionResult = Test-Connection -ComputerName $comp -Count 1
    $GetADUserResult  = Measure-Command -Expression {Get-ADUser -Server $comp -Filter {Name -Like "A*"} -Properties * | Out-Null}
 
    [PSCustomObject]@{
        HostName           = $comp
        IPV4Address        = $ConnectionResult.IPV4Address.IPAddressToString
        'ResponseTime, ms' = $ConnectionResult.ResponseTime
        'ScriptTime, sec'  = $GetADUserResult.TotalSeconds
    }
 
}
0
-338 / 245 / 26
Регистрация: 01.06.2018
Сообщений: 3,137
26.11.2019, 12:10 29
Версию какую надо я не в курсе, сам использую на последнем билде Windows 10 Pro.

Экспорт-импорт драйверов

Первый скрипт нужен для экспорта драйверов эталонного ПК:

PowerShell
1
2
$drivers = Export-WindowsDriver -Online -Destination .\drv
$drivers | ft ProviderName, ClassName, Date, Version -auto | Out-File .\drivers.txt
Второй скрипт используется для установки драйверов, выгруженных первым скриптом. Для работы его лучше положить в папку drv используемую первым скриптом:

PowerShell
1
Get-ChildItem -File ".\" -Recurse -Filter "*.inf" | ForEach-Object { PNPUtil.exe -i -a $_.FullName}
Для его запуска использую lnk файл:

Windows Batch file
1
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File ".\instdrv.ps1"
0
5986 / 1995 / 323
Регистрация: 10.12.2013
Сообщений: 6,878
06.02.2020, 09:10 30
После дождичка в четверг

командлет Get-ChildItem исполнится рекурсивно только в четверг:

PowerShell
1
gci * -Recurse:((Get-Date).DayOfWeek -eq 'Thursday')
реализацию части 'после дождичка' оставляю за собой.
0
㊙️
1091 / 239 / 57
Регистрация: 10.08.2018
Сообщений: 568
16.08.2020, 20:31 31
Синхронизация локальной папки с FTP
Sync-FtpFolder
PowerShell
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
function Sync-FtpFolder{
    <#
    .SYNOPSIS
        Обновляет имеющиеся файлы.
        Загружает отсутствующие.
    .NOTES
        Author: Fors1k
    #>
    Param(
        [Parameter( Mandatory = $true )]
        [string]$ftpPathF,
        [Parameter( Mandatory = $true )]
        [string]$localPathF,
        [string]$FtpLogin = 'anonymous',
        [string]$FtpPass  = ''
    )
    function Get-FtpFileList($url){
        $WR = [Net.WebRequest]::Create($url)
        $ErrorActionPreference = 'SilentlyContinue'
        $WR.Method = [Net.WebRequestMethods+FTP]::ListDirectoryDetails
        $WR.Credentials = [Net.NetworkCredential]::new($FtpLogin,$FtpPass)
        $WRStream = $WR.GetResponse()
        $respStream = $WRStream.GetResponseStream()
        $readStream = [IO.StreamReader]::new($respStream, [Text.Encoding]::UTF8)
        return $readStream.ReadToEnd()  
    }
    function Get-FtpFileDate($url){
        $WR = [Net.WebRequest]::Create($url)
        $ErrorActionPreference = 'SilentlyContinue'
        $WR.Method = [Net.WebRequestMethods+FTP]::GetDateTimestamp
        $WR.Credentials = [Net.NetworkCredential]::new($FtpLogin,$FtpPass)
        return $WR.GetResponse().LastModified.ToUniversalTime()
    }
    function DownloadFrom-Ftp($url,$local){
        $WC.DownloadFile($url,$local)
        (Get-Item -li $local).LastWriteTime = [string](Get-FtpFileDate $url)
    }
    function UploadTo-Ftp($url,$local){
        $WC.uploadFile($url,$local)
        (Get-Item -li $local).LastWriteTime = [string](Get-FtpFileDate $url)
    }
 
    try{[string[]]$l = ((Get-FtpFileList $FtpPathF).trim()-split '\r\n').
        where{$_[0]-ne'd'}|%{($_-split':\d+\s')[1]}
    }catch{write-host $error[0] -fo red;return}
    $WC = [Net.WebClient]::new();$i=0
    $WC.Credentials = [Net.NetworkCredential]::new($FtpLogin,$FtpPass)
    $l += (gci -li $localPathF -file).name
    $list = $l.where({$_ -ne ""})|sort -u
 
    $list|ForEach{
        $FtpPath   = $ftpPathF   + $_
        $localPath = $localPathF + $_
 
        $ftpDate   = Get-FtpFileDate $FtpPath
        $localDate = (Gi -li $localPath -ea 0).LastWriteTime
 
        write-host -n ("["+ ++$i+"/"+$list.count+"]") -fo DarkGray
        if($ftpDate -lt $localDate -and $localDate){
            $_;write-host "FTP file older" -fo red
            UploadTo-Ftp $ftpPath $localPath
            write-host "Uploaded" -fo Darkgreen
        }
        elseif($ftpDate -gt $localDate -and $ftpDate){
            $_;write-host "FTP file newer" -fo red
            DownloadFrom-Ftp $ftpPath $localPath 
            write-host "Downloaded" -fo Darkgreen
        }
        else{$_;write-host "Files identical" -fo Darkgreen}""
    }
    $WC.Dispose()
}

Пример:
PowerShell
1
2
3
4
5
6
$FtpPath   = 'ftp://my.ftpurl.ru/docs/'
$LocalPath = 'C:\files\docs\'
$FtpLogin  = 'john77'
$FtpPass   = 'qwe123'
 
Sync-FtpFolder $ftpPath $localPath $FtpLogin $FtpPass
Output[1/3]scan.png
Files identical

[2/3]document.docx
FTP file newer
Downloaded

[3/3]test.txt
FTP file older
Uploaded
1
1374 / 236 / 64
Регистрация: 03.06.2020
Сообщений: 614
17.08.2020, 11:15 32
Из разряда украшалок

PowerShell
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
param (
 
    [Parameter(Mandatory)]
    [string]
    $Command,
 
    [Parameter(Mandatory = $false)]
    [int[]]
    $FColor = (50,200,255),
 
    [Parameter(Mandatory = $false)]
    [int[]]
    $TColor = (100,50,255)
)
 
if ($PSEdition -eq 'Core') { $esc = "`e" }
else { $esc = [char] 27 }
 
 
$text = Invoke-Expression $Command | Out-String
$text = $text -split '\n' -replace '\s+$'
 
 
foreach ($s in $text)
{
    if ($s.Length -gt $width) { $width = $s.Length}
}
 
for ($i = 0; $i -lt $text.Length; $i++)
{
    if ($text[$i].Length -lt $width) { $text[$i] += (([string][char]32) * ($width - $text[$i].Length)) }
}
 
$HStepR, $HStepG, $HStepB =
0..2 | ForEach-Object {
 
    [int] (($TColor[$_] - $FColor[$_]) / 2 / $text.Length)
}
 
$WStepR, $WStepG, $WStepB =
0..2 | ForEach-Object {
 
    [int] (($TColor[$_] - $FColor[$_]) / 2 / $width)
}
 
$StartR = $FColor[0]
$StartG = $FColor[1]
$StartB = $FColor[2]
 
for ($i = 0; $i -lt $text.Length; $i++)
{
    $red   = $StartR += $HStepR
    $green = $StartG += $HStepG
    $blue  = $StartB += $HStepB
 
    for ($j = 0; $j -lt $width; $j++)
    {
        $red   += $WStepR 
        $green += $WStepG
        $blue  += $WStepB
 
        [string] $str += "$esc[1;38;2;${red};${green};${blue}m$($text[$i][$j])" 
    }
 
    $str
    $str = $null
}
 
"$esc[0m"
Для пользователей ConEmu необходимо выставить буфер равный размеру окна. Переключалка:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
param (
              
    [Parameter (Mandatory = $false)]
    [Switch]
    $WindowSize
)
 
if ($WindowSize)
{
    $buffer = $Host.UI.RawUI.WindowSize
}
 
else
{
    $buffer =
    @{
         'Width'  = $Host.UI.RaeUI.WindowSize.Width
         'Height' = 3000
     } 
}
 
$Host.UI.RawUI.BufferSize = $buffer
Миниатюры
Полезные PowerShell скрипты  
1
-338 / 245 / 26
Регистрация: 01.06.2018
Сообщений: 3,137
20.08.2020, 09:59 33
Windows 10

Включить удаленный рабочий стол

PowerShell
1
2
3
4
5
6
7
    write-host "Включить удаленный рабочий стол" -ForegroundColor Green
    write-host "-------------------------------" -ForegroundColor Green
    (Get-WmiObject Win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).SetAllowTsConnections(1,1)
    (Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\TerminalServices -Filter "TerminalName='RDP-tcp'").SetUserAuthenticationRequired(0)
    Enable-NetFirewallRule -DisplayGroup "Дистанционное управление рабочим столом"
    write-host "Готово" -ForegroundColor Green
    read-host  "`nНажмите любую клавишу для продолжения"
Английская раскладка по умолчанию (не хватает копирования раскладки на новых пользователей и на экран приветствия)

PowerShell
1
2
3
4
5
    write-host "Английская раскладка по умолчанию" -ForegroundColor Green
    write-host "---------------------------------" -ForegroundColor Green
    Set-WinUserLanguageList -LanguageList en-US,ru -Force
    write-host "Готово" -ForegroundColor Green
    read-host  "`nНажмите любую клавишу для продолжения"
Включение сетевого обнаружения

PowerShell
1
2
3
4
5
    write-host "Включение сетевого обнаружения" -ForegroundColor Green
    write-host "------------------------------" -ForegroundColor Green
    netsh advfirewall firewall set rule group="Обнаружение сети" new enable=Yes
    write-host "Готово" -ForegroundColor Green
    read-host  "`nНажмите любую клавишу для продолжения"
Установка Hyper-V + Telnet Client

PowerShell
1
2
3
4
5
6
    write-host "Установка Hyper-V" -ForegroundColor Green
    write-host "-----------------" -ForegroundColor Green
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
    Enable-WindowsOptionalFeature -Online –FeatureName "TelnetClient"
    write-host "Завершено" -ForegroundColor Green
    read-host  "`nНажмите любую клавишу для продолжения"
Отключение (вырезание) OneDrive

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    write-host "Отключение OneDrive" -ForegroundColor Green
    write-host "-------------------" -ForegroundColor Green
    Stop-Process -Name OneDrive -Force -ErrorAction SilentlyContinue
    Start-Process -FilePath "$env:SystemRoot\SysWOW64\OneDriveSetup.exe" -ArgumentList "/uninstall" -Wait
    Stop-Process -Name explorer
    Remove-ItemProperty -Path HKCU:\Environment -Name OneDrive -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:ProgramData\Microsoft OneDrive" -Recurse -Force -ErrorAction SilentlyContinue
    Unregister-ScheduledTask -TaskName *OneDrive* -Confirm:$false
    IF ((Get-ChildItem -Path $env:USERPROFILE\OneDrive -ErrorAction SilentlyContinue | Measure-Object).Count -eq 0)
    {
        Remove-Item -Path $env:USERPROFILE\OneDrive -Recurse -Force -ErrorAction SilentlyContinue
    }
    else
    {
        Write-Error "$env:USERPROFILE\OneDrive folder is not empty"
    }
    Wait-Process -Name OneDriveSetup -ErrorAction SilentlyContinue
    Remove-Item -Path $env:LOCALAPPDATA\Microsoft\OneDrive -Recurse -Force -ErrorAction SilentlyContinue
    $Error.RemoveAt(0)
    write-host "Готово" -ForegroundColor Green
    read-host  "`nНажмите любую клавишу для продолжения"
Удаление стандартных приложений по списку

PowerShell
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
    write-host "Удаление стандартных приложений по списку:" -ForegroundColor Green
    write-host "------------------------------------------" -ForegroundColor Green
    Get-AppxPackage Microsoft.Appconnector | Remove-AppxPackage
    Get-AppxPackage Microsoft.SkypeApp | Remove-AppxPackage
    Get-AppxPackage 9E2F88E3.Twitter | Remove-AppxPackage
    Get-AppxPackage Microsoft.ConnectivityStore | Remove-AppxPackage
    Get-AppxPackage Microsoft.Messaging | Remove-AppxPackage
    Get-AppxPackage Microsoft.Getstarted | Remove-AppxPackage
    Get-AppxPackage Microsoft.WindowsPhone | Remove-AppxPackage
    Get-AppxPackage Microsoft.3DBuilder | Remove-AppxPackage
    Get-AppxPackage Microsoft.CommsPhone | Remove-AppxPackage
    Get-AppxPackage Microsoft.BingFinance | Remove-AppxPackage
    Get-AppxPackage Microsoft.MicrosoftSolitaireCollection | Remove-AppxPackage
    Get-AppxPackage Microsoft.BingNews | Remove-AppxPackage
    Get-AppxPackage Microsoft.BingSports | Remove-AppxPackage
    Get-AppxPackage Microsoft.People | Remove-AppxPackage
    Get-AppxPackage Microsoft.WindowsAlarms | Remove-AppxPackage
    Get-AppxPackage Microsoft.MicrosoftOfficeHub | Remove-AppxPackage
    Get-AppxPackage Microsoft.Office.OneNote | Remove-AppxPackage
    Get-AppxPackage Microsoft.Office.Sway | Remove-AppxPackage
    Get-AppxPackage Microsoft.XboxApp | Remove-AppxPackage
    Get-AppxPackage Microsoft.WindowsMaps | Remove-AppxPackage
    Get-AppxPackage Microsoft.BingWeather | Remove-AppxPackage
    Get-AppxPackage Microsoft.ZuneVideo | Remove-AppxPackage
    Get-AppxPackage Microsoft.ZuneMusic | Remove-AppxPackage
    Get-AppxPackage king.com.CandyCrushSodaSaga | Remove-AppxPackage
    write-host "Удаление завершено" -ForegroundColor Green
    read-host  "`nНажмите любую клавишу для продолжения"
Установка часовой зоны Новосибирска

PowerShell
1
2
3
    write-host "Установлена часовая зона: Новосибирское стандартное время" -ForegroundColor Green
    Set-TimeZone -Name "Новосибирское стандартное время"
    read-host  "`nНажмите любую клавишу для продолжения"
2
㊙️
1091 / 239 / 57
Регистрация: 10.08.2018
Сообщений: 568
24.10.2020, 18:05 34
Вызов функций WinApi
WinApi
PowerShell
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
function WinApi{
    <#
    .SYNOPSIS
        Вызывает WinApi функции
        PowerShell WinApi functions
    .DESCRIPTION
        Функция из модуля psClick, которая позволяет
        вызывать функции WinApi напрямую из вашего скрипта
        без использования команды Add-Type.    
    .NOTES
        Автор: Fors1k
        Источник: https://psClick.ru/Invoke-WinApi
    .EXAMPLE
        WinApi -Return IntPtr GetForegroundWindow
    #>
    PARAM(
        [Parameter(Position = 0, Mandatory = $True )]
        [String]$Method
        ,
        [Parameter(Position = 1, Mandatory = $False)]
        [Object[]]$Params = [Object[]]::new(0)
        ,
        [Parameter(Position = 2, Mandatory = $False)]
        [Type]$Return = [Boolean]
        ,
        [Parameter(Position = 3, Mandatory = $False)]
        [String]$Dll = 'User32.dll'
        ,
        [Parameter(Position = 4, Mandatory = $False)]
        [Int]$Charset = 4
    )
    BEGIN{
        [Type[]]$pTypes = $params|ForEach{
            if($_-is[ref]){$_.Value.GetType().MakeByRefType()}
            elseif($_-is[scriptblock]){
                [Delegate]::CreateDelegate([func[[type[]],type]],
                [Linq.Expressions.Expression].Assembly.GetType(
                'System.Linq.Expressions.Compiler.DelegateHelpers'
                ).GetMethod('MakeNewCustomDelegate',
                [Reflection.BindingFlags]'NonPublic, Static') 
                ).Invoke(($_.ast.ParamBlock.Parameters.StaticType+
                $_.Attributes.type.type))
            }else{$_.GetType()}
        }
    }
    PROCESS{
        ($w32=[Reflection.Emit.AssemblyBuilder]::
        DefineDynamicAssembly('w32A','Run').
        DefineDynamicModule('w32M').DefineType('w32T',
        "Public,BeforeFieldInit")).DefineMethod(
        $method,'Public,HideBySig,Static,PinvokeImpl',
        $return,($pTypes)).SetCustomAttribute(
        [Reflection.Emit.CustomAttributeBuilder]::new(
        ($DI=[Runtime.InteropServices.DllImportAttribute]).
        GetConstructor([string]),$dll,$DI.GetField('CharSet'),
        @{[char]'W'=-1;;[char]'A'=-2}[$method[-1]]+$CharSet))
    }
    END{$w32.CreateType()::$method.Invoke($Params)}
}

Примеры:
PowerShell
1
2
3
4
5
$hndl = (gps -Id $PID).MainWindowHandle
 
WinApi -re Void ShowWindowAsync($hndl, 2) 
sleep 1
WinApi ShowWindowAsync($hndl, 4)
PowerShell
1
2
3
4
5
6
7
8
WinApi -dll 'Shell32.dll' -re Int ShellExecuteW(
    0,
    "runas",
    "notepad.exe",
    "",
    "",
    1
)
PowerShell
1
2
3
4
5
$mSpeed = [IntPtr]::Zero
 
WinApi SystemParametersInfo(112, 0, [ref]$mSpeed, 0)
 
$mSpeed
PowerShell
1
2
3
4
5
6
7
8
9
10
$wHandles = [Collections.Generic.List[IntPtr]]::new()
 
$callBack = {[OutputType([Bool])]Param([IntPtr]$handle,[IntPtr]$p)
    $true
    $wHandles.add($handle)
}
 
WinApi EnumWindows($callBack, [IntPtr]::Zero)
 
$wHandles
0
5986 / 1995 / 323
Регистрация: 10.12.2013
Сообщений: 6,878
04.12.2020, 06:41 35
ПОЛЕЗНЫЙ ТЕКСТОВЫЙ ФАЙЛ

Для опытов.

Познавательный. Содержит Cyrillic и Latin.
Поддаётся разбору и структуризации для преобразования в XML или загрузки в базу.

ЧЕРВИ.txt или Vérmes.txt

Код
Черви ( Vérmes )

Общий очерк

Класс I. – Коловратки (Rotatoria)

I Сем. – Панцирные коловратки (Branchionidae)

Четырехрогая коловратка (Noteus quadricornis)

II Сем. – Гидатины (Hydatinea)

Прозрачная гидатина (Hydatina senta)

Хищная одноглазая коловратка (Notommata myrmeleo)

III Сем. – Филодиновые (Philodinea)

Колесник (Rotifer vulgaris)

Collidina parasitica

IV Сем. – Трубочковые коловратки (Tubicollaridae)

Украшенная флоскулария (Floscularia ornata)

Общественная коловратка (Conochilus)

Класс II. – Звездчатые черви (Gephiei)

Зеленая бонеллия (Bonellia viridis)

Обыкновенный сипункул (Sipunculus nudus)

Приапул (Priapulus)

Класс III. – Кишечно-жаберные (Enteropneuota)

Неаполитанский баляноглосс (Balanoglossus clavigerus)

Класс IV. – Кольчатые черви (Annelides)

Подкласс I. – Щетинконогие черви (Haetopoda)

I Сем. – Дождевые черви (Lumbricidae)

Обыкновенный дождевой червяк (Lumbricus agricola)

Пестрый дождевик (L. foetidus)

Проворный дождевик (L. puter)

Зеленоватый дождевик (L. chloroticus)

Красноватый дождевик (L. rubellus)

II Сем. – Трубочники (Tubificina)

Ручейный трубочник (Tubifex rivulorum)

III Сем. – Вьюнки (Naidina)

Хоботковая наида (Nais proboscidea)

Бесхоботковая наида (N. elinguis)

IV Сем. – Афродитовые (Aphroditea)

Щетинистая эрмиона (Hermioneliystrix)

Колючая афродита (Aphrodite aculeata)

V Сем. – Нереидовые (Nereidae)

VI Сем. – Трубчатники (Tubicolae)

Обыкновенный рыбачий пескожил (Arenicola piscatorum)

VII Сем. – Перистощетинковые (Chetopteridae)

Пергаментный трубкожил (Chetopterus pergamentaceus)

VIII Сем. – Устричники (Hermellacea)

Устричник (Hermella alveolata)

IX Сем. – Теребелловые (Terebellacea)

X Сем. – Змейковые (Serpulacea)

Змейки (Serpula)

Сабеллы (Sabella)

Силлиды (Syllis)

XI Сем. – Мизостомовые (Misostomatidae)

Подкласс II. – Гладкие черви, или пиявки (Hirudineae)

I Сем. – Настоящие пиявки (Hirudinea)

Медицинская пиявка (Hirudo medicinalis)

Обыкновенная присосница (Nephelis vulgaris)

Аптекарская, или венгерская, пиявка (Hirudo officinalis)

Берберийская пиявка (Н. troctina)

Зернистая, или индийская, пиявка (Н. granulosa)

Конская пиявка (Haemopis vorax)

Тонкомордая пиявица (Alacostomum gulo)

Цейлонская пиявка (Hirudo ceylonien)

II Сем. – Хоботниковые пиявки (Clepsinidae)

Класс V. – Круглые черви (Nemathelminthes)

Отряд I. – Колючеголовые (Acanthocephali)

I Сем. – Скребни (Echinorhynchus)

Скребень-великан (Е. gigas)

Рыбный скребень (Е. proteus)

Мышиный скребень (Е. monoliferus)

Утиный скребень (Е. polimorphus)

Отряд II. – Нитчатые черви (Nematodes)

I Сем. – Уролябии (Urolabea)

Бородавчаторот (Enophus)

II Сем. – Угрицы (Anguillulacea)

Уксусная угрица (Anguillula aceti)

Лягушечная аскарида (Phabdonema nigrovenosa)

Кохинхинская глиста (Rh. strongyloides)

Долгоносиковая глиста (Allantonema mirabile)

Слизневая глиста (Leptodera appendiculata)

Комариковая глиста (Atractonema gibbosa)

Шмелевая глиста (Sphaerularia bombi)

Пшеничная угрица (Anguillula tritti)

Heterodera Schachtii

III Сем. – Аскариды (Ascaridae)

Человеческая аскарида (Ascaris lumbricoides)

Собачья, или кошачья, аскарида (A. mystax)

Лошадиная аскарида (A. megalocephale)

Червевидная аскарида (Oxyuris vermicularis)

Ришта, или медицинский струнец (Filaria medinensis)

IV Сем. – Свайники (Strangy lidae)

Собачий свайник (Dochmius trigonocephalus)

Свайник двенадцатиперстной кишки (D. duedenalis)

V Сем. – Тритотрахолиды (Trichotrachelidae)

Мускульная, или спиральная, трихина (Trichina spiralis)

Человеческий власоглав (Trichocephalus dispar)

VI Сем. – Волосатиковые (Gordiidae)

Водяной волосатик (Gordias aquaticus)

VII Сем. – Червецы (Mermitidae)

Беловатый червец (Mermis albicans)

Класс VI. – Плоские черви (Plathelminthes)

Плосковики (Planaria)

Ушастый плосковик (P. gonocephala)

Отряд I. – Ленточные черви (Cestodes)

I Сем. – Цепни (Taeniidae)

Обыкновенный солитер (Taenia solium)

Бычачий солитер (Т. saginata)

Малый солитер (Т. nana)

Желтоточечный солитер (Т. flavipunctata)

Мадагаскарский солитер (Т. madagascariensis)

Огуречный солитер (Т. cucumerina)

Тонкошейный солитер (Т. marginata)

Толстошейный, или кошачий, солитер

Собачий солитер (Т. serrata)

Цепень-мозговик (Т. coenurus)

Эхинококк (Т. echinococcus)

II Сем. – Лентецы (Botriocephalidae)

Человеческий лентец (Botriocephalus latus)

Ремнец (Ligula simplicissima)

Отряд II. – Сосальщики, или трематоды (Trematodes)

I Сем. – Многоприсосковые (Polystomeae)

Флетановый триуст (Epibdella hippoglossi)

Клименовый сосальщик (Cicladella annelidicola)

Двойчатка (Diplozoon parodoxum)

Дипорпа (Diporpa)

Лягушечья многоустка (Polystomum integerrimum)

II Сем. – Двуприсосковые (Distomeae)

Прудовик (Simnacus minutus)

Ланцетовидная двуустка (Distomum lanceolatum)

Лопатовидная двуустка (D. spathulatum)

Собачья двуустка (D. conjunotum)

Раздельнополая двуустка (D. haematobius)

Отряд III. – Реснитчатые черви (Turbellarii)

Подотряд I. – Немертины (Nemertini)

Бермудская наземная четырехглазка (Tetrastemma agricola)

Хрупкая мекерия (Mecheria somatotoma)

Подотряд II. – Прямокишечные реснитчатые черви (Rhabdocoela)

Краеротик, или простом (Prostomum)

Воронковик (Convoluta)

Брюхоротка Эренберга (Mesostomum Ehrenbergii)

Зеленый бочонкорот (Vortex viridis)

Подотряд III. – Ветвистокишечные реснитчатые черви (Dendrocoela)

Молочно-белая планария (Planaria lactea)

Малая многоглазка (Polycelis laerigola)

Черная многоглазка (P. nigra)

Рогатая многоглазка (P. cormusa)

Наземная планария (Rynchodesmus terrestris)

Двулинейная наземная планария (Geodesmus bilineatus)

Подземная планария (Geoplana subterranea)
0
1374 / 236 / 64
Регистрация: 03.06.2020
Сообщений: 614
08.01.2021, 21:18 36
Кто-нибудь скучает по neofetch?

Легкая вариация на тему. Просьба проверить, работает ли у вас. У себя тестировал из-под pwsh и powershell, с шрифтами "Cascadia Code PL", "Fantasque Sans Mono", "Consolas" и "Lucida Console". Из штатного хоста, ConEmu, alacritty и основного на этот момент Windows Terminal. Все хосты с кодировкой UTF8 без BOM.
Миниатюры
Полезные PowerShell скрипты  
Вложения
Тип файла: 7z pfetch.ps1.7z (2.4 Кб, 47 просмотров)
1
Любознательный
5670 / 1685 / 314
Регистрация: 10.03.2016
Сообщений: 3,835
09.01.2021, 04:45 37
Цитата Сообщение от lesser Посмотреть сообщение
Просьба проверить, работает ли у вас.
Вроде работает...
Недостатки:
1. Здесь:
PowerShell
1
$perc  = [int] ($free / ($size / 100) / 22)
- скорее всего, будет исключение при делении на 0 (приводы DVD, например)
2. Символы, для отображения Storage, надо бы подобрать другие...
Название: 2021-1-9 7-42-39.png
Просмотров: 660

Размер: 675 байт
1
1374 / 236 / 64
Регистрация: 03.06.2020
Сообщений: 614
09.01.2021, 14:16 38
Спасибо за отзыв.

Цитата Сообщение от YuS_2 Посмотреть сообщение
- скорее всего, будет исключение при делении на 0 (приводы DVD, например)
Попробовал, подключил usb-dvd -- отобразился, как 0Gb и пустой (белый) индикатор. Т.е. все нормально. К сожалению не смог дома найти ни одного CD/DVD. Выкинули.

Цитата Сообщение от YuS_2 Посмотреть сообщение
Символы, для отображения Storage, надо бы подобрать другие
Вроде со всеми шрифтами нормально... Может зависит от кодировки вывода или терминала? Заменить $([char]9473) можно простым дефисом, он тоже по центру строки.
0
Любознательный
5670 / 1685 / 314
Регистрация: 10.03.2016
Сообщений: 3,835
09.01.2021, 14:44 39
Цитата Сообщение от lesser Посмотреть сообщение
Т.е. все нормально.
Clear-Host надо отключить, тогда будет видно ошибку, она не прерывающая...

Цитата Сообщение от lesser Посмотреть сообщение
Может зависит от кодировки вывода или терминала?
Скорее от терминала, у меня стандартная консоль... Windows Terminal требования имеет завышенные к ОС...
1
1374 / 236 / 64
Регистрация: 03.06.2020
Сообщений: 614
09.01.2021, 15:24 40
Цитата Сообщение от YuS_2 Посмотреть сообщение
Clear-Host надо отключить, тогда будет видно ошибку, она не прерывающая...
Да, есть такое. Пока ограничился условием if ($disk.IsReady -and $disk.TotalSize -gt 0) {}
Это конечно не совсем правильно, но что-нибудь придумаю. Ну а отключать Clear-Host -- это каша. Придется переписывать весь выхлоп, скорее всего загонять в один массив, чтобы он выводился построчно, а не путем установления координат.

Еще раз спасибо, буду думать.
0
09.01.2021, 15:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2021, 15:24
Помогаю со студенческими работами здесь

Как скрипты видят другие скрипты, которые были объявлены ранее?
Может кто-нибудь объяснить как реализовано то, что у нас скрипт, который был заинклуден в html...

Баннерные скрипты, скрипты посещаемости
Всем привет,хотелось бы узнать как организовать баннерную систему у себя на сайте,такую чтобы...

PowerShell vs PowerShell ISE
Скажите, пожалуйста, чем PowerShell отличается от PowerShell ISE. Спасибо.

полезные книги
полезные по вашему мнению книги по php , js от уровня для новичков до профессионалов


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru