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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 16 17 18 19 20

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

tcg2



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

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

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

 
Помощь по использованию консоли pwsh, а также встроенной в Windows консоли powershell.exe  

Всего записей: 7 | Зарегистр. 20-11-2006 | Отправлено: 19:06 29-11-2006 | Исправлено: YuS 2, 18:04 02-06-2020
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
Во-первых, для чего что-либо с пошем нужно делать из батника, когда его синтаксис и так самомодостаточен, во-вторых, перечитай справку к пошу (у второй версии она полностью на русском) и поймешь свои ошибки, тем более ведь сам написал
Цитата:
Вру, заэкранировать спецсимволы "можно"!

Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 15:32 14-09-2010
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ComradG
Экранировать спецсимволы на уровне оси?
Когда специальные символы встречаются в ТЕКСТЕ сценария (исходном тексте, скрипте и т.п.) и их надо экранировать - это нормально. Это везде так. Но когда символ интерпретируется как специальный в имени папки (не в сценарии!) это, по моему, не нормально. В результате невозможно обработать папку, созданную другим процессом.
 
Я так понимаю, происходит следующее. PS запрашивает, ну скажем, имя текущей папки, скорее всего вызовом функции GetCurrentDirectoryW. Далее полученное имя он зачем-то обрабатывает так, как если бы брал это имя из текста сценария как литеральную строку. В результате имя папки преобразуется в хрен знает что, PS работать с ней неможет и без всяких предупреждений устанавливает текущей папкой корень диска C:\
Как я уже писал - бред. И про экранирование символов уточнял - в кавычках (т.е. никакое это не экранирование). И запуская PS из командного файла не делаю ничего предрассудительного и запрещенного. Вполне штатный запуск консольного приложения.
 
Возможно, я что-то делаю не так. Например версия PS не та (версия файла 6.0.6002.18111). Но уже четвёртый человек посылает меня к документации, даже не попытавшись проверить
Кстати, в документации нет объяснения, почему одна команда требует экранирования символов в строковом литерале, а другая нет.

----------
Разум когда-нибудь победит

Всего записей: 3216 | Зарегистр. 09-02-2003 | Отправлено: 17:50 14-09-2010
ComradG



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

Цитата:
Но уже четвёртый человек посылает меня к документации, даже не попытавшись проверить

Инсинуации вроде этих мог бы попридержать, так как я писал о том, что было мной разобрано, а не брал с потолка чего-то там, так что давай не будем впредь пререкаться (господа модераторы, прошу прощения за ) Во-первых, с чего ты взял, что пош оперирует вызовами вроде GetCurrentDirectoryW? У тебя ILDASM в наличии имеется? Так вот глянь в нем нетфорковскую либу System.dll, особенно внимательно изучи System.IO, тогда получишь представление о потоках в .NET и о принципе работы с папками и файлами вчастности, а самое главное поймешь где собака порылась (ты ведь сам, надо думать, хочешь разобраться, так?)
А вот
Цитата:
Экранировать спецсимволы на уровне оси?
это мне не совсем понятно. Зачем?
Из батника запускать пош все же на мой взгляд - это извра, нежели необходимость. По-моему, проще написать полноценный скрипт поша и юзать его.

Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 18:14 14-09-2010
Smitis



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

Цитата:
с чего ты взял, что пош оперирует вызовами вроде GetCurrentDirectoryW

Любой дот.нет в конце концов сводится к вызовам winapi. В любом случае, будет вызвана некая функция (дот-нетовская) с аналогичным функционалом.
 
И да, я хочу разобраться.
 

Цитата:
Экранировать спецсимволы на уровне оси

Два моих примера - test2.cmd и test3.cmd
В том, который test2, PS не может вывести содержимое папки, содержащей символ [. Причём для самого PS в команде НИКАКИХ специальных символов не использовалось. Команда-то простая "powershell /c dir".
В примере test3.cmd кроме папки "[1]" создаётся вторая папка "`[1`]". Но это не папка в синтасисе PS! Это обычная папка, может быть, со странными символами, но тем не менее вполне обычная, может быть создана из проводника или тотала и т.п. и её существование никак не пересекается с папкой "[1]". Кроме PS! Потому что когда я создал папку "`[1`]" рядом с "[1]", PS вдруг начинает нормально работать и с папкой "[1]".
 
Не понимаю, почему запускать PS из CMD изврат? MS наложило табу на испольование командного процессора вместе с PS? Или тут просто религиозные (без обид) соображения? Я вначале вообще запускал скрипт PS совсем из другой программы (скрипт AutoIt). Хотел постепенно переложить весь функционал на PS. И на второй папке попался символ [ и всё запнулось. Причём для PS ни в скрипте ни в ком. строке символ [ НИГДЕ никак не фигурировал. Избавиться от символов [ в папках не могу. К тому же, ещё не проверял с другими "спецсимволами".

----------
Разум когда-нибудь победит

Всего записей: 3216 | Зарегистр. 09-02-2003 | Отправлено: 22:20 14-09-2010 | Исправлено: Smitis, 22:22 14-09-2010
ComradG



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

Цитата:
В любом случае, будет вызвана некая функция (дот-нетовская) с аналогичным функционалом.

Вот именно, ведь если бы пош обращался к WinAPI, то необходимости в установке .NET'а не было бы необходимости, хотя...

Цитата:
Не понимаю, почему запускать PS из CMD изврат?

Не изврат, а извра - две разные вещи.

Цитата:
MS наложило табу на испольование командного процессора вместе с PS?

Это вряд ли, и потом

Цитата:
Или тут просто религиозные (без обид) соображения?

религия здесь тоже не причем, просто я высказал свою точку зрения, исходя из которой я надеялся ты поймешь, что если пош предоставляет гораздо более широкие возможности, нежели cmd, то зачем напрягаться в отношении последнего? Но раз с подобными выводами ты не согласен, то давай разбираться вместе в отношении подобных галюнов поша из cmd. Итак, давай попорядку. Ты имел ввиду, что [ не воспринимается пошем? Но лично у меня запрос вроде powershell get-item [0] работает корректно.

Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 14:39 15-09-2010
ComradG



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

Код:
$strDesktopFolder = [System.Environment]::GetFolderPath("Desktop")
$objShell = New-Object -com "Wscript.Shell"
$objShortcut = $objShell.CreateShortcut($strDesktopFolder + "\MyApp.lnk")
$objShortcut.TargetPath = "C:\Program Files\MyProgram\MyApp.exe"
$objShortcut.Save()

Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 12:02 24-09-2010
Aroun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как реализовать, сабж здесь
 
И книжек на родном хотел бы почитать, в другом топике глухо как-то.

Всего записей: 680 | Зарегистр. 19-07-2005 | Отправлено: 20:12 14-10-2010
BVV63



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

Цитата:
И книжек на родном хотел бы почитать, в другом топике глухо как-то.

Введение в Windows PowerShell
Пожалуй, единственная.
 
Добавлено:
Пардон, там ссылки битые. Тогда здесь:
Введение в Windows PowerShell
Последняя ссылка (uploadbox.com) рабочая.

Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 07:49 22-10-2010
Vital283



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот еще одна рабочая ссылка
(под ковриком)
 

Всего записей: 149 | Зарегистр. 21-05-2007 | Отправлено: 12:32 01-11-2010
MedvedevDM



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

Цитата:
Подскажите как реализовать, сабж здесь

 
Делать было нечего и написал тут скриптик как пример работы с файлами:
Dest1 И Dest2 это корни папок, которые нужно сравнивать. Суть алгоритма. Берется рекурсивно все файлы из Папки1 и смотрится если такой файл в папке2. Если нету, то копируется, если есть, то проверятся есть ли модификации между  файлами в Папке1 и папке2.
 
Второй цикл проверяет папку2. Берет рекурсивно все файлы, потом смотрит, есть ли такой файл в папке1 , если нету, то удаляет из папки2.
 
CLS
#задаем локации
$Dest1 = "D:\temp\Folder 1"
$Dest2 = "D:\temp\Folder 2"
 
#Проверяем  папку 1 на  присутствие файлов
Write-Host "!!!!____!!!!   Приступаем к проверке папки 1"
ForEach ($File in (Get-ChildItem $Dest1 -Recurse))
    {
     Write-host "Обрабатываю" $File.fullname $File.LastWriteTime  
     
     #Задаем переменную с путем из второй папки.
     $Dest1ToDest2= $File.FullName.Replace($Dest1, $Dest2)  
     
     
     #Проверяем существуюет ли файл во второй папке, который существует в папке 1
     if ((Test-Path -path $Dest1ToDest2) -ne $True)
        {
            #Если файл не существует, то скопируем его из папки1 в папку2
            Write-host "_______________Файла в Папке 2 не существует. Нужно скопировать из Папки 1"
            Copy-Item $File.FullName $Dest1ToDest2 -Force
        }
        Else  
            {
                #Файл существует. Значит будем проверять даты.
                if ((Dir $File.FullName).LastWriteTime -gt (Dir $Dest1ToDest2).LastWriteTime)
                    {
                        #Файл существует, и в папке 1 изменения сделаны позже, чем в  Папке 2
                        Write-Host "_______________Файл в папке 1 новее, чем в папке 2. Нужно скопировать"
                        Copy-Item $File.FullName $Dest1ToDest2 -Force
                    }  
                 Else  
                    {
                        Write-Host "_______________Файлы одинаковые. Обновление не требуется"
                    }      
            }
    }  
 
Write-Host "!!!!____!!!!   Приступаем к проверке папки 2"
#Проверяем  папку 1 на  присутствие файлов
ForEach ($File in (Get-ChildItem $Dest2 -Recurse))  
    {
         
        Write-host "Обрабатываю" $File.fullname $File.LastWriteTime  
         
        #Получаем  ссылку на аналогичный файл в  Папке1
        $Dest2ToDest1= $File.FullName.Replace($Dest2, $Dest1)
         
        #Проверяем существуюет ли файл в первой папке
        if ((Test-Path -path $Dest2ToDest1) -ne $True)
            {
                Write-Host "_______________Файл не существует в Папке1. Нужно удалить из папки 2"
                #Если файл не существует, то скопируем его из папки1 в папку2
                Remove-Item $File.FullName -Force
            }
          else
            {
                Write-Host "_______________Файл существует в Папке1."
            }      
         
    }  

Всего записей: 114 | Зарегистр. 03-11-2010 | Отправлено: 19:30 04-11-2010
01MDM



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

Код:
 
$dest1 = gci -recurse C:\Temp\Folder1
$dest2 = gci -recurse C:\Temp\Folder2
 
diff $dest1 $dest2 | % { $_.InputObject.fullname }
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:39 05-11-2010
BVV63



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, как из скрипта узнать его местонахождение? Что-нить аналогичное %~DP0 в батнике.

Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 11:45 11-11-2010
01MDM



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

Цитата:
Подскажите, пожалуйста, как из скрипта узнать его местонахождение?

Директорию скрипта:

Код:
 
(Get-Item $MyInvocation.MyCommand.Definition).DirectoryName
 

Сам скрипт:

Код:
 
$MyInvocation.MyCommand.Definition
 

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



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
День добрый.  
Помогите разобрать Сценарий в PowerShell.  
get-QADObject -SearchRoot "tb.local/NSK/Disabled User Accounts" -SizeLimit 0 -Type User| Where-Object {$_.Email -like '*@*' }  
| where-object {-(new-timespan -end ($_.whenchanged)).days -gt 31} |  
ForEach-Object {Disable-MailBox  $_.Email -Confirm:$False; Disable-MailUser  $_.Email -Confirm:$False ;Set-QADUser $_.DN -Email ''}  
 
Вот например командер Where-Object берёт свойства объекта {$_.Email -like '*@*' } вот -like '*@*' что такое?

Всего записей: 12 | Зарегистр. 08-11-2010 | Отправлено: 09:49 13-11-2010
01MDM



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

Цитата:
-like '*@*' что такое?

Это маска, по которой ищут нужные вхождения.
 
PS. Поскольку очень далек от администрирования отличного от localhost, то подозреваю, что скрипт ищет "мертвые души" по наличию/отсутствию eMail'а.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:23 13-11-2010 | Исправлено: 01MDM, 17:28 13-11-2010
FlaMeKoda



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может быть у кого стоит оснастка для работы с exchange вытащите Help в фаил из неё.

Всего записей: 12 | Зарегистр. 08-11-2010 | Отправлено: 08:35 15-11-2010
BVV63



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FlaMeKoda
Не понял... Help-файл нужен? Оснасткой пользуюсь. А от какой версии нужно-то? Или без разницы?

Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:36 15-11-2010
FlaMeKoda



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос про хелп снят. Нашёл таки под 32х битную систему дистриб. Возьму там.  

Всего записей: 12 | Зарегистр. 08-11-2010 | Отправлено: 10:25 15-11-2010
FlaMeKoda



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кому пригодиться  
 
get-QADObject -SearchRoot "tb.local/NSK/Disabled User Accounts" -SizeLimit 0 -Type User
# В tb.local/NSK/Disabled User Accounts ищем юзеров (для получения полного списка прописываем лимит 0, по умолчанию 1000)
Where-Object {$_.Email -like '*@*' }
# Из полученных объектов берём объекты по атрибуту Email не понял что делает оператор -like. Догадываюсь что  ищет включение, в данном случае ищет собаку в поле адреса
where-object {-(new-timespan -end ($_.whenchanged)).days -gt 31}
# Выбираем обекты по атрибуту whenchanged старше 31 дня
ForEach-Object {Disable-MailBox  $_.Email -Confirm:$False; Disable-MailUser  $_.Email -Confirm:$False ;Set-QADUser $_.DN -Email ''}
# Передаём данные после всех сортировок в командлер ForEach который дёргае каждый обект по отдельности и применяет к нему  
# 1- отвязывает у.з. в AD от почтового ящика на Эксченже 2 - Запрещает юзеру пользоваь емаил.
 

Всего записей: 12 | Зарегистр. 08-11-2010 | Отправлено: 10:42 16-11-2010
Suprus



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
Подскажите как реализовать, сортировку файлов по папкам (по ВРЕМЕНИ создания, не по дате, т.е чтобы скрипт создавал новые папки по формату ЧЧ-ММ и туда сортировал файлы).
 
Спасибо!

Всего записей: 41 | Зарегистр. 03-09-2007 | Отправлено: 09:50 18-11-2010
Открыть новую тему     Написать ответ в эту тему

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

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru