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

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

Автор: kenaut
Дата сообщения: 23.01.2012 13:37
Подскажите, пожалуйста, по start-process -wait
что оно конкретно делать должно? я пытаюсь запустить консольное приложение, но скрипт бежит дальше не дождавшись его завершения
как бы всё таки притормозить срипт? (естественно не знаю сколько займёт времени работа приложения)
заранее благодарю за ответы
Автор: ComradG
Дата сообщения: 23.01.2012 17:04
kenaut
командлет Start-Process запускает один или несколько процессов на локальном компьютере, параметр -wait ожидает завершения указанного процесса, прежде чем принимать следующий ввод; этот параметр отключает командую строку или удерживает окно до завершения процесса.
если требуется приостановить работу скрипта используйте Start-Sleep или его альяс sleep:
Код: Start-Sleep -m 3000
Автор: kenaut
Дата сообщения: 24.01.2012 07:19
ComradG
спасибо, но, как я уже говорил, я не знаю сколько времени мне надо выждать, sleep не годится, а справку я уже прочитал

Добавлено:
и с Wait-Process -Name тоже не ждёт =\

Добавлено:
всё, разобрался, там один процесс порождал другой, сначала Start-Process первый процесс -Wait, потом Wait-Process -Name второй процесс сработало
Автор: Scaramanga
Дата сообщения: 26.01.2012 18:00
День добрый. Начинаю осваивать Powershell. Сейчас допиливаю скрипт добавление пользователей в AD и создание им папки на файлопомойке + добаление ссылки в DFS на эту папку,возникло несколько вопросов:
Как реализовать проверку прав пользователя на указанную папку?
т.е. если у пользователя есть права на папку, то вывести в лог какие права в формате (полный доступ, чтение, изменения) если нет то доступ закрыт.

Вопрос номер два. Есть Gui окошко Лога

Код: $Log = New-Object windows.Forms.RichTextBox
    $Log.left= "1"
    $Log.top="150"
    $Log.width = "609"
    $Log.height = "200"
    $Log.ReadOnly = "true"
$form.controls.add($Log)
Автор: ComradG
Дата сообщения: 27.01.2012 12:06
Scaramanga
касательно первого вопроса. как на счет командлета Get-Acl? вот что говорит по этому поводу man Get-Acl:
Цитата:
Командлет Get-Acl получает объекты, которые представляют дескриптор безопасности файла или ресурса. Дескриптор безопасности содержит списки управления доступом (ACL) ресурса. Список ACL содержит разрешения, необходимые пользователям и группам пользователей для доступа к ресурсу.

второе. судя по куску кода используется элемент управления ричтекстбокс. если знаком с .NET языками, то разобраться с раскраской труда не составит; если не особо, то стоит смотреть в сторону ForeColor, при этом SelectionColor трогать не стоит вообще. глянь здесь пример, там встречаются семплы того, как раскрашиваются партиции данных сборок.
третье. если логин занесен в переменную $login, то не проще ли установить условия проверки вроде:
Код: if (($login -ne $null) -and ($login -eq "пароль")) {здесь логика для окна ввода пароля}
Автор: Scaramanga
Дата сообщения: 27.01.2012 20:39
Спасибо в принципе вопросы решены. Сейчас пытаюсь разобраться как остановить выполнение скрипта но не закрывать GUI окошко
Автор: VseNikiZaniatiBlin
Дата сообщения: 29.01.2012 14:05
Задача :
массово - всем пользователям в домене удалить номер сотового телефона и стационарного.
win2k8
атрибуты telephoneNumber, mobile.

Тоесть не выгружать ни каких пользователей а просто ВСЕМ изменить(удалить) мобильные и стационарные.

Очень очень благодарен.
Автор: VovaMozg
Дата сообщения: 31.01.2012 05:13
VseNikiZaniatiBlin
Получаешь список пользователей Потом для всех (foreach) вставляешь нгужный атрибут
Get-ADUser -Filter * | Foreach-Object {Set-ADUser -Identity $_ -OfficePhone "" -MobilePhone ""}
Как-то так
Автор: mag16
Дата сообщения: 03.02.2012 21:01
Здравствуй, "все"!
Есть вопросец. Где мне искать информацию, как скриптом отправлять файл на печать, используя свойство принтера "тип печати: факс", а также передавать задавать номер адресата? Принтер Xerox WorkCentre 5755, например (т.е., один из них).

Пасиб заранее.
Автор: ComradG
Дата сообщения: 04.02.2012 14:56
mag16

Цитата:
Где мне искать информацию
если вопрос об автоматизации печати, то смотрите в сторону Win32_Printer
Автор: VovaMozg
Дата сообщения: 09.02.2012 03:56
mag16
что печатать собрались? просто информацию из скрипта тогда попробуйте Out-Print. Если оффисные документы - можно использовать COM (посмотрите Bible PowerShell 2.0 Thomas Lee (раздел 4))
примерно так
$word = New-Object -ComObject word.application
$null = $word.Documents.Add("$SourceFile")
$word.PrintOut()
$word.Quit()
Автор: mag16
Дата сообщения: 09.02.2012 07:54

Цитата:
что печатать собрались? просто информацию из скрипта тогда попробуйте Out-Print

Вот, спасибо, милчилавек! )
Печатать собрались PDF и печатать не просто на принтере, а отправлять через принтер по факсу. Вот именно здесь прошу вашей помощи: в драйвере есть свойство "Тип печати", которое необходимо выставить "Фа(к)с" (без скобок ))).
Предполагаю, что можно как-то получить доступ к искомым свойствам программно, но как?
Автор: meskalin13
Дата сообщения: 09.02.2012 08:14
Всем привет!
Решаю сейчас небольшую задачу по автоматическому добавлению в ИСУ ip-адресов. Нашел такой скрипт для подключения к ИСЕ.

$Root = New-Object -comObject "FPC.Root"
$arr= $root.Arrays.Connect("")

В описании говориться, что это мы подключились.
Первая команда вроде проходит, только непонятно почему "FPC.Root"
А вот на второй ругаеться

Exception calling "Connect" with "1" argument(s): "The property or method Connect is not supported when a Configuration
Storage server is used.
The error occurred on object 'Arrays' of class 'Arrays' in enterprise scope.
"
At line:1 char:28
+ $arr = $root.arrays.connect( <<<< "")

Вместо "" подставлял имя сервера, имя сервера в кавычках, все равно не проходит.
В общем непойму чего он хочет. Что то слабоват я пока в COM обьектах.

P.S. Используеться PoSH 1.0
Автор: mag16
Дата сообщения: 09.02.2012 08:14

Цитата:
Вот именно здесь прошу вашей помощи: в драйвере есть свойство "Тип печати", которое необходимо выставить "Фа(к)с"

Даже больше! Данный скрипт предполагается крутить на сервере без вмешательства человеков. Надо не "выставить факс", а использовать данное свойство. Это предполагает к тому же и способ передачи каким-то образом и номера целевого факса.
Автор: mag16
Дата сообщения: 09.02.2012 21:16

Цитата:
Вместо "" подставлял имя сервера, имя сервера в кавычках, все равно не проходит.
В общем непойму чего он хочет. Что то слабоват я пока в COM обьектах.

Я дзвыняюс глубоко, в теме не очень силён. А ничё, что root с маленькой буквы, может он не знает такой объект?
Автор: ComradG
Дата сообщения: 09.02.2012 21:48
mag16
Po$h не чувствителен к регистру, а потому для него $Root все равно что $root.
Автор: Orin_Veliki
Дата сообщения: 20.07.2012 13:59
Пишу один скрипт на powershell, одна из его задач взять из имени файла кусок(точнее номер вида 0????) и сохранить в переменную. Интересует чем это можно сделать, Get-Content и Select-String не подходят потому-что возвращают целиком соответственно объект и строку.
Автор: smaharbA
Дата сообщения: 15.08.2012 21:48
$x="Текст тут этот";echo ${x}.substring(6,3)
Автор: lavren
Дата сообщения: 16.08.2012 09:14
Orin_Veliki
$f="c:\Windows\System32\file0123456calc.exe"
$f -match '0\d+'
$a=$matches[0]
Автор: komputeryuzer
Дата сообщения: 25.09.2012 09:34
можно двигать окна? а именно конкретно одно - бровсер опера
надо всё время возвращать обратно на место.. ещё лучше было бы определить текучее состояние если нт то методом проб смогу определить
Автор: komputeryuzer
Дата сообщения: 25.09.2012 14:24
вот нашол такой код...
делает "ресторе", "мак" и "мин"

$hwnd = @(Get-Process Notepad)[0].MainWindowHandle
[Win32.NativeMethods]::ShowWindowAsync($hwnd, 4)

можно ли тут как то задать координаты окна?
Автор: kkknyazzz
Дата сообщения: 08.11.2012 11:45
Здравствуйте, помогите пожалуйста скрипт переписать. Сеть простая - Server 2003 и домен человек на 5 компы разные XP, 7-ка. Скрипт по типу прикрепленного ниже - база Access, но сохранить в нее с других компов нужно логи из журналов. (ComputerName,TimeGenerated,EventCode,EventType,SourceName,RecordNumber,Logfile,Message). В базе одна таблица с аналогичными графами.

http://forum.oszone.net/thread-208521.html
Автор: kURONO
Дата сообщения: 29.11.2012 14:25
Посмотрел скрипт ComradG

Цитата:
#каталог с файлами для загрузки
$dir = "d:\myuploadfiles"

#куда будут грузится файлы
$ftp = "ftp://ftp.myserver.com/pub/destination"
#имя пользователя
$user = "user"
#пароль доступа
$pass = "pass"

#создаем веб-клиент
$client = New-Object System.Net.WebClient
#передаем имя и пароль для авторизации
$client.Credidentals = New-Object System.Net.NetworkCredidental($user, $pass)

#ну, а далее сам процесс загрузги файлов
foreach($item in (dir $dir "*.trc")) {
"Загрузга файла $item..."
$uri = New-Object System.Uri($ftp + $item.Name)
$client.UploadFile($uri, $item.FullName)
}


если я изменю его так, то как я понимаю, он будет брать все папки из d:\Upload и заливать на FTP


Код:
#каталог с директориями для загрузки
$dir = Get-ChildItem d:\Upload -Recurse | Where {$_.psIsContainer -eq $true}

#куда будут грузится файлы
$ftp = "ftp://10.10.10.10/Volume_2/Backups/Bazes/"
#имя пользователя
$user = "log"
#пароль доступа
$pass = "pass"

#создаем веб-клиент
$client = New-Object System.Net.WebClient
#передаем имя и пароль для авторизации
$client.credentials = New-Object System.Net.NetworkCredential($user, $pass)

#ну, а далее сам процесс загрузки папок
foreach($item in $dir) {
"Загрузга директории $item..."
$uri = New-Object System.Uri($ftp + $item.Name)
$client.UploadFile($uri, $item.FullName)
}
Автор: Wsador
Дата сообщения: 16.03.2013 11:36
Добрый день.
Есть скрипт:
Код: # 28.01.2013
# Move all files from Directory folder to Data

$fromDirPath = "\\server\Directory$\"
$toDirPath = "F:\Folder\Data\"

If ((Test-Path $toDirPath) -eq $true) # Check if script run on active node
{
    # Local and remote dirs. Format - "<local dir>*<remote dir>"
    $nameArr = @("Data1*Papka1","Data2*Papka2","Data3*Papka3","Data4*Papka4")

    $errorMsg = ""

    $logFile = "F:\Folder\Data\ScriptLogs.log"

    # Error messages recipient.
    $to1 = ”user@yourdomain.ru”

    # SMTP server settings.
    $smtpServer = "mailserver.local"
    $SMTPPort = "888"
    $msg = new-object Net.Mail.MailMessage
    $msg.From = "no-reply@yourdomain.ru"
    $msg.To.Add($to1)


    function sendEMail($subj,$body)
    {
        $msg.Subject = $subj
        $msg.Body = $body
        $smtp = new-object Net.Mail.SmtpClient($smtpServer,$SMTPPort)
        $smtp.Send($msg)
    }

    function moveFiles ($from, $to)
    {
        $status = 0
        
        
        $lPath = $fromDirPath + $from
        $rPath = $toDirPath + $to
        if (((Test-Path $lPath)) -and ((Test-Path $rPath)))
        {
            $items = Get-ChildItem ($lPath + "\*") -Include "*.txt"
            if ($items -ne 0)
            {
                foreach ($item in $items)
                {
                    try
                    {
                        Move-Item -Path $item.FullName -Destination ($rPath + "\" + $item.Name) -Force -Confirm:$false
                        $message = (Get-Date -UFormat "%d-%m-%Y %H:%M") + " | INFO | File " + $item.FullName + " has been sucessfully moved to destination - " + ($rPath + "\" + $item.Name) + "."
                    }
                    catch
                    {
                        $status = 1
                        $global:errorMsg = $global:errorMsg + "`nCannot move file " + $item.FullName
                        $message = (Get-Date -UFormat "%d-%m-%Y %H:%M") + " | ERROR | File " + $item.FullName + " cannot be moved to destination - " + ($rPath + "\" + $item.Name) + "."
                    }
                    echo $message >> $logFile
                }
            }
            if ((Get-ChildItem $lPath).Count -ne 0)
            {
                $status = 1
                $global:errorMsg = $global:errorMsg + "`nThere are unknown files: " + (Get-ChildItem $lPath)
            }
        }
        else
        {
            $status = 1
            if (!(Test-Path $lPath))
            {
                $global:errorMsg = $global:errorMsg + "`nLocal path error. (" + $lPath + ")."
            }
            elseif (!(Test-Path $rPath))
            {
                $global:errorMsg = $global:errorMsg + "`nRemote path error. (" + $rPath + ")."
            }
            else
            {
                $global:errorMsg = $global:errorMsg + "`nUnknown file error. (local - " + $lPath + " , remote - " + $rPath + ")."
            }
        }
        return $status
    }


    foreach ($str in $nameArr)
    {
        $splitStr = $str -Split "\*"
        if ($splitStr.Count -eq 2)
        {
            if ((moveFiles $splitStr[0] $splitStr[1]))
            {
                sendEmail "Script Work Error" $errorMsg
            }
        }
    }
}
Автор: Lamerok
Дата сообщения: 26.04.2013 11:07
Добрый день!

Недавно появилась такая задачка:
Сделать выборку виртуальных машин VMware по версии VMware tools,
а также отфильтровать по типу операционной системы (Windows, Linux & etc) и выложить отчет в удобочитаемом виде.
Написал не большой скрипт.
Код ниже. Добавил комментарии, чтобы было все понятно.

[more=Код скрипта]

Код:
# !!! Warning !!! To run this script you need download and install VMware Power-CLI from vmware web site
get-vm |
#
# This filter allow parameter "toolsOK", "toolsNotRunning", "toolsNotInstalled", "toolsOld"
# Unmark line bellow to run filter
#Where-Object {$_.ExtensionData.Guest.ToolsStatus -ne "toolsOK"}|
#
#This filter to sort by type of OS Family. Allow parameter "*Windows*", "*Linux*", "Other"
#Unmark line bellow to run filter
Where-Object {$_.ExtensionData.Guest.guestFamily -notlike "*Windows*" }|
#
# This filer to sort by VMWare Tools Version.
# Unmark line bellow to run filter
#Where-Object {$_.ExtensionData.config.tools.toolsVersion -eq "9216"} |
#
%{ get-view $_.ID } |
    select Name, @{ Name="hostName"; Expression={$_.guest.hostName}}, '
    @{ Name="ToolsStatus"; Expression={$_.guest.toolsstatus}}, @{ Name="ToolsVersion"; '
    Expression={$_.config.tools.toolsVersion}} |
# Export to csv-file.Open csv-file in Notepad and add first
#line "sep=," without " symbol. Just now will be open file in Microsoft Excel.
#
sort-object name | export-csv VMwareToolsReport.csv
Автор: othernight
Дата сообщения: 16.07.2013 14:25
Хм...
Автор: beastestly
Дата сообщения: 11.09.2013 18:51
Добрый вечер! Вопрос такой: мне нужно сохранить в файл страницу сайта. Можно ли сделать это средствами powershell? Заранее спасибо всем откликнувшимся.
Автор: angeltwo
Дата сообщения: 14.09.2013 21:53
beastestly
Тут есть пример, как сохранить страницу в веб-архив. Но он уж больно странный, эмулирует нажатие клавиши в диалоговом окне Сохранить как у IE. У меня этот код работает, только если в последней строке $ie.ExecWB(4,2,"page.mht",[ref]$null) цифру 2 заменить на цифру 1. В этом случае этот диалог будет отображаться на экране. А с цифрой 2 у меня по крайней мере выдает ошибку и не сохраняет. А других методов для сохранения кроме ExecWB вроде как и нет. Если нужно сохранить просто один html, то это можно через ie.Document сделать перенаправляя вывод html в одном из его свойств в файл.
Автор: DarkMasterW
Дата сообщения: 20.10.2013 01:34
Начинаю осваивать среду. Не могу найти как разложить стринг в бинарный вид. Прошу подсказать.
Спасибо.
Автор: mikel23
Дата сообщения: 31.10.2013 14:50
Добрый день.
Что то я совсем встрял.Наверное просто должно быть.
Есть папка на диске D:\folder\
В него сохраняются файлы вида
001.zip
002.zip
003.zip
и т. д.
Как можно узнать какой файл следующий.
Т.е мне нужно получить в переменную с 004. Если там 3 файла. А если нет то 001.

Спасибо!

Страницы: 1234567

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


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