Форум программистов, компьютерный форум, киберфорум
Наши страницы
PowerShell
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.94/125: Рейтинг темы: голосов - 125, средняя оценка - 4.94
greg zakharov
Покинул форум
1967 / 837 / 242
Регистрация: 07.05.2015
Сообщений: 1,679
1

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

26.10.2015, 09:45. Просмотров 24009. Ответов 25
Метки нет (Все метки)

Здесь публикуются полезные с практической точки зрения сценарии 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 скрипты
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2015, 09:45
Ответы с готовыми решениями:

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

Powershell и AD
Доброго времени суток! Первый раз в жизни взялся за Powershell и столкнулся со...

Ftp powershell
Подскажите. Есть такой скрипт, работает с фтп нормально, файлы закидывает, но...

Курсы Powershell
Добрый день, просьба посоветовать, с чего начать изучение powershell, где...

Powershell Core
Что интересно, установка Powershell Core для MacOS заняла меньше минуты,...

25
greg zakharov
Покинул форум
1967 / 837 / 242
Регистрация: 07.05.2015
Сообщений: 1,679
19.01.2016, 14:18  [ТС] 21
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
greg zakharov
Покинул форум
1967 / 837 / 242
Регистрация: 07.05.2015
Сообщений: 1,679
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
greg zakharov
Покинул форум
1967 / 837 / 242
Регистрация: 07.05.2015
Сообщений: 1,679
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
greg zakharov
Покинул форум
1967 / 837 / 242
Регистрация: 07.05.2015
Сообщений: 1,679
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
Garry Galler
1544 / 1232 / 463
Регистрация: 28.10.2013
Сообщений: 3,107
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
kesha7883
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 3
01.10.2018, 23:59 26
Доброго времени суток ! Обращаюсь к вам за помощью.

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

Всем заранее спасибо !
0
01.10.2018, 23:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2018, 23:59

работа с PowerShell
Добрый вечер, уважаемые Форумчане. есть задача, нужно написать скрипт...

Powershell Where-Object
Добрый день, коллеги. Никак не могу найти вкурить как грамотно использовать...

Powershell и 'globbing'
Можно ли с помощью каких либо опций заставить powershell для Windows вести...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru