0

我正在尝试将 Hyper-V 的状态返回到 VBScript 中。为此,我需要执行以下命令:

Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online

如果我将其设置为变量,那么我可以回显状态并获取EnabledDisabled。例如

PS> $hyperv = Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online
PS> echo $hyperv.State
Enabled

PS>

不过,为了运行它,我需要提升权限。因此,通过运行以下命令,我将进入升级模式。

PS> Start-Process powershell -Verb runAs

或来自 cmd.exe

c:\> powershell -noexit -command Start-Process powershell -Verb runAs

我看到了我必须克服的问题;第一个是我需要在升级模式下获得一个 powershell,第二个是让命令运行并返回一个变量。我迷路的地方是如何将此状态作为变量返回给 VBScript。

更新 1:

这个命令:

powershell.exe Start-Process powershell.exe -ArgumentList '-command $hyperv = Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online; echo $hyperv.State' -verb RunAs

在 powershell 中返回 HyperV 的状态。现在我只需要将这个变量放入 VBScript 中。

** 更新 2:**

这是我尝试使用返回值设置变量的要点。

set shell = CreateObject("WScript.Shell")

HyperVStateCommand = "powershell.exe Start-Process powershell.exe -ArgumentList '-command $hyperv = Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online; echo $hyperv.State' -verb RunAs"

set HyperVCheck = shell.Exec(HyperVStateCommand)
HyperVStatus = HyperVCheck.StdOut.ReadAll

msgBox HyperVStatus

PowerShell 打开并在关闭前显示“已启用”。如果在 ArgumentList 中添加 -noexit(在 -command 之前),powershell 将保持打开状态,以便您可以看到该值。

出现的消息框是空白的。未从 powershell 为 HyperVStatus 分配值。

4

0 回答 0