【问题标题】:Execute and run notepad on remote computer在远程计算机上执行和运行记事本
【发布时间】:2017-01-24 10:58:09
【问题描述】:

当我在本地计算机上运行以下代码时,记事本应该打开:

Invoke-Command {Invoke-Expression '&"C:\windows\system32\notepad.exe"'}

当我将 -computername 添加到代码并提供我的本地计算机名称时,我会收到拒绝访问消息。

Invoke-Command -ComputerName computername {Invoke-Expression '&"C:\windows\system32\notepad.exe"'}

不知道从这里去哪里。我查看的网站提供了本地计算机的示例。

我想在远程计算机上打开记事本。

问候,

【问题讨论】:

  • 即使您登录到远程 PC,它也不会在您的会话中运行,它将在远程命令的特定会话中运行..您实际上想要实现什么?

标签: c# winforms visual-studio powershell


【解决方案1】:

远程计算机需要凭据。您必须传递 -Credential 参数。除此之外,结果将与您预期的不同。记事本进程将启动,但您不会看到应用程序本身。原因是远程计算机上可能没有人登录,或者多人登录,向谁显示应用程序?

如果您想在用户会话中实际显示应用程序,您首先需要获取会话 ID,然后使用 PSexec 或 PAexec 之类的工具来执行此操作,但这是一种非常糟糕的做法。

【讨论】:

  • 同一用户始终 24/7 全天候登录计算机。是的,我希望在执行 PowerShell 代码时打开记事本。不想使用 PSexece。谢谢。
  • @lmalave :有什么理由不想使用psexec?你也可以使用WMI
  • 它在窗口的灰色区域,所以不要指望它容易或可靠。以下是更多信息:serverfault.com/questions/690852/…
  • Visual Vincent- 我会将我的 winform 与代码一起部署给许多用户,并尝试在 WINFORMS 中将其仅保留在 C# 中的 PS 中。
  • @lmalave :呃,如果可以使用 WMI 或其他本机解决方案,为什么还要使用 PowerShell?
【解决方案2】:

我无法让调用命令与记事本一起使用,但这确实有效

Invoke-WmiMethod –ComputerName servername -Class win32_process -Name create -ArgumentList "notepad"

【讨论】:

    【解决方案3】:

    创建批处理文件 #1 或从 cmd 执行:

    call StartRemoteApp.bat userid IpOrServerName userid password
    

    创建批处理文件 StartRemoteApp.bat 并将以下代码放入其中:

    @echo off 
    
    REM This program gets remote session info on a given server, for a given user.
    REM It needs 4 parameters: UserName, ServerName, Login, Password
    
    REM For a local session, simply replace the 'psexec \\...' command parsed by the 'for'
    REM loop with: 'query session ^| find /i "%UserName%"'
    REM In that case, only the UserName parameter is necessary to call this batch.
    
    set UserName=%1
    set ServerName=%2
    set Login=%3
    set Password=%4
    
    set SessionName=
    set SessionUser=
    set SessionId=
    set SessionState=
    
    for /f "tokens=1,2,3,4 delims=^> " %%a in ('psexec \\%ServerName% -u %Login% -p %Password% query session ^| find /i "%UserName%"') do (
    
        REM Test iterator because a disconnected session may no longer have a name!
    
        if /I "%%b"=="%UserName%" (
            set SessionName=%%a
            set SessionUser=%%b
            set SessionId=%%c
            set SessionState=%%d
        )
    
        if /I "%%a"=="%UserName%" (
            set SessionName=[unknown]
            set SessionUser=%%a
            set SessionId=%%b
            set SessionState=%%c
        )
      )
    
    echo Session info:
    echo - Name:  %SessionName%
    echo - User:  %SessionUser%
    echo - ID:    %SessionId%
    echo - State: %SessionState%
    
    psexec \\%ServerName% -u %Login% -p %Password% -i %SessionId% -d notepad.exe
    REM psexec \\%ServerName% -u %Login% -p %Password% -i %SessionId% -d "c:\Program Files (x86)\Microsoft Office\Office14\outlook.exe"
    
    PAUSE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多