ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

23.02.2010, 21:41
|
|
Moderator - Level 7
Регистрация: 12.07.2008
Сообщений: 1,705
Провел на форуме: 5914048
Репутация:
1350
|
|
Продолжая вчерашний пост про RSS.Благодаря MVP Василию Гусеву по PowerShell ,я немного подрихтовал его скрипт и адаптировал для получения RSS с античат.Его скрипт http://xaegr.wordpress.com/2009/01/19/pstwitps1/ .
################################################## #############################
#
# Скрипт получения записей с RSS Antichat.Сам скрипт был взят у автора и немного
# подправлен.Часть данных было выкинуто.
#
# Copyright (C) Vasily Gusev, 2009 (http://windowspowershell.ru)
#
# Requres PowerShell v2
# Usage:
#
# powershell -NoProfile -WindowStyle Hidden -File c:\rssantichat.ps1
# powershell -NoProfile -WindowStyle Hidden -Command c:\rssantichat.ps1 -Icon c:\icon.ico
#
################################################## ############################
Param (
$Interval = 60,
$Icon = "$env:SystemRoot\system32\appverif.ico"
)
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
$form = new-object System.Windows.Forms.form
$ni = new-object System.Windows.Forms.NotifyIcon
$niMenu = new-object System.Windows.Forms.ContextMenu
$t = New-Object system.windows.forms.timer
#Устанавливаем свойства элементов управления
$t.Interval = $Interval * 1000
$form.ShowInTaskbar = $False
$form.WindowState = "minimized"
$form.Visible = $false
$ni.Icon = New-object System.Drawing.Icon($Icon)
$ni.ContextMenu = $niMenu
#Создаем элементы меню - Exit
$miExit = new-object System.Windows.Forms.MenuItem
$miExit.Text = "Exit" #Текст меню
$miExit.Add_Click({ #Действие выполняемое при щелчке на элементе
$ni.Visible = $False
$form.close() #При закрытии этой формы, выполнение нашего сценария завершиться
})
#При выборе этого пункта будет вызвана функция Check (см. ниже)
$miCheck = new-object System.Windows.Forms.MenuItem
$miCheck.Text = "Check now!"
$miCheck.Add_Click({Check})
#Вызовет функцию List
$miList = new-object System.Windows.Forms.MenuItem
$miList.Text = "View list"
$miList.Add_Click({Check;List})
#Добавляем элементы в меню
$niMenu.MenuItems.AddRange(@($miList,$miCheck,$miE xit))
#Привязываем к двойному щелчку на значке в области уведомлений вызов функции List
$ni.add_DoubleClick({Check;List})
Function Check
{
write-host "Checking feed $(get-date)"
#Загружаем ленту, и сразу преобразоываем её в xml
$client = New-Object System.Net.WebClient
$url = "http://forum.antichat.ru/news.rss"
$global:timeline = [xml]([System.Text.Encoding]::GetEncoding('windows-1251').GetString([Byte[]]$client.DownloadData($url)))
Write-host "Done $(get-date)"
}
Function List
{
#Создаем элементы
$formList = New-Object system.windows.forms.form
$list = New-Object system.windows.forms.listview
#Задаём их свойства
$formList.controls.add($list)
$formList.width = 700
$formList.height = 350
$formList.Text = "Rss Antichat"
$list.dock="fill"
$List.View = "Details"
$List.MultiSelect = $false
$List.FullRowSelect = $True
$List.Columns.Add("Title").width = 300
$List.Columns.Add("Link").width = 200
$List.Columns.Add("Date").width = 100
$List.Columns.Add("Creator").width = 70
#Добавляем записи
$global:timeline.rss.channel.item |
foreach {
$I = $List.Items.Add($_.title)
$I.SubItems.Add($_.link) | Out-Null
$I.SubItems.Add($([System.Datetime]::Parse($_.date).tostring())) | Out-Null
$I.SubItems.Add($_.Creator) | Out-Null
}
#Указываем что делать при двойном щелчке на списке
$List.Add_DoubleClick({
if($List.SelectedItems.Count -ge 1)
{
Write-Host ($list.SelectedItems[0].subitems[1].text)
#Открываем Internet Explorer и передаем url выбранного элемента как аргумент
& "$env:ProgramFiles\Internet Explorer\iexplore.exe" $list.SelectedItems[0].subitems[1].text
}
})
#Показываем форму
$formList.ShowDialog()
}
#Указываем что при каждом тике таймера, вызывать функцию Check
$t.add_tick({Check})
#Включаем таймер
$t.start()
#Показываем значок в области уведомлений
$NI.Visible = $True
#"Показываем" невидимую форму (когда она закроется - сценарий завершиться)
$form.showdialog()
|
|
|

02.03.2010, 01:29
|
|
Moderator - Level 7
Регистрация: 12.07.2008
Сообщений: 1,705
Провел на форуме: 5914048
Репутация:
1350
|
|
Для создания базовых элементов Windows Form на Powershell,есть замечательная программа от Sapien под названием PrimalForms( http://www.primaltools.com/downloads/communitytools/download.asp?file=pforms ) . С помощью нее можно быстро создать базовые элементы,так же можно использовать Visual Studio( здесь будет сложнее,код создается на C# ,в программе выше сразу имеем код на PowerShell).Так же другие полезные программы от Sapien для PowerShell на сайте http://www.primaltools.com/downloads/communitytools/index.asp
PrimalForms Community Edition is a free GUI builder tool for PowerShell users. It edits and stores Windows Forms in a native XML format and generates PowerShell code on demand. Sample forms included.
И сделал с помощью PrimalForms простой пример с удалением дублей без учета регистра.Просто небольшой показ возможностей.
Наша форма:
Ничего сверхестественного скрипт не делает,а лишь выполняет команду:
Get-Content "$filename" | Select-Object -Unique | Out-File "$savename"
Сам скрипт:
#Generated Form Function
function GenerateForm {
################################################## ######################
# Code Generated By: SAPIEN Technologies PrimalForms (Community Edition)
# Generated On: 02.03.2010
# Generated By: SpangeBoB
################################################## ######################
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$button4 = New-Object System.Windows.Forms.Button
$button3 = New-Object System.Windows.Forms.Button
$richTextBox2 = New-Object System.Windows.Forms.RichTextBox
$richTextBox1 = New-Object System.Windows.Forms.RichTextBox
$button2 = New-Object System.Windows.Forms.Button
$button1 = New-Object System.Windows.Forms.Button
$openFileDialog1 = New-Object System.Windows.Forms.OpenFileDialog
$saveFileDialog1 = New-Object System.Windows.Forms.SaveFileDialog
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
#Provide Custom Code for events specified in PrimalForms.
$button3_OnClick=
{
#TODO: Place custom script here
$form1.close()
}
$button1_OnClick=
{
#TODO: Place custom script here
$openFileDialog1.InitialDirectory = "C:\"
$openFileDialog1.Filter = "All files (*.*)| *.*"
$openFileDialog1.FilterIndex = 2
$openFileDialog1.RestoreDirectory = $true
if($openFileDialog1.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK)
{
try
{
if (($filename=$openFileDialog1.OpenFile().Name) -ne $null)
{
$richTextBox1.Text=$filename
}
}
catch
{
[System.Windows.Forms.MessageBox]::Show("Error: Could not read file from disk. Original error: " + $error[0].Exception.Message)
}
}
}
$handler_openFileDialog1_FileOk=
{
#TODO: Place custom script here
}
$handler_saveFileDialog1_FileOk=
{
#TODO: Place custom script here
}
$button2_OnClick=
{
#TODO: Place custom script here
$saveFileDialog1.InitialDirectory = "C:\"
$saveFileDialog1.Filter = "All files (*.*)| *.*"
$saveFileDialog1.FilterIndex = 2
$saveFileDialog1.RestoreDirectory = $true
if($saveFileDialog1.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK)
{
try
{
if (($savename=$saveFileDialog1.OpenFile().Name) -ne $null)
{
$richTextBox2.Text=$savename
}
}
catch
{
[System.Windows.Forms.MessageBox]::Show("Error: Could not save file from disk. Original error: " + $error[0].Exception.Message)
}
}
}
$handler_form1_Load=
{
#TODO: Place custom script here
}
$button4_OnClick=
{
Write-Host $filename
Write-Host $savename
$saveFileDialog1.Reset()
Get-Content "$filename" | Select-Object -Unique | Out-File "$savename"
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$form1.Text = 'Get Uniq'
$form1.Name = 'form1'
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 456
$System_Drawing_Size.Height = 205
$form1.ClientSize = $System_Drawing_Size
$form1.add_Load($handler_form1_Load)
$button4.TabIndex = 7
$button4.Name = 'button4'
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 87
$System_Drawing_Size.Height = 25
$button4.Size = $System_Drawing_Size
$button4.UseVisualStyleBackColor = $True
$button4.Text = 'Run'
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 323
$System_Drawing_Point.Y = 168
$button4.Location = $System_Drawing_Point
$button4.DataBindings.DefaultDataSourceUpdateMode = 0
$button4.add_Click($button4_OnClick)
$form1.Controls.Add($button4)
$button3.TabIndex = 6
$button3.Name = 'button3'
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 87
$System_Drawing_Size.Height = 25
$button3.Size = $System_Drawing_Size
$button3.UseVisualStyleBackColor = $True
$button3.Text = 'Exit'
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 30
$System_Drawing_Point.Y = 168
$button3.Location = $System_Drawing_Point
$button3.DataBindings.DefaultDataSourceUpdateMode = 0
$button3.add_Click($button3_OnClick)
$form1.Controls.Add($button3)
$richTextBox2.Name = 'richTextBox2'
$richTextBox2.Text = ''
$richTextBox2.DataBindings.DefaultDataSourceUpdate Mode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 38
$System_Drawing_Point.Y = 109
$richTextBox2.Location = $System_Drawing_Point
$richTextBox2.Multiline = $False
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 279
$System_Drawing_Size.Height = 21
$richTextBox2.Size = $System_Drawing_Size
$richTextBox2.TabIndex = 5
$form1.Controls.Add($richTextBox2)
$richTextBox1.Name = 'richTextBox1'
$richTextBox1.Text = ''
$richTextBox1.DataBindings.DefaultDataSourceUpdate Mode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 38
$System_Drawing_Point.Y = 48
$richTextBox1.Location = $System_Drawing_Point
$richTextBox1.Multiline = $False
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 279
$System_Drawing_Size.Height = 21
$richTextBox1.Size = $System_Drawing_Size
$richTextBox1.TabIndex = 4
$form1.Controls.Add($richTextBox1)
$button2.TabIndex = 3
$button2.Name = 'button2'
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 99
$System_Drawing_Size.Height = 21
$button2.Size = $System_Drawing_Size
$button2.UseVisualStyleBackColor = $True
$button2.Text = 'Save'
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 323
$System_Drawing_Point.Y = 109
$button2.Location = $System_Drawing_Point
$button2.DataBindings.DefaultDataSourceUpdateMode = 0
$button2.add_Click($button2_OnClick)
$form1.Controls.Add($button2)
$button1.TabIndex = 1
$button1.Name = 'button1'
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 99
$System_Drawing_Size.Height = 21
$button1.Size = $System_Drawing_Size
$button1.UseVisualStyleBackColor = $True
$button1.Text = 'Open'
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 323
$System_Drawing_Point.Y = 48
$button1.Location = $System_Drawing_Point
$button1.DataBindings.DefaultDataSourceUpdateMode = 0
$button1.add_Click($button1_OnClick)
$form1.Controls.Add($button1)
$openFileDialog1.ShowHelp = $True
$openFileDialog1.FileName = 'file'
$openFileDialog1.add_FileOk($handler_openFileDialo g1_FileOk)
$saveFileDialog1.ShowHelp = $True
$saveFileDialog1.FileName = 'file'
$saveFileDialog1.add_FileOk($handler_saveFileDialo g1_FileOk)
#endregion Generated Form Code
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function
#Call the Function
GenerateForm
|
|
|

08.03.2010, 01:39
|
|
Moderator - Level 7
Регистрация: 12.07.2008
Сообщений: 1,705
Провел на форуме: 5914048
Репутация:
1350
|
|
Еще один небольшой пример работы с PrimalForms, а именно получение IP по имени и на оборот имени по IP(так сказать минимальная возможность nslookup). Проверку на валидность IP ,здесь я взял regex с сайта http://www.regular-expressions.info/examples.html .
#Generated Form Function
function GenerateForm {
################################################## ######################
# Code Generated By: SAPIEN Technologies PrimalForms (Community Edition) v1.0.8.0
# Generated By: SpangeBoB
################################################## ######################
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$label2 = New-Object System.Windows.Forms.Label
$label1 = New-Object System.Windows.Forms.Label
$button1 = New-Object System.Windows.Forms.Button
$richTextBox2 = New-Object System.Windows.Forms.RichTextBox
$richTextBox1 = New-Object System.Windows.Forms.RichTextBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
#Provide Custom Code for events specified in PrimalForms.
$button1_OnClick=
{
if (($name=$richTextBox1.Text))
{
try {
if ($name -match '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b')
{
$ip=[System.Net.IPAddress]::Parse($name).IPAddressToString
$richTextBox2.Text = [System.Net.Dns]::GetHostByAddress($ip).HostName
}
else {
$ip = [System.Net.Dns]::GetHostAddresses($name) | ForEach-Object { $_.IPAddressToString}
$ofs = ","
$richTextBox2.Text = $ip
}
}
catch [System.Management.Automation.MethodInvocationExcep tion]
{
[System.Windows.Forms.MessageBox]::Show("Enter correct host!")
}
}
else { [System.Windows.Forms.MessageBox]::Show("Enter host!")}
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$form1.Text = "Simple Resolve"
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 404
$System_Drawing_Size.Height = 129
$form1.ClientSize = $System_Drawing_Size
$label2.TabIndex = 4
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 22
$System_Drawing_Size.Height = 24
$label2.Size = $System_Drawing_Size
$label2.Text = "IP"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 28
$System_Drawing_Point.Y = 62
$label2.Location = $System_Drawing_Point
$label2.DataBindings.DefaultDataSourceUpdateMode = 0
$label2.Name = "label2"
$form1.Controls.Add($label2)
$label1.TabIndex = 3
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 34
$System_Drawing_Size.Height = 21
$label1.Size = $System_Drawing_Size
$label1.Text = "Host"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 28
$System_Drawing_Point.Y = 12
$label1.Location = $System_Drawing_Point
$label1.DataBindings.DefaultDataSourceUpdateMode = 0
$label1.Name = "label1"
$form1.Controls.Add($label1)
$button1.TabIndex = 2
$button1.Name = "button1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 57
$System_Drawing_Size.Height = 27
$button1.Size = $System_Drawing_Size
$button1.UseVisualStyleBackColor = $True
$button1.Text = "Resolve"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 324
$System_Drawing_Point.Y = 35
$button1.Location = $System_Drawing_Point
$button1.DataBindings.DefaultDataSourceUpdateMode = 0
$button1.add_Click($button1_OnClick)
$form1.Controls.Add($button1)
$richTextBox2.Name = "richTextBox2"
$richTextBox2.ScrollBars = 0
$richTextBox2.Text = ""
$richTextBox2.DataBindings.DefaultDataSourceUpdate Mode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 71
$System_Drawing_Point.Y = 62
$richTextBox2.Location = $System_Drawing_Point
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 229
$System_Drawing_Size.Height = 36
$richTextBox2.Size = $System_Drawing_Size
$richTextBox2.TabIndex = 1
$form1.Controls.Add($richTextBox2)
$richTextBox1.Name = "richTextBox1"
$richTextBox1.MaxLength = 255
$richTextBox1.ScrollBars = 0
$richTextBox1.Text = ""
$richTextBox1.DataBindings.DefaultDataSourceUpdate Mode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 71
$System_Drawing_Point.Y = 12
$richTextBox1.Location = $System_Drawing_Point
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 231
$System_Drawing_Size.Height = 22
$richTextBox1.Size = $System_Drawing_Size
$richTextBox1.TabIndex = 0
$form1.Controls.Add($richTextBox1)
#endregion Generated Form Code
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function
#Call the Function
GenerateForm
|
|
|

15.03.2010, 03:36
|
|
Moderator - Level 7
Регистрация: 12.07.2008
Сообщений: 1,705
Провел на форуме: 5914048
Репутация:
1350
|
|
Написал для себя скрипт ,который мониторит папку на события Changed, Created, Deleted и Renamed . Для этого воспользовался классом FileSystemWatcher - класс . Есть одна неприятность если явно не указано свойство SynchronizingObject ,то Powershell завершает свою работу.Поэтому в скрипт пришлось добавить объект Form(спасибо /\/\o\/\/ ).Для остановки скрипта добавим в область уведомления ярлык с единственным возможным действием Exit.
Когда события Changed, Created, Deleted и Renamed обрабатываются компонентом Windows Forms, таким как Button, доступ к данному компоненту через системную группу потоков может не работать или же может возникнуть исключение. Этого можно избежать, задав в свойстве SynchronizingObject компонент Windows Forms, вызывающий методы, обрабатывающие события Changed, Created, Deleted и Renamed, вызванные в том же потоке, в котором был создан данный компонент.
param ([string]$folder,
$Icon = "$env:SystemRoot\system32\appverif.ico"
)
$form = new-object System.Windows.Forms.Form
$ni = new-object System.Windows.Forms.NotifyIcon
$niMenu = new-object System.Windows.Forms.ContextMenu
$watcher = New-Object System.IO.FileSystemWatcher $folder
$ni.Icon = New-object System.Drawing.Icon($Icon)
$ni.ContextMenu = $niMenu
$miExit = new-object System.Windows.Forms.MenuItem
$miExit.Text = "Exit"
$miExit.Add_Click({ $ni.Visible = $False
$form.close() })
$niMenu.MenuItems.AddRange(@($miExit))
$watcher.IncludeSubDirectories = $true
$watcher.SynchronizingObject = $form
$form.ShowInTaskbar = $False
$form.WindowState = "minimized"
$watcher.NotifyFilter = [System.IO.NotifyFilters]::LastAccess , [System.IO.NotifyFilters]::LastWrite, [System.IO.NotifyFilters]::FileName,[System.IO.NotifyFilters]:  irectoryName
$watcher.add_Changed({
Write-Host "$((get-date).ToShortTimeString()) : $($_.FullPath) $($_.ChangeType)"
})
$watcher.add_Created(
{Write-Host "$((get-date).ToShortTimeString()) : $($_.FullPath) $($_.ChangeType)"
})
$watcher.add_Deleted({
Write-Host "$((get-date).ToShortTimeString()) : $($_.FullPath) $($_.ChangeType)"
})
$watcher.add_Renamed({
Write-Host "$((get-date).ToShortTimeString()) : $($_.OldFullPath) renamed to $($_.FullPath) $($_.ChangeType)"
})
$watcher.EnableRaisingEvents = $true
$NI.Visible = $True
$form.showdialog()
Вывод:
2:36 : F:\1\3.txt Deleted
2:36 : F:\1\New Text Document.txt Deleted
2:36 : F:\1\2.txt Deleted
2:36 : F:\1\2 (2).txt Deleted
Последний раз редактировалось SpangeBoB; 15.03.2010 в 03:50..
|
|
|

22.03.2010, 17:18
|
|
Moderator - Level 7
Регистрация: 12.07.2008
Сообщений: 1,705
Провел на форуме: 5914048
Репутация:
1350
|
|
Известно,что PowerShell позволяет использовать WinApi функции в своих скриптах.Один из MVP Shay Levi продемонстировал ,как скрыть ярлыки рабочего стола с помощью функции ShowWindow ( http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2009/05/11/show-or-hide-your-desktop-icons-with-powershell.aspx).
Немного добавив в его скрипт ,мы можем скрывать и другие окна.Я думаю это полезный пример и просто совет на будущее.
#requires -Version 2.0 - указывает ,что требуется версия PowerShell 2.0.
#requires -Version 2.0
#Задаем процесс,окно которого будем скрывать.
param ([string]$pname = 'calc')
#Указываем какие WinApi функции будем импортировать,хороший сайт http://www.pinvoke.net/
$signature = @"
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd,int nCmdShow);
"@
$win = Add-Type -MemberDefinition $signature -Name Window `
-Namespace UseWinAPI -passThru
#Получаем Handle окна процесса.
$hWnd = (Get-Process -Name $pname).MainWindowHandle
#Скрываем окно.
Function Hide-Window { $null = $win::ShowWindow($hWnd,0) }
#Восстанавливаем скрытое нами окно.
Function Show-Window { $null = $win::ShowWindow($hWnd,5) }
Последний раз редактировалось SpangeBoB; 22.03.2010 в 17:30..
|
|
|

28.03.2010, 03:30
|
|
Moderator - Level 7
Регистрация: 12.07.2008
Сообщений: 1,705
Провел на форуме: 5914048
Репутация:
1350
|
|
Была затронута тема отправка файла на FTP.Существует большое колличество способов и пару простых способов продемонстрирую.
1)Использование стандартного клиента ftp.exe.
2)Использование класса FtpWebRequest Class
$inputfile = "F:\1.txt"
$ftphost = "127.0.0.1"
$ftpfilepath = "/1.txt"
$ftpfullpath = "ftp://" + $ftphost + $ftpfilepath
$username="ftp"
$password="ftp"
$ftp = [System.Net.FtpWebRequest]::create($ftpfullpath)
$ftp.Credentials = New-Object System.Net.NetworkCredential($username,$password)
$ftp.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$ftp.UseBinary = $true
$ftp.KeepAlive = $true
$fs = [System.IO.File]::OpenRead($inputfile)
[Void][Byte[]]$buffer = New-Object byte[] ($fs.length)
$fs.Read($buffer, 0, $buffer.Length)
$fs.Close()
$ftpstream = $ftp.GetRequestStream()
$ftpstream.Write($buffer, 0, $buffer.Length)
$ftpstream.Close()
Поддержка Proxy :
If the specified proxy is an HTTP proxy, only the DownloadFile, ListDirectory, and ListDirectoryDetails commands are supported.
3)Использование библиотеки BytesRoad.NetSuit ,возможна работа с Proxy (Socks4,5,HTTP)
Загрузить библиотеку можно по адресу - http://coad.net/blog/resources/BytesRoad.NetSuit_2_0.zip
[Void][System.Reflection.Assembly]::LoadFrom("F:\BytesRoad.Net.Ftp.dll")
[Void][System.Reflection.Assembly]::LoadFrom("F:\BytesRoad.Net.Sockets.dll")
[Void][System.Reflection.Assembly]::LoadFrom("F:\BytesRoad.Diag.dll")
Function UploadToFTP ()
{
param (
#Настройки подключения
#Удаленный сервер
$FtpServer = "127.0.0.1",
#Имя пользователя для ftp
$Username = "ftp",
#Пароль пользователя для ftp
$Password = "ftp",
#Папка на удаленном сервер
$RemotePath = "/",
#10 секунд
$Timeout = 10000,
#Файл для отправки
$LocalFile = "F:\1.txt",
#Настройки прокси
#Удаленный сервер
$pserver = "127.0.0.1",
#Порт
$pport = 3128,
#Имя пользователя для proxy
$puser = "test",
#Пароль пользователя для proxy
$ppasword = "test",
#Работаем с прокси или нет.
[switch]$IsProxy
)
$client = New-Object BytesRoad.Net.Ftp.FtpClient
$client.PassiveMode = $true
if ($IsProxy)
{
$proxy = New-Object BytesRoad.Net.Ftp.FtpProxyInfo
$proxy.Server = $pserver
$proxy.Port = $pport
$proxy.Type = [BytesRoad.Net.Ftp.FtpProxyType]::Socks5
$proxy.User = $puser
$proxy.Password = $ppasword
$client.ProxyInfo = $proxy
}
$client.Connect($Timeout, $FtpServer, 21)
$client.Login($Timeout, $Username, $Password)
$target = [System.IO.Path]::Combine($RemotePath,[System.IO.Path]::GetFileName($LocalFile)).Replace("\\", "/")
$client.PutFile($Timeout, $target, $LocalFile)
$client.Disconnect($Timeout)
}
#Запустит выполнение функции с определенными выше параметрами.
UploadToFTP
<#
UploadToFTP -IsProxy (если трубется поддержка прокси,параметры указать в функции)
Переопределить параметры ,которые указанны в функции
UploadToFTP -FtpServe "myserver.ru" -Username "Test" -Password "Test" -RemotePath "\\folderonserver/" -Timeout -IsProxy
#>
Последний раз редактировалось SpangeBoB; 28.03.2010 в 03:37..
|
|
|

29.03.2010, 00:21
|
|
Moderator - Level 7
Регистрация: 12.07.2008
Сообщений: 1,705
Провел на форуме: 5914048
Репутация:
1350
|
|
Написал для себя простую функцию для получения всех локальных профилей на машине.
Function Get-AllProfiles ()
{
$path = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
Get-ChildItem $path | ForEach-Object `
-Begin {$profiles=@()} `
-Process {$ppath = "" | select UserName,Sid,ProfilePath
$ppath.Sid = $_.PsChildName
$ppath.ProfilePath = (Get-ItemProperty ($path + "\" + $_.PsChildName)).ProfileImagePath
$ppath.UserName = Split-Path $ppath.ProfilePath -Leaf
$profiles+=$ppath
} `
-End {$profiles }
}
Get-AllProfiles | ft -auto
Вывод:
Или используя:
Get-AllProfiles | Out-GridView

Последний раз редактировалось SpangeBoB; 29.03.2010 в 00:26..
|
|
|

05.04.2010, 23:04
|
|
Moderator - Level 7
Регистрация: 12.07.2008
Сообщений: 1,705
Провел на форуме: 5914048
Репутация:
1350
|
|
На одном из форумов был задан вопрос - "Нужно распечатать 1000 *.pdf файлов. Но только первую страницу каждого из файлов. "
Решение конечно не красивое,но рабочее.Что требуется:
1)Качаем http://sourceforge.net/projects/pdfsharp/files/pdfsharp/PDFsharp%201.31/PDFsharp-MigraDocFoundation-Assemblies-1_31.zip/download
2)Распаковываем.
3)Наличие Adobe Reader.
4)Свободное место.
Суть скрипта создаем новый файл только с первой страницей (в данном случаем в F:\print\ - заменить на свое ) и распечатываем ее.Т.е у нас будет создано 1000 файлов и в каждом только 1 страница.
#Папка куда складываем каждую первую страницу.
$pathToSave = "F:\print\"
[System.Reflection.Assembly]::LoadFile('F:\PdfSharp.dll')
#Обязательное требование Adobe Reader
[PdfSharp.Pdf.Printing.PDFFilePrinter]::AdobeReaderPath = "C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32.exe"
Get-ChildItem F:\ -Filter *.pdf | ForEach-Object {
$filename = $_.FullName
$name = [System.IO.Path]::GetFileNameWithoutExtension($filename)
$inputname = [PdfSharp.Pdf.Io.Pdfreader]::Open($filename,[PdfSharp.Pdf.IO.PdfDocumentOpenMode]::Import)
$outfile = New-Object PdfSharp.Pdf.PdfDocument
$outfile.Version = $inputname.Version
$outfile.Info.Title = [String]::Format("Page {0} of {1}", 1, $inputname.Info.Title)
$outfile.Info.Creator = $inputname.Info.Creator
$outfile.AddPage($inputname.Pages[0])
$outfile.Save($pathToSave+[String]::Format("{0} - Page {1}.pdf", $name, 1))
$printer = New-Object PdfSharp.Pdf.Printing.PDFFilePrinter([System.String]($pathToSave+[String]::Format("{0} - Page {1}.pdf", $name, 1)) , [System.String]"HP LaserJet 6L")
$printer.Print()
}
'F:\PdfSharp.dll' - заменяем на путь куда распаковали
Get-ChildItem F:\ -Filter *.pdf - для примера искать pdf в корне диска
Пример работы взят с сайта http://www.pdfsharp.net/wiki/PDFsharpSamples.ashx
Последний раз редактировалось SpangeBoB; 05.04.2010 в 23:10..
|
|
|

06.04.2010, 13:57
|
|
Moderator - Level 7
Регистрация: 12.07.2008
Сообщений: 1,705
Провел на форуме: 5914048
Репутация:
1350
|
|
Есть файл с логами формат:
xxxxx
yyyyy zzzzzzz
xxxxx
yyyyy zzzzzzz
Требуется вывод: xxxxx yyyyy zzzzzzz
За одно используем особенность ,которую описал в своем блоге MVP PowerShell Marc van Orsouw (http://thepowershellguy.com/blogs/posh/archive/2007/10/23/how-to-go-to-the-next-item-in-a-for-loop-in-powershell.aspx)
foreach ($i in (gc log.txt)) { [void]$foreach.moveNext();$i+$foreach.current}
Как выше было сказано,что при вызове MoveNext() не обновляется переменная (в данном случае $i) ,а используется $foreach.current
|
|
|

26.05.2010, 21:33
|
|
Moderator - Level 7
Регистрация: 12.07.2008
Сообщений: 1,705
Провел на форуме: 5914048
Репутация:
1350
|
|
На форуме был задан вопрос:
Есть MS Outlook, есть к нему плагин Potolook (автоматически отвечает написьма)
Приходит письмо в оутлок такого вида
txn_id= 7246926710001
account= 9088688743
amount= 99.00
account1= None
надо чтоб Potolook (JavaScript)
изменял число 99.00 таким образом "99.00+((99.00/100)*15)" в общем прибавлял процент, и результат будет отправляться на другой мэил с обработанным числом НЕ изменяя не тему, не другое содержимое числа помоги это как то осущиствить
Т.к я не знаю JavaScript,решение было на PowerShell.
Код:
$ou = New-Object -com outlook.application
$ns = $ou.GetNamespace("MAPI")
#Отбираем только последнее письмо из папки Входящие,содержащим txn_id
$change=$ns.GetDefaultFolder(6).Items | Where-Object { $_.body -like "*txn_id=*"} | Select-Object -First 1
$change.body -match "amount= (.+)" | Out-Null
#Считаем по заданной формуле
$cal = [float]$matches[1]+(([float]$matches[1]/100)*15)
$change.body = $change.body -replace "amount=.+","amount= $cal"
Вот таким не хитрым действием ,мы решили проблему 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|