Записываю сюда заметки для себя. Возможно кому-то будет полезно.
пятница, 29 ноября 2019 г.
PowerShell через прокси
Если доступ в Интернет осуществляется через прокси сервер, по-умолчанию в PowerShell не получится обратиться к внешней веб-странице (командлет Invoke-WebRequest), обновить справку с помощью Update-Help.
- Update-Help
- netsh winhttp show proxy
- netsh winhttp import proxy source=ie
- netsh winhttp set proxy «192.168.0.1:3128»
$Wcl = new-object System.Net.WebClient
$Wcl.Headers.Add(“user-agent”, “PowerShell Script”)
$Wcl.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
Если же нужно вручную аутентифицироваться на прокси-сервере, выполните следующие команды, указав имя и пароль пользователя в соответствующем окне.
Источник: zametki-sysadmina.blogspot.com
POWERSHELL — НАСТРОЙКА УДАЛЕННОГО УПРАВЛЕНИЯ
Powershell: удаленная установка exe
У меня проблемы с моим скриптом, который предназначен для удаленной установки исполняемого файла. Все предварительные действия моего сценария работают просто отлично. Я извлекаю имена хостов около десятка компьютеров из текстового файла. Я использую PSExec для включения-PSRemoting. Затем установщик копируется во временный каталог на удаленном компьютере.
Все отлично работает, кроме важной части. Я просто не могу заставить его установить.
Я пробовал следующее:
Invoke-Command -ComputerName remoteComp -ScriptBlock -ArgumentList /SILENT Invoke-Command -ComputerName remoteComp
Я пытался использовать New-PSSession так:
$s = New-PSSession -ComputerName remoteComp Invoke-Command -Session $s -ScriptBlock -ArgumentList /SILENT
Никто не посылает никаких ошибок, они просто ничего не делают. Команды, которые имеют -Wait просто навсегда зависают. Если я ставлю -Sleep, он просто ждет запрошенные секунды, а затем завершает работу, ничего не делая. Я не знаю, имеет ли это значение, но когда я запускаю исполняемый файл на локальном компьютере с параметром / SILENT, он не запрашивает никаких запросов, но открывает окно проводника.
Я пытался использовать PSExec.exe, но я получаю аналогичный результат. Просто навсегда висит безо всякой ошибки. Заранее благодарю за любую помощь!
Источник: question-it.com
Установка программного обеспечения
Чтобы построить список приложений, установленных на локальной или удаленной системе при помощи установщика Windows, можно использовать несложный запрос WMI:
PS> Get-WmiObject -Class Win32_Product -ComputerName . IdentifyingNumber : Name : Microsoft .NET Framework 2.0 Vendor : Microsoft Corporation Version : 2.0.50727 Caption : Microsoft .NET Framework 2.0
Чтобы вывести на экран все свойства объекта Win32_Product, используйте параметр Properties командлетов форматирования, например командлета Format-List, со значением * (все).
Как установить приложения с помощью Powershell
PS> Get-WmiObject -Class Win32_Product -ComputerName . | Where-Object -FilterScript | Format-List -Property * Name : Microsoft .NET Framework 2.0 Version : 2.0.50727 InstallState : 5 Caption : Microsoft .NET Framework 2.0 Description : Microsoft .NET Framework 2.0 IdentifyingNumber : InstallDate : 20060506 InstallDate2 : 20060506000000.000000-000 InstallLocation : PackageCache : C:WINDOWSInstaller619ab2.msi SKUNumber : Vendor : Microsoft Corporation
Чтобы выбрать только Microsoft .NET Framework 2.0, можно также воспользоваться параметром Get-WmiObject Filter. В этой команде использован фильтр WMI, который следует не синтаксису фильтров Windows PowerShell, а синтаксису языка WQL. Вместо этого введите:
Get-WmiObject -Class Win32_Product -ComputerName . -Filter «Name=’Microsoft .NET Framework 2.0′»| Format-List -Property *
Запросы WQL часто содержат знаки (например, пробелы и знаки равенства), которые имеют в Windows PowerShell специальное значение. Поэтому рекомендуется всегда заключать значение параметра Filter в кавычки. Может быть использован и управляющий знак Windows PowerShell гравис (`), однако при этом чтение команды становится менее удобным. Следующая команда эквивалентна предыдущей, она возвращает тот же результат, однако вместо заключения всей строки фильтра в кавычки в ней применен специальный управляющий символ гравис.
Get-WmiObject -Class Win32_Product -ComputerName . -Filter Name`=`’Microsoft` .NET` Framework` 2.0`’ | Format-List -Property *
Чтобы вывести только желаемые свойства, используйте параметр Property командлетов форматирования для перечисления этих свойств.
Get-WmiObject -Class Win32_Product -ComputerName . | Format-List -Property Name,InstallDate,InstallLocation,PackageCache,Vendor,Version,IdentifyingNumber . Name : HighMAT Extension to Microsoft Windows XP CD Writing Wizard InstallDate : 20051022 InstallLocation : C:Program FilesHighMAT CD Writing Wizard PackageCache : C:WINDOWSInstaller113b54.msi Vendor : Microsoft Corporation Version : 1.1.1905.1 IdentifyingNumber : .
Наконец, если необходимо определить только имена установленных приложений, сократить вывод позволит следующая простая инструкция Format-Wide:
Get-WmiObject -Class Win32_Product -ComputerName . | Format-Wide -Column 1
Итак, существует несколько способов получения сведений о приложениях, установленных при помощи установщика Windows, однако остальные приложения пока не рассмотрены. Поскольку большинство стандартных приложений регистрирует программу удаления в Windows, их можно найти локально путем поиска программ удаления в реестре Windows.
Получение списка приложений, поддерживающих удаление
Не существует гарантированного способа нахождения всех приложений, установленных в системе, однако можно найти все программы, отображаемые в диалоговом окне «Установка и удаление программ». Диалоговое окно «Установка и удаление программ» находит эти приложения в следующем разделе реестра: HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionUninstall. Этот раздел также можно проверить, чтобы найти приложения. Просмотр раздела Uninstall можно упростить, отобразив соответствующее положение в реестре на диск Windows PowerShell:
PS> Name Provider Root CurrentLocation —- ——— —- ————— Uninstall Registry HKEY_LOCAL_MACHINESOFTWAREMicr.
| Примечание. |
| Диск HKLM: отображает корневой раздел HKEY_LOCAL_MACHINE, поэтому он и был использован в пути к разделу Uninstall. Вместо HKLM: можно указать путь к разделу реестра, используя разделы HKLM или HKEY_LOCAL_MACHINE. Использование существующего диска реестра удобнее, так как вместо ввода имен разделов вручную позволяет воспользоваться функцией автозавершения по нажатию клавиши TAB. |
Созданный диск с именем «Uninstall» делает поиск установленных приложений быстрым и удобным. Число установленных приложений можно определить, подсчитав количество разделов реестра на диске Uninstall: в Windows PowerShell:
PS> (Get-ChildItem -Path Uninstall:).Count 459
Дальнейший поиск в полученном списке приложений осуществляется разнообразными методами, начиная с использования командлета Get-ChildItem. Для получения списка приложений и их сохранения в переменной $UninstallableApplications используйте следующую команду:
$UninstallableApplications = Get-ChildItem -Path Uninstall:
| Примечание. |
| Длинное имя переменной использовано здесь лишь для улучшения восприятия. На практике использование длинных имен не имеет особого смысла. Для имен переменных поддерживается автозавершение по нажатию клавиши TAB, но использование имен длиной в 1 — 2 знака позволяет ускорить ввод команд. Более длинные описательные имена наиболее полезны при разработке кода для повторного использования. |
Для вывода значений записей реестра во вложенных разделах реестра раздела реестра Uninstall используйте метод GetValue для разделов реестра. Значение метода является именем записи в реестре. Например, чтобы определить отображаемые имена приложений из раздела Uninstall, используйте следующую команду:
PS> Get-ChildItem -Path Uninstall: | ForEach-Object -Process
Уникальность этих значений не гарантирована. В следующем примере два установленных элемента отображаются как «Windows Media Encoder 9 Series»:
PS> Get-ChildItem -Path Uninstall: | Where-Object -FilterScript < $_.GetValue(«DisplayName») -eq «Windows Media Encoder 9 Series»>Hive: Microsoft.PowerShell.CoreRegistry::HKEY_LOCAL_MACHINESOFTWAREMicros oftWindowsCurrentVersionUninstall SKC VC Name Property — — —- ——— 0 3 Windows Media Encoder 9
Установка приложений
Класс Win32_Product можно использовать для удаленной или локальной установки пакетов установщика Windows. При удаленной установке необходимо указать путь к устанавливаемому пакету MSI в виде сетевого UNC-пути, так как подсистема WMI не распознает пути Windows PowerShell. Например, для установки пакета NewPackage.msi, расположенного на общем сетевом ресурсе \AppServdsp на удаленном компьютере PC01, введите в командной строке Windows PowerShell следующую команду:
(Get-WMIObject -ComputerName PC01 -List | Where-Object -FilterScript ).Install(\AppSrvdspNewPackage.msi)
Приложения, не использующие технологию установщика Windows, могут поддерживать собственные методы автоматизированного развертывания. Сведения о наличии метода автоматизации развертывания обычно можно найти в документации к приложению или получить в системе технической поддержки его производителя. В отдельных случаях, даже если автоматизация установки не была явно предусмотрена производителем приложения, некоторые методы автоматизации могут поддерживаться производителем ПО установщика.
Удаление приложений
Удаление пакета, установленного при помощи установщика Windows, осуществляется в оболочке Windows PowerShell приблизительно так же, как и установка пакета. В следующем примере выбор пакета для удаления производится на основе его имени, но в отдельных случаях удобнее использовать фильтр IdentifyingNumber:
(Get-WmiObject -Class Win32_Product -Filter «Name=’ILMerge'» -ComputerName . ).Uninstall()
Удаление других приложений несколько сложнее, даже если производится локально. Команды удаления таких приложений из командной строки содержатся в свойстве UninstallString. Следующий метод пригоден как для приложений, установленных при помощи установщика Windows, так и для старых программ, перечисленных в разделе Uninstall:
Get-ChildItem -Path Uninstall: | ForEach-Object -Process
При необходимости можно отфильтровать вывод по отображаемому имени:
Get-ChildItem -Path Uninstall: | Where-Object -FilterScript < $_.GetValue(«DisplayName») -like «Win*»>| ForEach-Object -Process
Однако полученные команды не всегда можно использовать в командной строке Windows PowerShell без изменений.
Обновление приложений, установленных при помощи установщика Windows
Для обновления приложения необходимо знать имя обновляемого приложения и путь к пакету обновления приложения. При наличии этих сведений обновление приложения осуществляется в Windows PowerShell при помощи одной команды:
(Get-WmiObject -Class Win32_Product -ComputerName . -Filter «Name=’OldAppName'»).Upgrade(\AppSrvdspOldAppUpgrade.msi)
Источник: winintro.ru