Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Windows PowerShell 1.x/2.x/CTP

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Открыть новую тему     Написать ответ в эту тему

tcg2



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Microsoft Windows PowerShell

 
Обсуждаемые темы

    * Работа с SQL
    * Работа с Visual Studio
    * etc.

Всего записей: 7 | Зарегистр. 20-11-2006 | Отправлено: 19:06 29-11-2006 | Исправлено: TCPIP, 05:51 08-11-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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"  
        
    }
 
}
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:30 18-11-2010
MedvedevDM



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нашел команду для переноса пользователя в другую рабочую группу
 
add-computer -workgroupname K203
Это на локальном компьютере
 
 
А можно ли тоже самое сделать с удаленного компьютера?
 

Всего записей: 114 | Зарегистр. 03-11-2010 | Отправлено: 17:14 27-12-2010
MedvedevDM



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Оказывается PowerShell 2.0 доступна и для Windows XP
ссылка под ковриком

Всего записей: 114 | Зарегистр. 03-11-2010 | Отправлено: 10:35 29-12-2010 | Исправлено: MedvedevDM, 10:37 29-12-2010
BVV63



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MedvedevDM

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

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

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

А чего её прятать-то? Не варез, всё законно.

Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:24 30-12-2010
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BVV63

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

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

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

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

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 16:01 30-12-2010
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
что-то я никак не пойму одной баги:

Код:
gi [имя_файла] | foreach {$_.cretiontime='[число_и_время]'}

вроде бы правильно меняет дату создания файла, но не время, которое почему то меняется по нехитрой формуле HH-1H. в чем засада пока понять не могу, а потому если кто сталкивался с подобным, может просветит. да! у конструкции

Код:
gci -recurse [каталог] | foreach {$_.creationtime='[число_и_время]'}
обработка количества вложенных каталогов ограничено. а потому мой вопрос вполне логичен - почему?

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 14:56 05-01-2011
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ComradG
Меняет и дату и время:

Код:
 
(gi file.ext).CreationTime=[datetime] "25.11.2010 14:33:44"
(gi folder).CreationTime=[datetime] "25.11.2010 14:33:44"
 


Цитата:
обработка количества вложенных каталогов ограничено.

С чего это вдруг? Не заметил подобного ограничения.

----------
Вопросы в личке останутся без ответа

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:03 05-01-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
за
Код:
(gi file.ext).CreationTime=[datetime] "25.11.2010 14:33:44"
спасибо! по поводу
Цитата:
С чего это вдруг? Не заметил подобного ограничения.
я про рекурсию. ведь
Код:
(gi folder).CreationTime=[datetime] "25.11.2010 14:33:44"
меняет дату создания каталога, а не вложенных в него файлов, - это уже программная логика. именно когда пытаешься применить пакетную обработку вроде
Код:
gci -recurse [folder] | foreach {$_.creationtime='[datetime]'}
, то ошибка налицо. короче, в чем замес с рекурсией?

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 18:56 05-01-2011
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ComradG,
 
У меня вот так получилось. Дату каталогов не менял, только файлы. С помощью switch:

Код:
 
$items = gci -r .
 
switch ( $items ) {
 
    { $_ -is [system.io.fileinfo] } {  
    
        $_.CreationTime = (get-date "09.05.1945 15:00:00")
        
    }
    
    default { "$( $_.name ) is directory" }
 
}
 

Если через foreach-object и для всех файлов и каталогов, то вот так должно работать:

Код:
 
gci -r . | % { $_.creationtime = (get-date "01.01.2001 01:01:01")
 

 
точка в команде это с текущего каталога.  
 
Кстати почему-то не может преобразовать строку явно в тип datetime, только при помощи get-date. Где-то читал, что все работает только с en_US локалью.


----------
Вопросы в личке останутся без ответа

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:56 05-01-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM

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

Цитата:
Где-то читал, что все работает только с en_US локалью.
лично я оное прочитал на technet
в целом, за все спасибо. кстати, со свитчем здорово придумано.

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 20:31 05-01-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
обрисую ситуацию, чтобы не было непоняток, почему в скрипте ниже, я использовал конструкцию 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
      }
   }
}
объяснять, полагаю, что сей скрипт делает, не нужно, все должно быть ясно из контекста. могу лишь добавить, что помимо алгоритмов SHA256 в System.Security.dll есть поддержка SHA384 и SHA512(хотя кому они могут понадобиться, мне не совсем ясно, однако они там есть, - смотрите ildasm'ом вышеобозначенную либу). у меня же возник другой вопрос: как можно унифицировать набор $args[0], то есть у /m была пара -m? будь то си шарп, то там вбил case "/m". "-m": и вперед, а в поше такое не прокатывает. по крайней мере я чего-то ничего не надумал. может кто чего присоветует?

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 20:10 04-02-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
чего-то ветка не развивается... вот и решил я подбросить пример реализации примитивного просмотрщика процессов

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 21:14 19-02-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 20:41 26-02-2011
Free_Soft



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ComradG
Спасибо, может когда и перейду...

----------
На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

Всего записей: 1467 | Зарегистр. 19-04-2010 | Отправлено: 11:27 28-02-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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;
   }
}

чтобы зазипать:
Код:
.\zip.ps1 /a x:\folder\* x:\test.zip

распаковать:
Код:
.\zip.ps1 /x x:\test.zip x:\newfolder

посмотреть содержимое:
Код:
.\zip.ps1 /l x:\test.zip

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 11:40 03-03-2011
DreamDok

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Благодарю за ответ.Но подумав немного, я решил что лучше подключить к этому делу консольный 7z и реализовать всё через батник

Всего записей: 24 | Зарегистр. 14-11-2010 | Отправлено: 15:21 03-03-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DreamDok
ну, дело барское, наше, чай, дело всего лишь предлагать варианты.

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 16:12 03-03-2011
MedvedevDM



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как построить карту сети, используя Power Shell?

Всего записей: 114 | Зарегистр. 03-11-2010 | Отправлено: 23:26 07-03-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MedvedevDM
через WMI, наверное.

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 21:51 08-03-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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"
в примере также показано, как получить ключ 2007 офиса, при этом в отличие от батника не нужно дрюкаться с ID установщика. Относительно же прочих мелкософтовских продуктов, таких как 2010 офис, полагаю, додумать можно самостоятельно.

Всего записей: 2037 | Зарегистр. 05-07-2008 | Отправлено: 22:54 11-03-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Windows PowerShell 1.x/2.x/CTP

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru