标签: start-process

Powershell打开文件路径与空间

我的PS脚本我希望能够通过执行以下操作在另一个PS实例中运行另一个脚本:

$filepath = Resolve-Path "destruct.ps1"

start-process powershell.exe "$filepath"
Run Code Online (Sandbox Code Playgroud)

destruct.ps1与此脚本位于同一文件夹中

但是,当在包含空格的位置("C:\ My Scripts \")中运行此脚本时,我将收到以下错误:

术语"C:\ My"未被识别为cmdlet,函数,可操作程序或脚本文件.验证该术语,然后重试.

我知道通过使用带有Invoke-Expression方法的'&'来解决这个问题,我怎么能这样做但是通过使用start-process方法?

非常感谢您的帮助!

powershell start-process

8
推荐指数
2
解决办法
3万
查看次数

在Start-Job中"Start-Process -NoNewWindow"?

我在Start-Job中使用Start-Process时遇到问题,特别是在使用时-NoNewWindow.例如,这个测试代码:

Start-Job -scriptblock {
    Start-Process cmd -NoNewWindow -Wait -ArgumentList '/c', 'echo' | out-null
    Start-Process cmd # We'll never get here
}

get-job | wait-job | receive-job
get-job | remove-job
Run Code Online (Sandbox Code Playgroud)

返回以下错误,显然谷歌没有听说过:

Receive-Job:处理来自后台进程的数据时出错.报告错误:无法处理节点类型为"Text"的元素.仅支持Element和EndElement节点类型.

如果我删除-NoNewWindow一切工作就好了.我做的事情愚蠢,还是没有办法开始工作Start-Process -NoNewWindow?有什么好的选择?

powershell powershell-2.0 start-process start-job

8
推荐指数
1
解决办法
2487
查看次数

从升级过程开始非升级过程

可能重复:
如何在Vista(.NET)中运行NOT raise
如何取消提升子进程的权限

我的程序作为一个提升的进程运行,并启动新的进程Process.Start().

出于安全原因,我希望将这些新进程作为非提升程序运行.

怎么做?

.net c# uac start-process elevated-privileges

7
推荐指数
0
解决办法
5049
查看次数

如何在PowerShell中启动远程处理

我有一个问题,我有一个脚本:

  • 与PSSession连接(我使用PSSession管理员帐户)
  • 停止2进程
  • 改变他们的文件
  • 启动2流程(此处出现问题)

我想在服务器上启动进程,所以我用PSSession连接(没问题)

我做Invoke-Command:

# $pathProg path to my program
Invoke-Command -session $mySession -command {Start-Process $($args[0])} -ArgumentList $pathProg
Run Code Online (Sandbox Code Playgroud)

但它什么都不做(我用VNC验证)

我也做Invoke-Command:

# $pathProg path to my program
Invoke-Command -session $mySession -command {&$($args[0])} -ArgumentList $pathProg
Run Code Online (Sandbox Code Playgroud)

这个程序很好(好)但我的脚本等待结束程序(不好)

有人有想法吗?

谢谢

powershell remoting start-process invoke-command

7
推荐指数
1
解决办法
3万
查看次数

PowerShell 1.0 Start-Process在用户注销时不等待完成

我目前正在尝试使用Powershell连接到远程桌面,在该桌面上运行程序,然后注销.然后我检查在文件共享上运行该命令的输出.基本上这意味着PowerShell应该在继续之前等待该过程完成.

在阅读之后,我一直在尝试使用Start-Process -Wait选项来确保它等待进程运行.但是,此脚本必须作为计划任务运行,并且似乎无论何时在用户未登录时运行脚本,-wait都不起作用,并且脚本将继续运行而不完成该过程.我已经尝试了几种不同的等待选项,但显然我必须在用户注销以测试它时运行计划任务,并且测试变得筋疲力尽.这是我执行此操作的当前代码行:

$proc = $(start-process $path -Wait)
Run Code Online (Sandbox Code Playgroud)

请注意,我已尝试使用-NoNewWindow命令,但在我的PowerShell版本中不可用.

任何人都有任何其他想法让它等待这个过程?

powershell start-process

7
推荐指数
1
解决办法
2610
查看次数

使用PowerShell启动Metro风格的应用程序

我正在尝试为Windows 10编写一个powershell脚本,它将自动启动Metro风格的应用程序.Start-Process cmdlet似乎应该可以工作,但除非我提供.exe的路径,否则我无法启动它

例如,以下输入有效:

    Start-Process 'C:\Program Files\Internet Explorer\iexplore.exe'
Run Code Online (Sandbox Code Playgroud)

不幸的是,Metro风格的应用程序没有可执行文件.我需要用什么文件来启动它们?例如,如果我想启动Windows应用商店,我该怎么做?

谢谢

start-process powershell-3.0 appx windows-10 uwp

7
推荐指数
1
解决办法
7708
查看次数

脚本将其他脚本调用为 .ps1,但不使用 ps2exe 作为 .exe

$password = ConvertTo-SecureString \xe2\x80\x9cPassword+++\xe2\x80\x9d -AsPlainText -Force\n$Cred = New-Object System.Management.Automation.PSCredential ("Admin", $password)\n$FileLocale = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition\nWrite-Output $FileLocale\n$AntFile = "$FileLocale\\StartApps.ps1"\nWrite-Output $AntFile\nStart-Process PowerShell.exe -ArgumentList "-command &$AntFile -UserCredential $Cred"  \n
Run Code Online (Sandbox Code Playgroud)\n

嗨,该代码在 .ps1 中运行,我调用另一个脚本,他完成了他的工作。但是当我在 ps2exe 的帮助下将其转换为 .exe 时,他不再做他的工作了。作为管理员与否。这不是我第一次使用该启动进程,但这是我第一次使用变量作为命令的目标。有谁知道 ps1 和 exe 之间出了什么问题吗?

\n

谢谢

\n

powershell exe start-process ps1 ps2exe-gui

7
推荐指数
1
解决办法
766
查看次数

PowerShell使用Start-Process在脚本块中执行函数会使用双引号进行奇怪的操作

我有一个编辑注册表的PowerShell脚本,所以它需要以管理员身份运行.为此,我从运行的PowerShell脚本启动一个新的PowerShell进程,并使用带有函数的脚本块传递部分注册表键路径.当我在该函数中使用双引号时,PowerShell会尝试将它们解释为命令,而不是字符串.如果我使用单引号,那么一切正常.

我创建了一个简单的样本PowerShell脚本来重现问题.这是片段:

$ScriptBlock = {
    function Test
    {
        $status = "This is a string"
        Write-Output $status
    }
}
Start-Process -FilePath PowerShell -ArgumentList "-NoExit -NoProfile -ExecutionPolicy Bypass -Command & {$ScriptBlock Test}"
Run Code Online (Sandbox Code Playgroud)

因此,在新的PowerShell流程中,它将首先在脚本块中定义代码,然后调用Test方法,并产生以下错误:

这:术语"This"不被识别为cmdlet,函数,脚本文件或可操作程序的名称.检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试.

所以它试图将字符串视为一个commad,就好像我刚刚This is a string在我的脚本中的新行上键入它一样.

如果我换行

$status = "This is a string"
Run Code Online (Sandbox Code Playgroud)

$status = 'This is a string'
Run Code Online (Sandbox Code Playgroud)

该脚本按预期工作,只是输出字符串This is a string.

我注意到的另一个奇怪的问题是,如果我不使用变量,只需使用:

Write-Output "This is a string"
Run Code Online (Sandbox Code Playgroud)

然后它在一个单独的行上输出每个单词,如下所示:

这个

一个

但如果我使用这样的单引号:

Write-Output 'This is a string'
Run Code Online (Sandbox Code Playgroud)

然后它按预期在一行输出整个句子.

有人知道为什么PowerShell在这些情况下会表现得很奇怪吗?

回答

正如TessellatingHeckler所提到的,解决方案是用双引号,单引号包装任何双引号,或者你可以使用括号.

所以在我的例子中,你会改变: …

string powershell function start-process scriptblock

6
推荐指数
1
解决办法
8702
查看次数

通过启动进程以管理员身份从 powershell 脚本重定向 stdout、stderr

在 powershell 脚本中,我正在运行一个命令,该命令以管理员身份启动一个新的 powershell(如果我不是,如果需要,取决于$arg),然后运行该脚本。

我正在尝试将 stdout 和 stderr 重定向到第一个终端。

不是试图让事情变得更容易,也有争论。

param([string]$arg="help")

if($arg -eq "start" -Or $arg -eq "stop")
{
    if(![bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544"))
    {
        Start-Process powershell -Verb runas -ArgumentList " -file servicemssql.ps1 $arg"
        exit
    }
}

$Services = "MSSQLSERVER", "SQLSERVERAGENT", "MSSQLServerOLAPService", "SSASTELEMETRY", "SQLBrowser", `
"SQLTELEMETRY", "MSSQLLaunchpad", "SQLWriter", "MSSQLFDLauncher"

function startsql {
    "starting SQL services"
    Foreach ($s in $Services) {
        "starting $s"
        Start-Service -Name "$s"
    }
}

function stopsql {
    "stopping SQL services"
    Foreach ($s in $Services) {
        "stopping $s" …
Run Code Online (Sandbox Code Playgroud)

powershell start-process

6
推荐指数
1
解决办法
4104
查看次数

当 useshellexecute = false 时 Process.start 找不到文件

我需要从我的 UWP 应用程序调用批处理文件。这样做的方法似乎是Process.Start(),但它说当我按照它输出的路径时,它甚至没有找到文件,它肯定存在。文件路径和工作目录都作为使用 shellexecute = false 时所需的完整路径给出。

当我设置 useshellexecute = true 时它起作用。由于完整路径在这里有效,文件显然就在那里。使用 shellexecute = true 时,工作目录仅指定应搜索文件的位置,命令提示符在 system32 目录中启动,但我需要工作目录是打开的批处理所在的位置。

因此,ShellExecute = false。

我试过: 1. ShellExecute = true。它找到了文件,但工作目录设置不正确。2. 硬编码批处理的绝对路径。还是没找到。3. 设置 StartInfo.FileName 而不是通过参数给它。4. 相对路径 5. Process.Start(Filename)。Can't set Working Directory without StartInfo 6.看类似的问题,但答案总是我已经有了(当shellexecute = false时使用完整路径)

string executable = args[2];

string path = Assembly.GetExecutingAssembly().CodeBase;
string directory = Path.GetDirectoryName(path);

var startInfo = new ProcessStartInfo(directory + @"\Diagnose\_data\Updater\" + executable);

startInfo.UseShellExecute = false;
startInfo.WorkingDirectory = directory + @"\Diagnose\_data\Updater";

startInfo.RedirectStandardError = true;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;

Process.Start(startInfo); …
Run Code Online (Sandbox Code Playgroud)

c# processstartinfo start-process uwp

5
推荐指数
1
解决办法
566
查看次数