Как запустить PowerShell (от имени администратора) в Windows 10, 8.1, 8, 7. Запустить программу powershell
exe - Как запустить EXE файл в PowerShell с параметрами с пробелами и кавычками
Когда PowerShell видит команду, начинающуюся со строки, она просто оценивает строку, то есть обычно ее выводит на экран, например:
PS> "Hello World" Hello WorldЕсли вы хотите, чтобы PowerShell интерпретировал строку как имя команды, используйте оператор вызова (&) следующим образом:
PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'После этого вам, вероятно, нужно только указать пары параметров/аргументов, содержащие пробелы и/или цитаты. Когда вы вызываете EXE файл, подобный этому, с помощью сложных аргументов командной строки, обычно очень полезно иметь инструмент, который покажет вам, как PowerShell отправляет аргументы в EXE файл. В PowerShell Community Extensions есть такой инструмент. Это называется эхолотами. Вы просто заменяете EXE файл эхолотами - оставляя все аргументы на месте, и он покажет вам, как EXE файл получит аргументы, например:
Используя эхо-сигналы, вы можете поэкспериментировать, пока не получите это правильно, например:
PS> echoargs -verb:sync "-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" Arg 0 is <-verb:sync> Arg 1 is <-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;>Кстати, шляпы уходят в команду PowerShell. Они были весьма полезны в том, чтобы показать мне конкретное заклинание одиночных и двойных кавычек, чтобы получить желаемый результат - если вам нужно сохранить внутренние двойные кавычки на месте.:-) Они также понимают, что это область боли, но они обусловлены количеством людей, затронутых определенной проблемой. Если это область боли для вас, пожалуйста, проголосуйте за Подача ошибок PowerShell.
Для получения дополнительной информации о том, как PowerShell анализирует, просмотрите мою Эффективную серию блога PowerShell - в частности элемент 10 - "Общие сведения о синтаксическом анализе PowerShell"
ОБНОВЛЕНИЕ 4/4/2012: эта ситуация становится намного проще в PowerShell V3. Подробнее см. В этом блоге.
qaru.site
PowerShell: Запуск оконных приложений. | VR-online
В PowerShell консольные приложения запускаются синхронно, а оконные - асинхронно. Это означает, что если запущенное приложение является консольным, PowerShell не перейдёт к выполнению следующей команды, пока не будет завершена предыдущая. Если же приложение оконное - оно запускается в отдельном процессе и существует само по себе, не влияя на работу PowerShell который в это время переходит к выполнению очередной команды. Рассмотрим нюансы запуска оконных приложений из PowerShell. Предположим, что нам нужно запустить wordpad.
Вариант 1:>PS C:\Users\user> & "C:\Program Files\Windows NT\Accessories\wordpad.exe"
Символ "&" перед полным строковым именем исполняемого файла указывает на то, что сделующую за ним строку следует трактовать как команду. Двойные или одинарные (смотря по обстоятельствам) кавычки необходимы, т.к. в пути содержатся пробелы. Для тех кто не в курсе, поясняю: если использовать двойные кавычки, то все имена переменных (определённых в PowerShell, а так же созданных нами), указанных в тексте, будут заменены их значениями. Если использовать одинарные кавычки - замена производиться не будет. Пример:PS D:\> "Домашний каталог пользователя: $Home"Домашний каталог пользователя: C:\Users\userВ строке переменная была заменена своим значением.
PS D:\> 'Домашний каталог пользователя: $Home' Домашний каталог пользователя: $Home Строка осталась без изменений.
Вариант 2:PS C:\Users\user> cd "C:\Program Files\Windows NT\Accessories"PS C:\Program Files\Windows NT\Accessories> .\wordpad
Наличие ".\" перед файлом необходимо (данное требование присутствует в PowerShell из соображений безопасности), а расширение файла можно не указывать.
Если развернуть свойство ярлыка, указывающего на файл wordpad.exe, то можно увидеть, что в пути используется системная переменная %ProgramFiles%. Однако, если мы просмотрим перечень переменных, доступных на диске "variable:", то увидим что переменной с таким именем там нет. Спойлер PS D:\> ls variable:
Name Value---- -----$ Домашний каталог пользователя: $Home? True^ Домашний каталог пользователя: $Home_a C:\Program Files\Windows NT\Accessories\wordpad.exeargs {}ConfirmPreference HighConsoleFileNameDebugPreference SilentlyContinueError {Не удается найти путь "C:\Users\user\variable", так как он не существует., Имя "vari...ErrorActionPreference ContinueErrorView NormalViewExecutionContext System.Management.Automation.EngineIntrinsicsfalse FalseFormatEnumerationLimit 4HOME C:\Users\userHost System.Management.Automation.Internal.Host.InternalHostinput System.Collections.ArrayList+ArrayListEnumeratorSimpleLASTEXITCODE 1MaximumAliasCount 4096MaximumDriveCount 4096MaximumErrorCount 256MaximumFunctionCount 4096MaximumHistoryCount 64MaximumVariableCount 4096MyInvocation System.Management.Automation.InvocationInfoNestedPromptLevel 0nullOutputEncoding System.Text.ASCIIEncodingPID 5840PROFILE C:\Users\user\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1ProgressPreference ContinuePSBoundParameters {}PSCulture ru-RUPSEmailServerPSHOME C:\Windows\System32\WindowsPowerShell\v1.0PSSessionApplicationName wsmanPSSessionConfigurationName ]]>http://schemas.microsoft.com/powershell/Microsoft.PowerShell]]>PSSessionOption System.Management.Automation.Remoting.PSSessionOptionPSUICulture ru-RUPSVersionTable {CLRVersion, BuildVersion, PSVersion, WSManStackVersion...}PWD D:\ReportErrorShowExceptionClass 0ReportErrorShowInnerException 0ReportErrorShowSource 1ReportErrorShowStackTrace 0ShellId Microsoft.PowerShellStackTrace в System.Management.Automation.CommandDiscovery.LookupCommandInfo(String commandNa...true TrueVerbosePreference SilentlyContinueWarningPreference ContinueWhatIfPreference False Соответственно нам не удастся в пути к файлу использовать переменную $ProgramFiles (т.к. её нет в приведённом выше списке). В подобных ситуациях следует использовать синтаксис $env:ИмяПеременной, тем самым указывая PowerShell, что речь идёт о переменной операционной системы:
Вариант 3:PS C:\Users\user> & "$env:ProgramFiles\Windows NT\Accessories\wordpad.exe"
В принципе можно воспользоваться функционалом, предоставленным .NET:
Вариант 4:>PS C:\Users\user> & $([System.Environment]::ExpandEnvironmentVariables("%ProgramFiles%\Windows NT\Accessories\wordpad.exe"))
Наличие в данном выражении блока "$(...)" необходимо, т.к. этот синтаксис сообщает PowerShell о том, что сначала следует вычислить выражение, находящееся внутри этого оператора и уже затем результат передать далее (в нашем случае - "&").
www.vr-online.ru
Программирование, настройка и администрирование CAD систем: PowerShell: Запуск оконных приложений
Вариант 1:>PS C:\Users\user> & "C:\Program Files\Windows NT\Accessories\wordpad.exe"
Символ "&" перед полным строковым именем исполняемого файла указывает на то, что сделующую за ним строку следует трактовать как команду. Двойные или одинарные (смотря по обстоятельствам) кавычки необходимы, т.к. в пути содержатся пробелы. Для тех кто не в курсе, поясняю: если использовать двойные кавычки, то все имена переменных (определённых в PowerShell, а так же созданных нами), указанных в тексте, будут заменены их значениями. Если использовать одинарные кавычки - замена производиться не будет. Пример:
PS D:\> "Домашний каталог пользователя: $Home" Домашний каталог пользователя: C:\Users\user В строке переменная была заменена своим значением. PS D:\> 'Домашний каталог пользователя: $Home' Домашний каталог пользователя: $Home Строка осталась без изменений.Вариант 2:
PS C:\Users\user> cd "C:\Program Files\Windows NT\Accessories" PS C:\Program Files\Windows NT\Accessories> .\wordpadНаличие ".\" перед файлом необходимо (данное требование присутствует в PowerShell из соображений безопасности), а расширение файла можно не указывать.
Если развернуть свойство ярлыка, указывающего на файл wordpad.exe, то можно увидеть, что в пути используется системная переменная %ProgramFiles%. Однако, если мы просмотрим перечень переменных, доступных на диске "variable:", то увидим что переменной с таким именем там нет.
PS D:\> ls variable: Name Value ---- ----- $ Домашний каталог пользователя: $Home ? True ^ Домашний каталог пользователя: $Home _ a C:\Program Files\Windows NT\Accessories\wordpad.exe args {} ConfirmPreference High ConsoleFileName DebugPreference SilentlyContinue Error {Не удается найти путь "C:\Users\user\variable", так как он не существует., Имя "vari... ErrorActionPreference Continue ErrorView NormalView ExecutionContext System.Management.Automation.EngineIntrinsics false False FormatEnumerationLimit 4 HOME C:\Users\user Host System.Management.Automation.Internal.Host.InternalHost input System.Collections.ArrayList+ArrayListEnumeratorSimple LASTEXITCODE 1 MaximumAliasCount 4096 MaximumDriveCount 4096 MaximumErrorCount 256 MaximumFunctionCount 4096 MaximumHistoryCount 64 MaximumVariableCount 4096 MyInvocation System.Management.Automation.InvocationInfo NestedPromptLevel 0 null OutputEncoding System.Text.ASCIIEncoding PID 5840 PROFILE C:\Users\user\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 ProgressPreference Continue PSBoundParameters {} PSCulture ru-RU PSEmailServer PSHOME C:\Windows\System32\WindowsPowerShell\v1.0 PSSessionApplicationName wsman PSSessionConfigurationName <a href="http://schemas.microsoft.com/powershell/Microsoft.PowerShell PSSessionOption">http://schemas.microsoft.com/powershell/Microsoft.PowerShell PSSessionOption</a> System.Management.Automation.Remoting.PSSessionOption PSUICulture ru-RU PSVersionTable {CLRVersion, BuildVersion, PSVersion, WSManStackVersion...} PWD D:\ ReportErrorShowExceptionClass 0 ReportErrorShowInnerException 0 ReportErrorShowSource 1 ReportErrorShowStackTrace 0 ShellId Microsoft.PowerShell StackTrace в System.Management.Automation.CommandDiscovery.LookupCommandInfo(String commandNa... true True VerbosePreference SilentlyContinue WarningPreference Continue WhatIfPreference FalseСоответственно нам не удастся в пути к файлу использовать переменную $ProgramFiles (т.к. её нет в приведённом выше списке). В подобных ситуациях следует использовать синтаксис $env:ИмяПеременной, тем самым указывая PowerShell, что речь идёт о переменной операционной системы:
Вариант 3:PS C:\Users\user> & "$env:ProgramFiles\Windows NT\Accessories\wordpad.exe"
В принципе, можно воспользоваться и средствами .NET (на любителя):
Вариант 4:>PS C:\Users\user> & $([System.Environment]::ExpandEnvironmentVariables("%ProgramFiles%\Windows NT\Accessories\wordpad.exe"))
Наличие в данном выражении блока "$(...)" необходимо, т.к. этот синтаксис сообщает PowerShell о том, что сначала следует вычислить выражение, находящееся внутри этого оператора и уже затем результат передать далее (в нашем случае - "&").
bushman-andrey.blogspot.com
Запуск в Windows PowerShell внешних исполняемых файлов
В предыдущих статьях мы говорили о командлетах, функциях и сценариях в Windows PowerShell. Сегодня поговорим о последнем типе команд — внешних исполняемых файлах. Речь идет о командных файлах классической командной строки Windows (cmd.exe) и сценариях на языке VBScript.Данные файлы и сценарии появились раньше PowerShell и, конечно же, системные администраторы до сих пор могут использовать их в своей работе.
Windows PowerShell позволяет запускать файлы .bat и .cmd. Для запуска необходимо указать путь к файлу. Например
C:\primer.batПри этом PowerShell создаст процесс cmd.exe, который и выполнит этот запрос. Тоже самое относится и к файлам .vbs. Windows PowerShell позволяет не только запускать подобные файлы, но и внедрять код VBScript в сценарии PowerShell. Если смотреть шире, то, на самом деле, внедрять можно код любого языка, поддерживающего ActiveX Scripting. При этом правда стоит учитывать, что эти языки весьма сильно отличаются по синтаксису от языка PowerShell.
Если же Вы хотите запустить в Windows PowerShell команду классической командной строки, то для этого достаточно использовать cmd /c.
Например, команда
cmd /c dir /bвыдаст Вам список файлов текущего каталога в виде одних только имен, без дополнительных атрибутов. Это команда cmd.exe, которую мы запустили в консоли PowerShell.
Microsoft постаралась сделать синтаксисы классической командной строки и Windows PowerShell максимально схожими. Поэтому многие знакомые нам команды работают и в PowerShell без дополнительных манипуляций. Полной совместимости достичь, однако, было невозможно из-за разного принципа реализации работы cmd.exe и PowerShell. В PowerShell были введены командлеты, объединяемые в конвейеры. В классической командной строке Windows был список команд, которые очень гибко настраивались большим количеством дополнительных параметров.
Итак, как видим, Windows PowerShell обеспечивает механизм обратной совместимости с командами и сценариями, написанными до его появления. При этом новые сценарии было бы логичнее писать уже на PowerShell. В идеале, изучив синтаксис PowerShell, системный администратор может переписать и старые сценарии.
webistore.ru
Как запустить PowerShell (от имени администратора) в Windows 10, 8.1, 8, 7
Товарищи, добрый день. Так как у меня появились несколько идей для написания будущих статей, я решил немного подготовить сайт. В будущем, нам скорее всего понадобится инструмент PowerShell, который уже сейчас превосходит по возможностям стандартную командную строку, но все равно развивается параллельно ей. Подробнее лучше прочитать на википедии, а у нас практические знания, поэтому переходим к инструкции. И снова у нас несколько способов:
- Через меню «Пуск»
- Через командную строку
- Через проводник
- Заменой командной строки в контекстном меню «Пуск» (только современные операционные системы)
1. Запуск Windows PowerShell через меню «Пуск».
Самый популярный способ у нас будет первым, для Windows 10: открываем меню «Пуск» → «Все программы» → ищем каталог «Windows PowerShell» и выбираем файл нужной разрядности. На 32 битных системах будет только 32 битный исполняющий файл.
Если необходим PowerShell с правами администратора, то кликаем правой клавишей мыши по файлу, выбираем «Дополнительно» и жмем «Запуск от имени администратора».
Для Windows 8.x и старше: Открываем меню «Пуск» → открываем раздел «Все программы» → листаем до раздела служебные и открываем Windows PowerShell этот сриншот сделан на 32 битной системе и здесь уже видно, что файл будет только один.
Запуск от имени администратора по тому же сценарию, правой клавишей по файлу и выбираем «Запустить от имени администратора»
2. Запуск PowerShell через командную строку
Да, для любителей нестандартных путей, тоже способ есть)) Много способов запуска командной строки описаны здесь. Здесь же я опишу способ, который подходит для современных операционных систем. Нажимаем правой клавишей мыши по углу пуск или жмем Win+X, а в открывшемся меню выбираем подходящую командную строку. Если вам необходим PowerShell с правами администратора, то выбираем и командную строку с правами администратора.
В открывшееся окно вводим powershell и жмём Enter. После этого командная строка будет работать полностью как Windows PowerShell.
3. Запуск Windows PowerShell через окно проводника Windows.
Открываем проводник и переходим в одну из папок:
a) 64bit PowerShell если стоит 64 битная система или 32bit PowerShell, если стоит 32 битная системаC:\Windows\System32\WindowsPowerShell\v1.0
b) 32bit PowerShell на 64 битных системах находится в папке:C:\Windows\syswow64\Windowspowershell\v1.0
Можно просто вставить ссылку в адресную строку.
Если вам нужен PowerShell с обычными правами, просто запускаем выделенный файл. Если же с правами администратора, жмём правой клавишей мыши и выбираем «Запуск от имени администратора».
4. Замена командной строки на PowerShell в контекстном меню «Пуск».
Вот во втором способе, мы использовали контекстное меню «Пуска» и там по-умолчанию добавлена командная строка. Это можно исправить. Скажем для системных администраторов, все чаще нужен PowerShell, вместо командной строки и вместе с добавлением контекстного меню, Microsoft добавили возможность замены командной строки на Windows PowerShell. Для этого, необходимо кликнуть правой клавишей мыши по пустому месту на «Панели задач». И выбрать её «Свойства».
На вкладке «Навигация» ставим галочку на «Заменить командную строку оболочкой Windows PowerShell…» и жмём ОК.
Теперь в контекстном меню можно сразу же запускать Windows PowerShell.
Вроде всё. Надеюсь эта статья оказалась вам полезной, нажмите одну из кнопок ниже, чтобы рассказать о ней друзьям. Также подпишитесь на обновления сайта, введя свой e-mail в поле справа или подписавшись на группу во Вконтакте и канал YouTube.Спасибо за внимание
Материал сайта geekteam.pro
geekteam.pro
powershell - Запустите программу по имени из PowerShell (аналогично запуску)
В поле запуска используется PATH среды PATH но она также использует набор ключей реестра.
В ключе HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths содержатся подразделы с определенными именами приложений, и каждое из них имеет строковое значение Path с Path пути к исполняемому файлу. Powershell и командной строки не используют их.
Эмулируя это в Powershell
$allCommands = Get-Command -CommandType All | Select-Object -ExpandProperty Name Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths' | Where-Object { $_.Property -icontains 'Path' } | ForEach-Object { $executable = $_.Name | Split-Path -Leaf $shortName = $executable -creplace '\.[^.]*$','' $path = $_ | Get-ItemProperty | Select-Object -ExpandProperty Path $fqPath = $path | Join-Path -ChildPath $executable if ( ($allCommands -icontains $executable) -or ($allCommands -icontains $shortName) ) { Write-Verbose "Skipping $executable and $shortName because a command already exists with that name." } else { Write-Verbose "Creating aliases for $executable." New-Alias -Name $executable -Value $fqPath New-Alias -Name $shortName -Value $fqPath } }Этот фрагмент прочитает реестр и добавит все эти записи в качестве псевдонимов. Он также добавляет имя EXE без.exe, чтобы вы могли использовать краткое имя.
Он проверяет существующие команды заранее, чтобы убедиться, что он не будет clobber любой существующей команды (любого типа).
редактировать
Я также создал функцию, которую вы могли бы использовать для выполнения произвольного приложения без изменения всей среды:
function Run-Application { [CmdletBinding(SupportsShouldProcess=$true)] param( [Parameter( Mandatory=$true, ValueFromPipeline=$true )] [ValidateNotNullOrEmpty()] [String[]] $Name , [Parameter()] [Switch] $NoExtension ) Begin { if (!$NoExtension -and $env:PATHEXT) { $exts = $env:PATHEXT -csplit ';' } else { $exts = @() } $regStub = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths' } Process { :outer foreach($app in $Name) { $cmd2run = $app if (Get-Command -Name $cmd2run -ErrorAction Ignore) { if ($PSCmdlet.ShouldProcess($cmd2run)) { & $cmd2run } continue :outer } elseif ($app -cnotlike '*.*') { foreach($ext in $exts) { $cmd2run = "$app$ext" if (Get-Command -Name $cmd2run -ErrorAction Ignore) { if ($PSCmdlet.ShouldProcess($cmd2run)) { & $cmd2run } continue :outer } } } $thisReg = $regStub | Join-Path -ChildPath $cmd2run $regItem = $thisReg | Get-Item -ErrorAction Ignore if ($regItem -and $regItem.Property -icontains 'Path') { $thisPath = $regItem | Get-ItemProperty | Select-Object -ExpandProperty Path | Join-Path -ChildPath $cmd2run if ($PSCmdlet.ShouldProcess($thisPath)) { & $thisPath } continue :outer } elseif ($app -cnotlike '*.*') { foreach($ext in $exts) { $cmd2run = "$app$ext" $thisReg = $regStub | Join-Path -ChildPath $cmd2run $regItem = $thisReg | Get-Item -ErrorAction Ignore if ($regItem -and $regItem.Property -icontains 'Path') { $thisPath = $regItem | Get-ItemProperty | Select-Object -ExpandProperty Path | Join-Path -ChildPath $cmd2run if ($PSCmdlet.ShouldProcess($thisPath)) { & $thisPath } continue :outer } } } } } }Вы можете указать одно или несколько имен с расширением или без него через параметр или по конвейеру.
Если значение не имеет расширения, оно использует PATHEXT и пробует каждую комбинацию. Вы также можете отключить это, используя -NoExtension.
Я использовал Run-Application для синтаксиса verb-noun, но вы всегда можете использовать его для run если хотите.
Я не уверен, что это сработает для вас, если у вас возникнут проблемы с другим кодом, но для меня это очень сработало, и мне было весело писать. Надеюсь, это поможет вам или кому-то еще.
Изменить 2
Исправлена функция, поддерживающая -WhatIf.
Примеры
Run-Application notepad Run-Application firefox,chrome.exe 'notepad.exe','firefox.exe','snippingtool' | Run-Application -Whatif Run-Application firefox -NoExtension # Should failqaru.site
Заметки на полях: powershell удаленный запуск приложения
powershell удаленный запуск приложенияЗапуск интерактивного сеанса
Чтобы запустить интерактивный сеанс с одним удаленным компьютером, используйте командлет Enter-PSSession. Например, чтобы запустить интерактивный сеанс с удаленным компьютером Server01, введите:enter-pssession Server01В командной строке отобразится имя компьютера, к которому вы подключены. В дальнейшем все команды, введенные в командной строке, будут запускаться на удаленном компьютере, а результаты отобразятся на локальном компьютере.Чтобы завершить интерактивный сеанс, введите:exit-pssession
Выполнение удаленной команды
Чтобы выполнить любую команду на одном или нескольких удаленных компьютерах, используйте командлет Invoke-Command. Например, чтобы выполнить команду Get-UICulture на удаленных компьютерах Server01 и Server02, введите:
invoke-command -computername Server01, Server02 {get-UICulture}Выходные данные будут возвращены на ваш компьютер.Чтобы запустить сценарий на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета Invoke-Command. Сценарий должен быть включен или доступен для локального компьютера. Результаты будут возвращены на локальный компьютер.Например, следующая команда выполняет сценарий DiskCollect.ps1 на удаленных компьютерах Server01 и Server02.invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1
Установка постоянного подключенияЧтобы выполнить ряд связанных команд с общими данными, создайте сеанс на удаленном компьютере, а затем используйте командлет Invoke-Command для выполнения команд в созданном сеансе. Чтобы создать удаленный сеанс, используйте командлет New-PSSession.Например, следующая команда создает удаленный сеанс на компьютере Server01 и другой удаленный сеанс на компьютере Server02. Она сохраняет объекты сеанса в переменной $s.$s = new-pssession -computername Server01, Server02После установки сеансов в них можно выполнить любую команду. Так как сеансы являются постоянными, вы можете собирать данные в одной команде и использовать их в последующей.Например, следующая команда выполняет команду Get-Hotfix в сеансах в переменной $s и сохраняет результаты в переменной $h. Переменная $h создается в каждом сеансе в $s, но она не существует в локальном сеансе.invoke-command -session $s {$h = get-hotfix}Теперь данные в переменной $h можно использовать в последующих командах, таких как следующая. Результаты отобразятся на локальном компьютере.
invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"}
Всё взято с https://technet.microsoft.com/ru-ru/library/dd819505.aspx
maxadmin.blogspot.com