我是一个非常新的 powershell 用户。
我有一些 CMD 命令,我需要以管理员身份在 powershell 中运行或使用我的管理员帐户运行,没有用户提示。 我需要在 powershell 中运行它们,因为我使用(端点的 Defender)将脚本部署到用户 PC 的平台仅接受 powershell,但命令是命令提示符命令。
该脚本用于修复 Windows 激活问题。 到目前为止,我所拥有的如下,但是在每个命令后都会弹出一个确认框,要求单击“确定”,我需要摆脱它,我还需要一种方法使其通过脚本本身以管理员身份运行,因为我不是确保部署脚本的平台会这样做。
Invoke-Expression -Command "cmd.exe /c slmgr /upk"
Start-Sleep 3
Invoke-Expression -Command "cmd.exe /c slmgr /cpky"
Start-Sleep 3
Invoke-Expression -Command "cmd.exe /c slmgr /rearm"
我尝试在顶部添加以下内容,但它挂起:
powershell.exe -NonInteractive
我也尝试过:
powershell.exe -NonInteractive -ea 0
不再挂起,但仍显示提示
有没有一种方法可以在没有端点防御者作为中介的情况下远程运行它?
非常感谢任何帮助!
我不知道这是否是您问题的唯一/真正原因,但它绝对是一个潜在的原因:
tl;博士
假设您已经在海拔高度下跑步,请尝试:
# Get the full file path of slmgr.vbs via $env:PATH
$slmgrFullPath = (Get-Command slmgr.vbs).Path
# Use cscript.exe to execute it as a console application:
cscript $slmgrFullPath /upk
Start-Sleep 3
cscript $slmgrFullPath /cpky
Start-Sleep 3
cscript $slmgrFullPath /rearm"
请参阅下面的更简单的替代方案,但这涉及更改默认的 WSH 主机。
slmgr
的完整文件名是slmgr.vbs
,即它是由WSH(Windows Scripting Host)执行的VBScript,其中有两个:
cscript.exe
用于将脚本作为 console 应用程序运行,wscript.exe
适用于 GUI 应用程序。当您直接
调用
.vbs
文件时,重要的是默认主机,默认情况下为wscript.exe
。如果设计为使用
cscript.exe
调用的脚本改为使用
wscript.exe
调用,则其每个
WScript.Echo
调用都会变成GUI 消息框,而不是打印到控制台。这就是您的情况似乎正在发生的情况。 如果您不想依赖默认值,请根据需要使用
cscript.exe
或
wscript.exe
显式,但您必须指定
.vbs
文件的文件 path作为参数 - 只需文件名 - 即使在
$env:PATH
的情况下可以通过
slmgr.vbs
发现它 - 还不够。这是上面演示的方法,它使用 来确定
slgmr.vbs
' 完整路径并将其传递给
cscript.exe
。但是,还有一个替代方案: 如果可以接受,您可以更改默认值:
cscript //H:CScript
使
cscript.exe
成为默认主机,因此调用
slmgr
(或
slmgr.vbs
)单独就足够了。 适用于您的案例:
# Make cscript.exe the default WSH host.
cscript //H:CScript
# Now you can call `slmgr` directly, and it will act
# like a console application
# Use cscript.exe to execute it as a console application:
slmgr /upk
Start-Sleep 3
slmgr /cpky
Start-Sleep 3
slmgr /rearm"