【问题标题】:Run Powershell script via batch file with elevated privileges通过具有提升权限的批处理文件运行 Powershell 脚本
【发布时间】:2018-08-03 08:36:37
【问题描述】:

我需要运行一个 Powershell 脚本来通过批处理文件创建 AD 用户。问题是我需要以提升的权限(域管理员帐户)运行这个 PS 脚本。我试图编写一个包含所有这些信息的“.bat”文件,但到目前为止我还没有成功。这是脚本:

echo off
cls
echo Sign in with your ADM ID
set /p username=

powershell -noprofile -command "&{ start-process powershell -ArgumentList '-
noprofile -file C:\Users\...\Desktop\Powershell_scripts\New-ADuser\New-
Aduser_test.ps1' -verb RunAs}"

我已尝试使用 /netonly /user:adm@domain 行,但它不起作用。

你们有什么想法吗?

提前致谢。

【问题讨论】:

  • 发布更多详细信息.. 会出错吗?它会默默地失败吗?你是如何运行它的 - 普通桌面或计划任务或其他脚本环境?
  • 如果您询问是否可以在不引起 UAC 提示的情况下以管理员身份运行,答案是“不”。如果这不是你的问题,你需要澄清你真正想要做什么。
  • 为什么需要批处理文件?
  • @Charlypop,正如您在上一条评论中所说,涉及很多事情。一个调用 bat 文件的 excel 表单,该文件调用了一个 powershell 脚本。说它不起作用并不是那种需要查看错误所在的信息。您至少应该发布表单的 bat 调用程序代码、bat 文件代码和 powershell 脚本(或至少相关详细信息)。此外,您可能会发布一些其他详细信息,即计算机操作系统,它是否运行到域中,powershell 代码是否在本地或远程计算机上运行,​​是否是用户管理员......请澄清这些要点。有一些解决方法
  • 好的。 Excel 表单会生成一个 CSV 文件,其中包含运行 PS 脚本所需的所有信息,这是一个 New-ADuser 脚本。这些表单和脚本将从域中运行。为了能够创建新的 AD 用户,脚本必须使用域管理员帐户执行。这个过程就像:用所有用户的详细信息填写 Excel 表单,通过一个按钮将所有这些添加到 CSV 表中,然后单击执行 PS 脚本的最终按钮。顺便说一句,计算机操作系统 => Windows 7、10;在本地计算机或共享驱动器上运行的代码;管理员用户独占。

标签: powershell batch-file scripting sysadmin


【解决方案1】:

您可以使用其他凭据启动 powershell

@echo off
cls
echo Sign in with your ADM ID  
set/P user="*     user: "
rem set/P pass="* password: "
set "psCmd=powershell -Command "$pwd = read-host '* password' -AsSecureString; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd); [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /F "usebackq delims=" %%P in (`%psCmd%`) do set "pass=%%P"

powershell -executionpolicy bypass -Command "$p='%pass%'|convertto-securestring -asplaintext -force;$c=new-object -typename system.management.automation.pscredential('%user%',$p);start-process 'powershell' '-Command "C:\Users\...\Desktop\Powershell_scripts\New-ADuser\New-Aduser_test.ps1"' -credential $c -passthru -wait; read-host;"
exit/B

或者干脆

@echo off
cls

powershell -executionpolicy bypass -Command "start-process 'powershell' '-Command "C:\Users\...\Desktop\Powershell_scripts\New-ADuser\New-Aduser_test.ps1"' -credential $c -passthru -wait; read-host;"
exit/B

这将提示输入凭据

【讨论】:

  • 您的脚本不起作用。我收到错误用户名或密码不正确。我实际上需要使用域管理员帐户执行该脚本。我不知道为什么它不起作用。
  • 我做了,但也没有用。它错误(最初是法语):用户无法在该计算机上打开那种类型的打开方式。
  • 使用cmd.exeset /p 命令获取密码非常糟糕,因为它在输入时可见。
  • 既然可以编写 PowerShell 脚本并直接在 PowerShell 中运行,为什么还要从 cmd.exe 生成 PowerShell?
  • @Bill_Stewart,请参阅 OP 问题
【解决方案2】:

我终于搞定了:

runas.exe /netonly /noprofile /user:domainadm@domain "powershell.exe -
noprofile -File "C:\Users\...\Desktop\Powershell_scripts\New-
ADuser\.ps1" -verb RunAs"

它现在就像一个魅力!

希望它能帮助有需要的人。 ;)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
相关资源
最近更新 更多