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

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

Модерирует : KLASS, IFkO

KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

   

Uriu

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

PowerShell 1.0 -  На текущий момент совершенно неактуальная версия, интересная только для истории. /Прямые ссылки/
PowerShell 2.0 и WinRM 2.0 - Последняя версия, работающая на Windows XP и Windows 2003 (Ещё) /Прямые ссылки/
PowerShell 3.0 (Windows Management Framework 3.0)
PowerShell 4.0 (Windows Management Framework 4.0)
PowerShell 5.0 (Windows Management Framework 5.0)
PowerShell 5.1 (Windows Management Framework 5.1)
PowerShell Core 6.0 (не заменяет PowerShell 5.1)



Ассоциация

Что бы ассоциировать скрипты с PowerShell, аналогично выполнению .bat/.cmd-файлов
нужно в командной строке набрать следующую команду(ы)
Версии 1.0-5.1 для 32-битных ОС: ftype microsoft.powershellscript.1=%windir%\system32\windowspowershell\v1.0\powershell.exe -file "%1"  
%*
 
Версии 1.0-5.1 для 32-битных ОС: ftype microsoft.powershellscript.1=%windir%\sysWOW64\windowspowershell\v1.0\powershell.exe -file "%1"  
%*
 
Версия 6.0 дя 32-битной ОС: ftype microsoft.powershellscript.1="C:\Program Files (86)\PowerShell\6.0.0\pwsh.exe"  -file "%1" %*
Версия 6.0 дя 64-битной ОС: ftype microsoft.powershellscript.1="C:\Program Files\PowerShell\6.0.0\pwsh.exe"  -file "%1" %*



вопрос о подписи скриптов

Что бы PowerShell не задавал вопрос о том, что скрипты не подписаны, ввести в нем команду
set-executionpolicy unrestricted
или в командной строке
powershell Set-ExecutionPolicy Unrestricted -force
(для этих 2-х действий требуются административные права)



Прочее


  • Если используете "белый список" в брандмауэре Windows, то для работы сценариев в сети необходимо создать 2 исходящих правила для svchost.exe и PowerShell.exe.
  • В отличие от батников кодировка скриптов на PowerShell должна быть 1251 (ANSI)




Расширение возможностей PowerShell
Функции
* Write-Color
* PowerTab --- Расширение функций клавиши Tab
Провайдеры
Готовые скрипты
* Ошибки и предупреждения в журнале событий по электронной почте (в4.0)
 


Работа со сценариями в Windows PowerShell
Раздел в MSDN
Краткие справочники по Windows PowerShell 3.0 (english)
Windows PowerShell Франк Кох (БЕРН)  Разработчик и пропагандист платформы. На русском языке в формате pdf и doc

Всего записей: 340 | Зарегистр. 25-11-2004 | Отправлено: 07:13 23-03-2006 | Исправлено: KapralBel, 09:31 29-01-2018
Drunken Master

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Joolz
не пойму вопроса. Как это использовать написано в статейке. Я дал ссылку на документацию по интерфейсам GPMC, где расписаны все их методы. Там в комментах, кстати, есть примеры для PowerShell. Вот ещё статейка: Упрощенное администрирование групповой политики в Windows PowerShell. Туча примеров, правда на VBScript.
А вот PowerShell Cmdlets for Group Policy.
 
 
Добавлено:
Joolz

Цитата:
 зачем нужен PowerGUI?

 
ну…, к примеру, как сделать "Просмотр статистики ипользвания принтеров" в PowerGUI. Правой кнопкой по дереву слева - Создать - Скриптовый узел. В появившемся окне вводим имя узла и код:

Код:
GWmi -computername server -query "SELECT User, TimeGenerated, InsertionStrings From Win32_NtLogEvent WHERE LogFile='System' AND EventCode='10'" |  
select User,
@{Name="Time"; Expression={([System.Management.ManagementDateTimeConverter]::ToDateTime($_.TimeGenerated))}},
@{Name="DocNo"; Expression={$_.InsertionStrings[0]}},
@{Name="DocName"; Expression={$_.InsertionStrings[1]}},
@{Name="Printer"; Expression={$_.InsertionStrings[3]}},
@{Name="Port"; Expression={$_.InsertionStrings[4]}},
@{Name="Size"; Expression={$_.InsertionStrings[5]}},
@{Name="Pages"; Expression={$_.InsertionStrings[6]}}

Жмём ОК. Получаем полную таблицу всех результатов. Видимые колонки можно выбрать. Ну и получаем графический интерфейс для фильтрации
Можно генерируровать дочерние узлы в коде, см. стандартный Drives.

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 12:31 29-09-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drunken Master
Понял, что контролировать что переменная не пустая с помощью ($var.count -gt 0) низя. Если в переменной одна строчка, то результата я не получаю. Пока испоьзую ((get-variable $var).value -ne null), но это тоже как-то неправильно.
 
Посмотрел примеры на technet - как-то это уже мало похоже на PoSH.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 14:29 29-09-2008
Drunken Master

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Joolz
может я сегодня туплю, но я снова не понял вопроса
существование переменной: Test-Path Variable:\var
на null: $var -ne $null
числа на ноль: $var -ne 0
строки на пустоту: $str -ne "" или $str.Length > 0
массивы на пустоту: $arr.Length > 0 или $arr.Count > 0

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 16:49 29-09-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drunken Master
Скорее я невнятно объясняю.
На примере того же event.log'а.
Если переменная $event=gwmi Win32_NtLogEvent в результате выполнения получает 2 и более строчки из event.log'а, то $event.count можно сравнивать с численным значением, а если мы получаем одну строчку из event.log'а, то получаем что $event.count равен $null.
 
Кажется понял надо указывать [array]$event, иначе однострочным переменным по-умолчанию присваивается [string].

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 16:59 29-09-2008 | Исправлено: Joolz, 17:08 29-09-2008
Drunken Master

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Joolz
Да, если возвращается одно значение, то массив для него не создаётся. В конвейере это без разницы. А при сохранении в переменной важно. Вариантов, как положено, много:

Код:
[object[]]$element = …
$element = [object[]] (…) # ага , приводим к нужному типу
$element = @(…) # тоже принудительно создаем массив
$element = @() ; $element += …  # создаем пустой массив и заполняем его

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 17:36 29-09-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще задачка.
Используем redirection folder'ы (RF) для рабочего стола и документов пользователей, соответственно, при увольнении человека его RF остается на сервере и занимает место. Хочу сделать скрипт, который:
1) мог бы просканировать GPO и найти по ключевому слову Redirect (их несколько) нужные политики.
СДЕЛАЛ.
2) Извлечь из найденых политик пути где лежат RF
\\serv1\redirect
\\serv2\redirect01
\\serv2\redirect02
Сделал
3) Просканировать полученные пути и узнать владельцев папок.
\\serv2\redirect01\user12 - user12
\\serv2\redirect01\user34 - user34
\\serv2\redirect01\user38 - user38
Сделал
4) Проверить существование этих пользователей в AD, если существуют, проверить не отключены ли они, если не отключены - проверить lastlogon. Если пользователя нет, он отключен или lastlogon больше года, то создаем список пользователь - папка.
Сделал
Удалять все-таки буду вручную.
 
Пока застыл на получении путей.
Делал как здесь.

Код:
 
$gpm = New-Object -ComObject GPMgmt.GPM
$gpmConstants = $gpm.GetConstants()
$gpmDomain =$gpm.GetDomain("domain.rul", "", $gpmConstants.UseAnyDC)
$gpmAllGpos = $gpmDomain.SearchGPOs($gpmSearchCriteria)
foreach ($gpmGpo in $gpmAllGpos) {if ($gpmGpo.DisplayName -like '*Redirect *') {$gpmGpo.GenerateReport(0
).result}}
 

Получаю HTML-"пеленки", из которых надо как-то извлечь инфу.
Пока ни с replace ни с select-string ничего не выходит.
Я так понял, что для GenerateReport можно указать другой GPMReportType, но что это за типы ХЗ.
 
З.Ы. В результате сделал все в обратном порядке:
1) Сканировал папки (т.к. потитик, отвечающих за RF оказалось всего 4)
2) Узнавал их владельцев
3) Проверял наличие этих владельцев в AD, и их статус.
4) Скидывал всех отсутствующих в AD и заDisabled'ных в табличку.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 14:12 01-10-2008 | Исправлено: Joolz, 12:19 06-10-2008
Drunken Master

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

Цитата:
для GenerateReport можно указать другой GPMReportType, но что это за типы

 
$gpmConstants.ReportHTML (равная 1)
$gpmConstants.ReportXML (равная 0)
 
Собственно $gpmGpo.GenerateReport(0).result - это XML.
Делаем:

Код:
$x = [xml]$gpmGpo.GenerateReport(0).Result
$x.GPO | gm # покажет всё, что там есть


Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 17:21 01-10-2008
sghpunk

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте! )
 
Поиском вроде похожих тем не нашел.
Есть задача скопировать рекурсивно файлы из одного каталога в другой с датой не позже 01-01-2007 и скопировать права доступа, но скопировать права доступа нужно не просто, а удалив из них права записи и оставив только на чтение. Выбрал для этой задачи ПаверШелл, получился такой скрипт:

Код:
 
#Исключения
#$ex_files = "*.cmd,*.bat,*.txt"
#Размер
$size = 0
#Кол-во
$count = 0
 
# каталог, откуда копируем
#$InitialFolder = "d:\vol1\DISK_N\M_INF"
$InitialFolder = "d:\temp"
#$InitialFolder = "c:\WINDOWS"
# каталог, куда копируем
$TargetFolder = "d:\xxx"
#$TargetFolder = "o:\disk_n"
# контрольная дата (копируем файлы с датой создания раньше этой)
$ControlDate = "2007-01-01"
 
#Подключим сетевой диск
net use o: /delete /yes
net use o: \\io\old_fs
 
#Поставим на папку все родительские нследуемые права
$ACL = Get-Acl -Path $InitialFolder
$If = Get-Item -Path $InitialFolder
#Перебираем и явно указываем все наследуемые права, иначе не применятся
$ACR = $ACL.GetAccessRules($True, $True, [System.Security.Principal.NTAccount])
$ACL = New-Object System.Security.AccessControl.DirectorySecurity
for ($i = 0 ; $i -lt $ACR.Count ; $i++ ) {
    if (($ACR[$i].IdentityReference.ToString() -ne "BUILTIN\Администраторы") -and ($ACR[$i].IdentityReference.ToString() -ne "NT AUTHORITY\SYSTEM"))
    {
        $rule=new-object System.Security.AccessControl.FileSystemAccessRule($ACR[$i].IdentityReference.ToString(),"ReadAndExecute","Allow")
    } else {
        $rule = $ACR[$i]
    }
    $ACL.AddAccessRule($rule)
}
 
#Сменим владельца в применяемых правах иначе права не применяются
$no = New-Object System.Security.Principal.NTAccount("Администраторы")
$ACL.SetOwner($no)
Set-Acl $TargetFolder $ACL
#exit
#while ($If.FullName -ne $If.Root.FullName) {
#    $ACLP = Get-Acl -Path $If.Parent.FullName
#    $If = Get-Item -Path $If.Parent.FullName
#}
 
Get-ChildItem -Force -path $InitialFolder -recurse -Exclude $ex_files | Where-Object -FilterScript {($_.LastWriteTime -lt $ControlDate)} | ForEach-Object -Process {
    $Tpath = $_.DirectoryName.Remove(0,$InitialFolder.Length)
    #Проверим существование пути, если нет, то создадим
    if (!(Test-Path -Path $TargetFolder$Tpath)) {
        New-Item -Path $TargetFolder$Tpath -ItemType directory -ErrorAction SilentlyContinue
        #Если папка создалась, то ставим на неё права
        if ($?) {
            $ACL = Get-Acl -Path $_.DirectoryName
            #Перебираем и явно указываем все наследуемые права, иначе не применятся
            $ACR = $ACL.GetAccessRules($True, $True, [System.Security.Principal.NTAccount])
            for ($i = 0 ; $i -lt $ACR.Count ; $i++ ) {
                if (($ACR[$i].IdentityReference.ToString() -ne "BUILTIN\Администраторы") -and ($ACR[$i].IdentityReference.ToString() -ne "NT AUTHORITY\SYSTEM"))
                {
                    $rule=new-object System.Security.AccessControl.FileSystemAccessRule($ACR[$i].IdentityReference.ToString(),"ReadAndExecute","Allow")
                } else {
                    $rule = $ACR[$i]
                }
                $ACL.AddAccessRule($rule)
            }
            #Сменим владельца в применяемых правах иначе права не применяются
            $ACL.SetOwner($no)
            Set-Acl $TargetFolder$Tpath $ACL
        } else {
            echo $Error[0] > Copy_err.log
        }
    }
    $Name = $_.Name
    Copy-Item $_.FullName -Force -Destination $TargetFolder$Tpath\$Name
    #Если файл скопировался, то ставим на него права
    if ($?) {
        $ACL = Get-Acl -Path $_.FullName
        #Перебираем и явно указываем все наследуемые права, иначе не применятся
        $ACR = $ACL.GetAccessRules($True, $True, [System.Security.Principal.NTAccount])
        for ($i = 0 ; $i -lt $ACR.Count ; $i++ ) {
            if (($ACR[$i].IdentityReference.ToString() -ne "BUILTIN\Администраторы") -and ($ACR[$i].IdentityReference.ToString() -ne "NT AUTHORITY\SYSTEM"))
            {
                $rule=new-object System.Security.AccessControl.FileSystemAccessRule($ACR[$i].IdentityReference.ToString(),"ReadAndExecute","Allow")
            } else {
                $rule = $ACR[$i]
            }
            $ACL.AddAccessRule($rule)
        }
        #Сменим владельца в применяемых правах иначе права не применяются
        $ACL.SetOwner($no)
        Set-Acl $TargetFolder$Tpath\$Name $ACL
    } else {
        echo $Error[0] > Copy_err.log
    }
     
}
 

Вопрос в чём, я когда копирую права, то приходится копировать права на каждый файл и задавть их явно, хотя в источнике они все наследуются от директорий, как это сделать красивее? да и вобще, кажется я там много вещей делаю не через то место ... Вот исключения тоже не срабатывают...
Спасибо )

Всего записей: 1 | Зарегистр. 13-08-2007 | Отправлено: 13:39 03-10-2008
Drunken_Master

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sghpunk
Для работы с путями удобно использовать класс [System.IO.Path]

Код:
> [System.IO.Path] | gm -static  # выводит список методов класса
> [System.IO.Path]::Combine("e:\dir", "file.txt")
e:\dir\file.txt
> [System.IO.Path]::GetDirectoryName("e:\dir\file.txt")
e:\dir
> [System.IO.Path]::GetFileName("e:\dir\file.txt")
file.txt


Цитата:
$ControlDate = "2007-01-01"

$_.LastWriteTime -lt $ControlDate

$ControlDate это строка, а $_.LastWriteTime - объект [DateTime]. Поэтому сравнение и не работает.

Код:
$ControlDate = [DateTime]"2007-01-01"


Цитата:
когда копирую права, то приходится копировать права на каждый файл

А если сделать правила наследуемыми?

Код:
$rule = new-object System.Security.AccessControl.FileSystemAccessRule($ACR[$i].IdentityReference.ToString(), "ReadAndExecute", "ContainerInherit, ObjectInherit", "InheritOnly", "Allow")

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 21:01 04-10-2008
nepost

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Перестал работать батник по запуску скрипта на PS
Батник запускается планировщиком и обновляет адресные листы эксчанги:
----------------- updaddlist.bat ----------------------
 
C:\WINDOWS\system32\WindowsPowerShell\v1.0\PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1" -command ". 'D:\scripts\updaddlist.ps1'"
 
Сам скрипт PS:
------------------ updaddlist.ps1 ---------------------
 
update-addresslist -identity 'Адрес-лист1'
get-addresslist | where-object {$_.container -gt '\'} | update-addresslist
---------------------------------------------------------
 
Недавно заметил, что скрипт перестал работать, выдает сообщение:
WARNING: The following errors occurred when loading console C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1: Cannot load Windows PowerShell snap-in Microsoft.Exchange.Management.PowerShell.Admin because of the following error:
No Windows PowerShell Snap-ins are available for version 1.
Command ". 'D:\scripts\updaddlist.ps1'" could not be executed because some Windows PowerShell snap-ins did not load.
 
При попытке запускать скрипт из bat-файла строкой:
D:\scripts\updaddlist.ps1
 
получаем ошибку:
File D:\scripts\updaddlist.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.
At line:1 char:2
+ &' <<<< D:\scripts\updaddlist.ps1'
 
Проверил безопасность:  
[PS] C:\>Get-ExecutionPolicy
Unrestricted
 
При попытке запустить дабл-кликом мышки (ассоциации с файлом настроены) мигает окошко и сразу закрывается. Не видать, чего он там пишет.  
При запуске из командной строки Exchange скрипт работает нормально.  
 
Помогите разобраться, куда рыть (нюхом чую, что дело именно в привязке PS к Винде (ибо через эксчанговую консоль скрипт ps1 запускается и нормально работает)

Всего записей: 10 | Зарегистр. 04-12-2007 | Отправлено: 12:45 07-10-2008
Drunken_Master

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nepost
Могу предположить, что вручную вы запускаете 64-битную версию PowerShell, и всё работает, а по ассоциации запускается 32-битная, в которой запрещено выполнение скриптов и нет нужных Snap-ins.

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 19:54 07-10-2008
nepost

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drunken_Master
Не согласен, ибо  
C:\WINDOWS\system32\WindowsPowerShell\v1.0\PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1" -command ". 'D:\scripts\updaddlist.ps1'"
явно указывает на 32-битный PS
Однако на всякий случай запустил 64-битный, подправил безопасность на unrestricted... не помогло...  
Потом по некоторым причинам ребутнули сервак, после ребута всё заработало
Однако при запуске bat-файла из FAR - та же ошибка. При запуске из CMD или из проводника - всё работает.

Всего записей: 10 | Зарегистр. 04-12-2007 | Отправлено: 14:40 08-10-2008
Drunken Master

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nepost
C:\WINDOWS\system32\WindowsPowerShell\v1.0\PowerShell.exe указывает на 64-битный (32-х лежит в SysWow64, именно так), но указывает не явно. Для каталога system32 работает перенаправление. Поэтому, когда вызывается C:\WINDOWS\system32\WindowsPowerShell\v1.0\PowerShell.exe, будет запущен PS той же разрядности, что и вызывающий процесс. Проводник 64-битный, CMD (при вызове через Win+R) тоже. А вот FAR, похоже, у вас 32-битный (а есть же и 64). Exchange консоль, по-видимому, работает только в 64-битном окружении.
Разрядность процесса легко проверить в диспетчере задач.

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 16:18 08-10-2008
TCPIP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа, кто работал с веб с помощью PoSH? Интересует возможность автоматизации вызовов команд в веб-интерфейсе. Желательно с доступо через HTTPS. Как бы это лучше сделать?
Для начала, тупо сэмулировать щелчок кнопки на asp-странице.
Посоветуйте пожалуйста что-нибудь.
Ну, что-то вроде того, что написано в этой замечательной статье по тестированию WebUI на PoSH. Только мне не тестировать нужно, а просто автоматизировать работу с элментами управления на веб-интерфейсе.
Вот еще просто потрясающий мини-фреймворк от автора командлета Get-Web.
Как мою задачу правильно выполнить? (просто не хочется изобретать велосипед...)
 
Кстати, не так давно, появилась отдельная ветка по программированию на PoSH.
Как вы насчет того, чтобы с листингами там разбираться?
 
Drunken Master

Цитата:
Exchange консоль, по-видимому, работает только в 64-битном окружении.

Возможно, можно поставить 32-bit Management Tools, тогда SystemRedirection в WOW64 не будет включаться.

Всего записей: 4667 | Зарегистр. 31-01-2003 | Отправлено: 03:48 14-12-2008 | Исправлено: TCPIP, 04:05 14-12-2008
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
имеется Windows 2003 64bit Russian
 
Что надо что бы на него поставить ПШ?
 
32-битная русская ругается - о битах
64-битная (мульти/англ/локал - все равно один и тот же англ.файл) - ругается на язык

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 16:06 24-12-2008
veryom



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

Цитата:
Вопрос в чём, я когда копирую права, то приходится копировать права на каждый файл и задавть их явно, хотя в источнике они все наследуются от директорий, как это сделать красивее?

А если сделать так:

Код:
$AccountBase = @("BUILTIN\Администраторы", "BUILTIN\SYSTEM")
 
dir С:\Source -Recurse | where {$_.PSIsContainer} | foreach {
    $target=($_.FullName).Replace("C:\Source", "D:\Destination")
    $aclTar=Get-Acl $_.FullName
    $aclTar.Access | foreach {
        $Account = $_.IdentityReference.ToString()
        $Propagation = $_.PropagationFlags
        $Inheritance = $_.InheritanceFlags
        if ($AccountBase -notcontains $Account) {
            $AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule($Account, "ReadAndExecute", $Inheritance, $Propagation, "Allow")
            $aclTar.SetAccessRule($AccessRule)
            $AccountBase = $AccountBase + $Account
        }
    }
    Set-Acl $target $aclTar
}

 
Скрипт выполняем после копирования нужных папок из С:\Source в D:\Destination и чистки от старых файлов.

Всего записей: 1242 | Зарегистр. 24-03-2006 | Отправлено: 19:47 14-02-2009
klimusu



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как корректно удалить powershell 1.0
хочу поставить Windows PowerShell V2 (CTP3)

Всего записей: 931 | Зарегистр. 23-01-2006 | Отправлено: 13:20 24-03-2009
Drunken Master

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
klimusu
В Висте: Панель управления - программы - удаление программы - просмотр установленных обновлений - Windows PowerShell(TM) 1.0 (KB928439).
В XP/2003: в списке "Установки и удаления программ" нужно поставить флажок "Показывать обновления", после этого он будет в группе обновлений как Hotfix KB926139 (английский) или KB926140 (локализованный).

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 13:37 24-03-2009 | Исправлено: Drunken Master, 13:39 24-03-2009
klimusu



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drunken Master
да спасибо, меня интересовала виста.. работает.
 
Добавлено:
Подскажите как в переменную засунуть содержимое текстового файла (несколько строк)

Всего записей: 931 | Зарегистр. 23-01-2006 | Отправлено: 13:50 24-03-2009
Drunken Master

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

Код:
$txt = Get-Content report.txt

 
В одну строку:

Код:
$txt2 = [string]::join("`r`n", (get-content report.txt))

 
Вариант, в одну строку:

Код:
$txt3 = [system.io.file]::readalltext("report.txt")

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 10:05 25-03-2009 | Исправлено: Drunken Master, 10:13 25-03-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell
KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru