启动进程Powershell找不到指定的

时间:2018-07-24 17:03:56

标签: powershell windows-10 powershell-v5.0 runas start-process

Edit5 :除非路径中没有空格,否则Adam的代码将起作用。该解决方案位于Powershell Opening File Path with Spaces

Edit4 :通过测试路径进一步简化。同样的错误。

If ($args[0] -eq "admin")
{
    $TheScriptPath = "C:\Users\root\Desktop\script.ps1"
    Test-Path ($TheScriptPath)
    Start-Process "powershell -noexit" $TheScriptPath
}
Else { Write-Host "OK" }

当我调用“ powershell。\ script.ps1 admin”时,输出为:

  

     

启动过程:由于以下错误,无法运行此命令:系统找不到指定的文件。

     

在C:\ Users \ root \ Desktop \ script.ps1:11 char:2

Edit3 :没关系。先前的解决方案停止工作。脚本是:

if ($args[0] -eq "admin)
{
    $TheScriptPath = $myInvocation.MyCommand.Definition
    Start-Process powershell -Verb runAs -Workingdirectory $PSScriptroot $TheScriptPath
    exit
}
Write-Host "Ok"

当我调用“ powershell。\ script.ps1 admin”时出现错误:

  

启动过程:由于以下错误,无法运行此命令:系统找不到指定的文件。

     

在C:\ Users \ root \ Desktop \ script.ps1:11 char:2

即使删除了“ -Verb runAs”,当我现在对脚本路径进行硬编码时,它也不起作用。

Edit2 :此问题已解决,我只是两天不能接受自己的回答。希望我记得这样做,以防其他人遇到这个问题。

Edit1 :我的脚本现在显示为:

If ($args[0] -eq "go")
{
    $ThePath = $myInvocation.MyCommand.Definition
    Start-Process powershell -Verb runAs $ThePath
    Exit
}
Write-Host "OK"

它失败,并显示以下错误。但是,如果我对脚本路径进行硬编码并将脚本编写为:

If ($args[0] -eq "go")
{
    Start-Process powershell -Verb runAs C:\Users\root\Desktop\script.ps1
    Exit
}
Write-Host "OK"

成功。我也尝试了“ "$myInvocation.MyCommand.Definition”,但无济于事。

原始: 我有一个Powershell脚本,至少在Windows 7中,该脚本提升了用户的权限,然后运行了脚本的其余部分。但是,在Windows 10中,它给了我

  

以“ 1”作为参数调用“ start”的异常:“系统找不到指定的hte文件”

     

在C:\ Users \ root \ desktop \ script.ps1:15 char:2

If ($True)
{
    # We are not running "as Administrator" - so relaunch as administrator

    # Create a new process object that starts PowerShell
    $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";

    # Specify the current script path and name as a parameter
    $newProcess.Arguments = $myInvocation.MyCommand.Definition;

    # Indicate that the process should be elevated
    $newProcess.Verb = "runas";

    # Start the new process
    [System.Diagnostics.Process]::Start($newProcess);

    # Exit from the current, unelevated, process
    exit
}

Write-Host "Ok"

该脚本存在于此路径,因为它实际上是在尝试调用自身。我在这里茫然。

1 个答案:

答案 0 :(得分:2)

我正在Windows 10(v10.0.15063 Build 15063)上运行Powershell v5.1.15063.1155。如果我运行以下命令:

$context = [Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()

if (-not $context.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell -Verb runAs -ArgumentList $myInvocation.MyCommand.Definition
    exit
}

Get-Date
Sleep -Seconds 4

您可以尝试此方法,因为它对我有用。

对于您的问题,我认为您创建的ProcessStartInfo对象($newProcess)出了问题。当找不到作为参数提供的可执行文件名称时,我已经看到了该错误。例如,如果我运行以下命令:

$newProcess = new-object System.Diagnostics.ProcessStartInfo "cocain";
$newProcess.Arguments = $myInvocation.MyCommand.Definition;
$newProcess.Verb = "runas";
[System.Diagnostics.Process]::Start($newProcess);

我收到您描述的错误:

enter image description here

您确定Powershell在您的路径(where.exe powershell)中吗?我知道它的影响力。