Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Windows PowerShell 1.x/2.x/CTP

Автор: 01MDM
Дата сообщения: 18.11.2010 16:30
Suprus
Пример создает дерево с корнем в папке Test и перемещает файлы из текущей папки в соответствующие подпапки ( например в .\Test\09-45 ). Копируются только файлы. Без рекурсии и поэтому без проверки на существование одноименных файлов. Просто пример чтоб "оттолкнуться"

Код:
Get-Childitem | % {

    if ( !$_.PSIsContainer ) {
    
        $path = Join-Path .\Test ( $_.CreationTime ).ToString("HH-mm")
        New-Item -type Directory "$path"
        Move-Item "$_" "$path"
        
    }

}
Автор: MedvedevDM
Дата сообщения: 27.12.2010 16:14
Нашел команду для переноса пользователя в другую рабочую группу

add-computer -workgroupname K203
Это на локальном компьютере


А можно ли тоже самое сделать с удаленного компьютера?

Автор: MedvedevDM
Дата сообщения: 29.12.2010 09:35
Оказывается PowerShell 2.0 доступна и для Windows XP
ссылка под ковриком
Автор: BVV63
Дата сообщения: 30.12.2010 08:24
MedvedevDM

Цитата:
Оказывается PowerShell 2.0 доступна и для Windows XP

Да, доступна. Но нужет SP3 и FrameWork поновее, нежели для PS 1.0.

Цитата:
ссылка под ковриком

А чего её прятать-то? Не варез, всё законно.
Автор: ComradG
Дата сообщения: 30.12.2010 15:01
BVV63

Цитата:
FrameWork поновее

нифига! он спокойно и на FW 2.0 работает, это для графического редактора там нужен 3.0.

Цитата:
нужет SP3

нужен он там только формально, в инсталлере так прописано. ежели очень надо то, можно заинмталлить и на SP2, только чуточку надо подредактировать инсталлирующий inf сценарий. хотя, если учесть, что большинство сидит уже на SP3, то так извращаться вряд ли кому-то потребуется.
Автор: ComradG
Дата сообщения: 05.01.2011 13:56
что-то я никак не пойму одной баги:

Код: gi [имя_файла] | foreach {$_.cretiontime='[число_и_время]'}
Автор: 01MDM
Дата сообщения: 05.01.2011 17:03
ComradG
Меняет и дату и время:

Код:
(gi file.ext).CreationTime=[datetime] "25.11.2010 14:33:44"
(gi folder).CreationTime=[datetime] "25.11.2010 14:33:44"
Автор: ComradG
Дата сообщения: 05.01.2011 17:56
01MDM
за
Код: (gi file.ext).CreationTime=[datetime] "25.11.2010 14:33:44"
Автор: 01MDM
Дата сообщения: 05.01.2011 18:56
ComradG,

У меня вот так получилось. Дату каталогов не менял, только файлы. С помощью switch:

Код:
$items = gci -r .

switch ( $items ) {

    { $_ -is [system.io.fileinfo] } {
    
        $_.CreationTime = (get-date "09.05.1945 15:00:00")
        
    }
    
    default { "$( $_.name ) is directory" }

}
Автор: ComradG
Дата сообщения: 05.01.2011 19:31
01MDM

Цитата:
точка в команде это с текущего каталога
я в курсе, но все равно спасибо за напоминание))

Цитата:
Где-то читал, что все работает только с en_US локалью.
лично я оное прочитал на technet
в целом, за все спасибо. кстати, со свитчем здорово придумано.
Автор: ComradG
Дата сообщения: 04.02.2011 19:10
обрисую ситуацию, чтобы не было непоняток, почему в скрипте ниже, я использовал конструкцию if, а не try...catch... - дело в том, что я хотел своего рода унифицировать скриптик под обе - и первую, и вторую, - версии поша, отсюда и такой косяк.
Код: [Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null
$md5 = New-Object System.Security.Cryptography.MD5CryptoServiceProvider
$sha1 = New-Object System.Security.Cryptography.SHA1Managed
$sha256 = New-Object System.Security.Cryptography.SHA256Managed

if ($args.Length -le 1)
{
Write-Host Usage: $MyInvocation.MyCommand.Name [/m `| /s `| /l] `<filename`>`n
break
}
else
{
switch ($args[0])
{
"/m" { $alg = $md5; break }
"/s" { $alg = $sha1; break }
"/l" { $alg = $sha256; break }
default { break }
}

$args[1] | % {
Resolve-Path $_ | % {
$file = [System.IO.File]::Open($_.Path, "open", "read")
$alg.ComputeHash($file) | % { Write-Host -nonewline $_.ToString("x2") }
$file.Dispose()
Write-Host `n
}
}
}
Автор: ComradG
Дата сообщения: 19.02.2011 20:14
чего-то ветка не развивается... вот и решил я подбросить пример реализации [more=примитивного просмотрщика процессов]param ($interval = 10)

#функция построения списка процессов
function Get-ProcessInfo {
$array = New-Object System.Collections.ArrayList
$script:colProc = ps | select Name, Id, CPU, PrivateMemorySize, WorkingSet, Description, Company | sort Name
$array.AddRange($colProc)
$dtgGrid.DataSource = $array
$frmMain.Refresh()
}

#функция автообновления списка процессов
function Set-ProcessAuto {
if ($mnuAuto.Checked -eq $false) {
$mnuAuto.Checked = $true
     $tmrTime.Start()
}
else {
$mnuAuto.Checked = $false
     $tmrTime.Stop()
}
}

#обработчик события для mnuKill
$OnClick_mnuKill= {
$SelectedRow = $dtgGrid.CurrentRowIndex

if ($colId = $script:colProc[$SelectedRow].Id) {
Stop-Process -id $colId
     Start-Sleep -milliseconds 500
     Get-ProcessInfo
}
}

#загружаем основную форму
$OnLoad_frmMain= {
Get-ProcessInfo
Set-ProcessAuto
}

#загружаемые сборки
[Reflection.Assembly]::LoadWithPartialName("System.Drawing") | Out-Null
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null

#элементы формы
$frmMain = New-Object System.Windows.Forms.Form
$mnuMain = New-Object System.Windows.Forms.MenuStrip
$mnuFile = New-Object System.Windows.Forms.ToolStripMenuItem
$mnuKill = New-Object System.Windows.Forms.ToolStripMenuItem
$mnuSep0 = New-Object System.Windows.Forms.ToolStripSeparator
$mnuExit = New-Object System.Windows.Forms.ToolStripMenuItem
$mnuView = New-Object System.Windows.Forms.ToolStripMenuItem
$mnuRefr = New-Object System.Windows.Forms.ToolStripMenuItem
$mnuAuto = New-Object System.Windows.Forms.ToolStripMenuItem
$mnuHelp = New-Object System.Windows.Forms.ToolStripMenuItem
$mnuAbot = New-Object System.Windows.Forms.ToolStripMenuItem
$dtgGrid = New-Object System.Windows.Forms.DataGrid
$tmrTime = New-Object System.Windows.Forms.Timer

#обобщения
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Point = New-Object System.Drawing.Point

#главное меню
$mnuMain.Items.AddRange(@($mnuFile, $mnuView, $mnuHelp))

#mnuFile
$mnuFile.Text = "&File"
$mnuFile.DropDownItems.AddRange(@($mnuKill, $mnuSep0, $mnuExit))

#mnuKill
$mnuKill.Text = "&Kill"
$mnuKill.Add_Click($OnClick_mnuKill)

#mnuSep0

#mnuExit
$mnuExit.Text = "E&xit"
$mnuExit.Add_Click( { $frmMain.Close() } )

#mnuView
$mnuView.Text = "&View"
$mnuView.DropDownItems.AddRange(@($mnuRefr, $mnuAuto))

#mnuRefr
$mnuRefr.Text = "&Refresh"
$mnuRefr.Add_Click( { Get-ProcessInfo } )

#mnuAuto
$mnuAuto.Text = "Auto &update"
$mnuAuto.Add_Click( { Set-ProcessAuto } )

#mnuHelp
$mnuHelp.Text = "&Help"
$mnuHelp.DropDownItems.AddRange(@($mnuAbot))

#mnuAbot
$mnuAbot.Text = "&About"
$mnuAbot.Add_Click( { Get-AboutDialog } )

#dtgGrid
$System_Drawing_Point.X = 0
$System_Drawing_Point.Y = 25
$dtgGrid.Location = $System_Drawing_Point
$System_Drawing_Size.Height = 550
$System_Drawing_Size.Width = 802
$dtgGrid.Size = $System_Drawing_Size
$dtgGrid.CaptionVisible = $false
$dtgGrid.PreferredColumnWidth = 109
$dtgGrid.Add_Click( { Set-ProcessAuto } )

#tmrTime
$tmrTime.Interval = $interval * 100
$tmrTime.Add_Tick( { Get-ProcessInfo } )

#frmMain
$System_Drawing_Size.Height = 597
$System_Drawing_Size.Width = 803
$frmMain.ClientSize = $System_Drawing_Size
$frmMain.Controls.Add($mnuMain)
$frmMain.Controls.Add($dtgGrid)
$frmMain.FormBorderStyle = "FixedSingle"
$frmMain.MaximizeBox = $false
$frmMain.StartPosition = "CenterScreen"
$frmMain.Text = "Process Viewer"
$frmMain.Add_Load($OnLoad_frmMain)

#вывод окна About
function Get-AboutDialog {
$frmAbot = New-Object System.Windows.Forms.Form
$lblAbot = New-Object System.Windows.Forms.Label
$btnClos = New-Object System.Windows.Forms.Button

#lblAbot
$lblAbot.Text = "(C) 2008 - 2011 ComradG special for Ru-Board `n
Process Viewer is a sample that can help you stay knowledgeable "
$lblAbot.TextAlign = "MiddleCenter"
$System_Drawing_Point.X = 5
$System_Drawing_Point.Y = 29
$lblAbot.Location = $System_Drawing_Point
$System_Drawing_Size.Height = 50
$System_Drawing_Size.Width = 330
$lblAbot.Size = $System_Drawing_Size

#btnClos
$btnClos.Text = "Close"
$System_Drawing_Point.X = 132
$System_Drawing_Point.Y = 97
$btnClos.Location = $System_Drawing_Point
$btnClos.Add_Click( { $frmAbot.Close() } )

#frmAbot
$System_Drawing_Size.Width = 350
$System_Drawing_Size.Height = 137
$frmAbot.ClientSize = $System_Drawing_Size
$frmAbot.Controls.Add($lblAbot)
$frmAbot.Controls.Add($btnClos)
$frmAbot.FormBorderStyle = "FixedSingle"
$frmAbot.MaximizeBox = $false
$frmAbot.MinimizeBox = $false
$frmAbot.ShowInTaskbar = $false
$frmAbot.StartPosition = "CenterScreen"
$frmAbot.Text = "About..."

#показываем само окно
$frmAbot.ShowDialog() | Out-Null
}

#показываем основное окно
$frmMain.ShowDialog() | Out-Null[/more]
Автор: ComradG
Дата сообщения: 26.02.2011 19:41
Free_Soft
хоть и не пригодится сейчас, но на будущее (если все же возьмешься за пош):

Код: function CountDownTime {
$frmMain.Close()
}

function ShowSplashScreen {
[Reflection.Assembly]::LoadWithPartialName("System.Drawing") | Out-Null
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null

$frmMain = New-Object System.Windows.Forms.Form
$bmpSide = New-Object System.Windows.Forms.PictureBox
$tmrTime = New-Object System.Windows.Forms.Timer

$System_Drawing_Size = New-Object System.Drawing.Size

#bmpSide
$bmpSide.Dock = "Fill"
$bmpSide.Image = New-Object System.Drawing.Bitmap("C:\\WINDOWS\\Пузыри.bmp")

#tmrTime
$tmrTime.Interval = 2500
$tmrTime.Start()
$tmrTime.Add_Tick( { CountDownTime } )

#frmMain
$System_Drawing_Size.Height = 256
$System_Drawing_Size.Width = 256
$frmMain.ClientSize = $System_Drawing_Size
$frmMain.FormBorderStyle = "None"
$frmMain.Controls.Add($bmpSide)
$frmMain.StartPosition = "CenterScreen"
$frmMain.ShowInTaskbar = $false

$frmMain.ShowDialog() | Out-Null
}

ShowSplashScreen
Автор: Free_Soft
Дата сообщения: 28.02.2011 10:27
ComradG
Спасибо, может когда и перейду...
Автор: ComradG
Дата сообщения: 03.03.2011 10:40
DreamDok
zip.ps1

Код: $ErrorActionPreference = "SilentlyContinue"
trap { Write-Host Ошибка в параметрах.`n -fore yellow }

function AddZIPItemsList {
if (-not (Test-Path $items)) {
Set-Content $items ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(Get-ChildItem $items).IsReadOnly = $false
}

$objShell = New-Object -com Shell.Application
$objZIP = $objShell.Namespace($items)

foreach ($file in $input) {
$objZIP.CopyHere($file.FullName)
Start-Sleep -milliseconds 500
}
}

function GetZIPItemsList {
if (Test-Path $items) {
$objShell = New-Object -com Shell.Application
$objZIP = $objShell.Namespace($items)
$objZIP.Items() | Select Path, Type
}
}

function GetZIPExtract {
if (Test-Path $items) {
$objShell = New-Object -com Shell.Application
$objZIP = $objShell.Namespace($items)
$objDes = $objShell.Namespace($dpath)
$objDes.CopyHere($objZIP.Items())
}
}

switch ($args[0]) {
"/a" { $source = $args[1];
$items = $args[2];
Get-ChildItem $source | AddZIPItemsList $items;
break;
}
"/l" { $items = $args[1];
GetZIPItemsList $items;
break;
}
"/x" { $items = $args[1];
$dpath = $args[2];
GetZIPExtract $items $dpath;
break;
}
default { Write-Host Неизвестный аргумент.`n -fore yellow;
break;
}
}
Автор: DreamDok
Дата сообщения: 03.03.2011 14:21
Благодарю за ответ.Но подумав немного, я решил что лучше подключить к этому делу консольный 7z и реализовать всё через батник
Автор: ComradG
Дата сообщения: 03.03.2011 15:12
DreamDok
ну, дело барское, наше, чай, дело всего лишь предлагать варианты.
Автор: MedvedevDM
Дата сообщения: 07.03.2011 22:26
А как построить карту сети, используя Power Shell?
Автор: ComradG
Дата сообщения: 08.03.2011 20:51
MedvedevDM
через WMI, наверное.
Автор: ComradG
Дата сообщения: 11.03.2011 21:54
Free_Soft
сказать по-правде, то нагорожено в тамошнем сценарии, на которую была ссылка, ой как много левого! дядя полез в WMI, - зачем лезть в такие дебри, когда можно просто использовать PSPath, при условии, что требуется извлечь всего лишь серийник винды, понятия не имею?! так что я переписал код, сделав его более компактным и удобочитаемым:
Код: function Get-SerialNumber {
$regVal = Get-ItemProperty $regDir.PSPath
$arrVal = $regVal.DigitalProductId
$arrBin = $arrVal[52..66]
$arrChr = "B", "C", "D", "F", "G", "H", "J", "K", "M", "P", "Q", "R", `
"T", "V", "W", "X", "Y", "2", "3", "4", "6", "7", "8", "9"

for ($i = 24; $i -ge 0; $i--) {
$k = 0;
for ($j = 14; $j -ge 0; $j--) {
$k = $k * 256 -bxor $arrBin[$j]
$arrBin[$j] = [math]::truncate($k / 24)
$k = $k % 24
}
$strKey = $arrChr[$k] + $strKey

if (($i % 5 -eq 0) -and ($i -ne 0)) {
$strKey = "-" + $strKey
}
}
$strKey
}

$regDir = Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$key_1 = Get-SerialNumber

$regDir = Get-ChildItem HKLM:\SOFTWARE\Microsoft\Office\12.0\Registration
$key_2 = Get-SerialNumber

Write-Output "OS : $key_1"
Write-Output "MS Office: $key_2"
Автор: SerBUser
Дата сообщения: 23.03.2011 03:17
Пoдскажите, в чем моя ошибка. Пишу скрипт по созданию группы в AD:

Код: $gr="G-MailUsers"
$kuda="'OU=Группы,OU=Подразделение,DC=test,DC=ru'"
$descr="'Почта'"
New-ADGroup -Name $gr -SamAccountName $gr -GroupCategory Security -GroupScope Global -DisplayName $gr -Path $kuda -Description $descr
Автор: 01MDM
Дата сообщения: 24.03.2011 18:42
SerBUser
На первый взгляд из переменных нужно убрать какие-нибудь из кавычек:

Код:
$descr = "Почта"
или
$descr = 'Почта'
Автор: SerBUser
Дата сообщения: 25.03.2011 04:08
01MDM

Цитата:
На первый взгляд из переменных нужно убрать какие-нибудь из кавычек:

Точно. Странно, что вариант без переменных отрабатывает
Автор: ComradG
Дата сообщения: 18.05.2011 15:20
у меня возникла пара вопросов относительно PoSH версии 1.0 (увы, но на работе именно она), первый из которых звучит предельно просто: как создать контрольную точку восстановления? я лично не нашел иного способа, как через WMI:
Код: $objCOM = New-Object -com MSScriptControl.ScriptControl
$objCOM.Language = "VBScript"
$objCOM.AddCode('strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default")
Set objItem = objWMIService.Get("SystemRestore")
errResult = objItem.CreateRestorePoint _
("Системная контрольная точка", 7, 100)')
Автор: OFKOFK
Дата сообщения: 15.07.2011 07:06
мужики, помогите, в скриптах не очень силен: скрипт на Powershell который мониторит состояния DHCP (включен или выключен) помогите дописать, что бы он при опросе мог еще опрашивать IP адрес это компьютера на котором запускается скрипт.

$a=Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=TRUE and Index =7" -ComputerName .
if ($a.index -eq 7)
 {Write-Host 0 }
else {Write-Host 1}
Автор: ComradG
Дата сообщения: 17.07.2011 11:26

Код: $computer = "."
$host = gwmi -class Win32_NetworkAdapter -computerName $computer
$netenabled = $host | where {$_.IPenabled}
Автор: OFKOFK
Дата сообщения: 18.07.2011 02:51
ComradG
эм...
как будет выглядеть скрипт целиком, он должен опросить включен ли DHCP и что бы был ip вот такой IP:192.168.89.145. проверку маков не нужно. Если DHCP включен и IP соответсвует "192.168.89.145" выдать 0, если нет то 1

$a=Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=TRUE and Index =7" -ComputerName .
if ($a.index -eq 7)
{Write-Host 0 }
else {Write-Host 1}
$computer = "."
$host = gwmi -class Win32_NetworkAdapter -computerName $computer
$netenabled = $host | where {$_.IPenabled}
Автор: lavren
Дата сообщения: 18.07.2011 11:52
OFKOFK

Код: Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DHCPEnabled -and $_.IPEnabled} | ForEach-Object {if ($_.IPAddress -eq '192.168.89.145') {Write-Host 0} else {Write-Host 1}}
Автор: leoadm
Дата сообщения: 30.07.2011 22:50
Жаль что тема небольшая. Хотелось бы использовать PowerShell в паре с VBS для целей администрирования. Может кто подскажет какую литературу на русском по PS?
Автор: lavren
Дата сообщения: 01.08.2011 08:35
leoadm
По VBS немного говорится в книге Введение в Windows PowerShell Андрей Попов
Отдельно по VBA не встречал.

Страницы: 1234567

Предыдущая тема: Assembler


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.