我正在尝试将 Hyper-V 的状态返回到 VBScript 中。为此,我需要执行以下命令:
Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online
如果我将其设置为变量,那么我可以回显状态并获取Enabled或Disabled。例如
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 分配值。