【问题标题】:Passing commands to cmd from powershell从 powershell 向 cmd 传递命令
【发布时间】:2018-12-07 06:43:28
【问题描述】:

我想通过这个命令更改注册表项:

REG ADD "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp\IPAll" /v TcpDynamicPorts /t REG_SZ /d 6363 /f

这必须发生在 cmd 中,我通过 powershell 以管理员身份在批处理文件中使用此命令运行:

powershell.exe Start-Process cmd.exe -Verb runAs

我需要一个 UAC 提示,让用户输入他的管理员凭据,以使其尽可能用户友好。 现在我的问题是:如何将 reg add 命令传递给我以管理员身份启动的控制台?

【问题讨论】:

  • 为什么不在 powershell 控制台中运行整个程序?为什么需要使用cmd控制台?
  • 为什么不直接使用Powershell设置Regkey?为什么要对 cmd 采取额外的步骤?
  • 我想使用配置文件为 SQLServer 2014 设置静默安装。要完成设置,我需要更改动态 TCP/IP 端口。如果没有管理权限,这是不可能的。而且由于我们有多个可能具有不同管理员帐户的服务器,因此我需要用户输入凭据。我们希望将用户输入保持在最低限度,以避免用户造成的任何错误。我可以以管理员身份启动 powershell,但是我也不知道如何将 regedit 命令传递给 powershell。
  • 你应该看看blogs.technet.microsoft.com/heyscriptingguy/2015/04/02/…。 Powershell 还提供了简单的凭据解析,并使用Get-Credential 进行提示。
  • I could just start the powershell as admin, but then i wouldn't know how to pass the regedit command to the powershell either - 只需使用 powershell 执行 reg 正在执行的任务。要么像在 cmd 中那样使用 reg,要么使用 powershell 命令来完成它

标签: powershell cmd registry


【解决方案1】:

您需要像这样在-ArgumentList 参数中传递您的命令:

powershell.exe "Start-Process powershell -ArgumentList 'REG ADD "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp\IPAll" /v TcpDynamicPorts /t REG_SZ /d 6363 /f' -Verb RunAs"

这将执行 PowerShell,它会尝试执行另一个 PowerShell 窗口,要求您提供凭据,然后执行 REG ADD 命令并在最后关闭 PowerShell。

请记住,您没有错误处理或类似的功能,因此您可能需要稍后添加它们,因为它们可能非常有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 2018-03-14
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多