Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 根据上一个命令的输出,执行不同的命令_Powershell_Powershell 3.0 - Fatal编程技术网

Powershell 根据上一个命令的输出,执行不同的命令

Powershell 根据上一个命令的输出,执行不同的命令,powershell,powershell-3.0,Powershell,Powershell 3.0,我正在尝试一种非常简单的方法,但我找不到答案,或者更确切地说,我不知道如何在谷歌上提问。 所以我想在这里展示一下我在用图片做什么会更好 以下是我正在编写的脚本: 它的作用很简单:根据虚拟机的状态(运行、保存或关闭)获取所有虚拟机,然后启动或停止它们。这就是我遇到麻烦的地方 我试着用不同的命令来引导它,但它总是给出一个错误,这是错误的 输入对象也不能绑定到命令的任何参数 因为命令不接受管道输入,或者输入及其属性与接受管道输入的任何参数都不匹配 所以我想要的是,如果机器正在运行,那么保存它们。有办

我正在尝试一种非常简单的方法,但我找不到答案,或者更确切地说,我不知道如何在谷歌上提问。 所以我想在这里展示一下我在用图片做什么会更好

以下是我正在编写的脚本:

它的作用很简单:根据虚拟机的状态(运行、保存或关闭)获取所有虚拟机,然后启动或停止它们。这就是我遇到麻烦的地方

我试着用不同的命令来引导它,但它总是给出一个错误,这是错误的

输入对象也不能绑定到命令的任何参数 因为命令不接受管道输入,或者输入及其属性与接受管道输入的任何参数都不匹配

所以我想要的是,如果机器正在运行,那么保存它们。有办法吗?

使用循环和语句:

Get-VM -VMName $name | ForEach-Object {
    switch ($_.State) {
        'running' {
            # do some
        }
        'saved' {
            # do other
        }
        'off' {
            # do something else
        }
        default {
            throw ('Unrecognized state: {0}' -f $_.State)
        }
    }
}

我认为这里的实际问题(由错误消息显示)是
start vm
不接受管道输入。顺便说一下,我猜这就是Hyper-V Start VM cmdlet

您可以这样做以避免缺少管道感知参数:

Get-VM -VMName $name | where {$_.State -eq $state} | foreach-object {Start-VM -VM $_}

对此,可以使用If/Else语句或switch语句。有关示例,请参阅Powershell文档。请不要将代码作为屏幕截图发布。将示例代码复制/粘贴为文本并正确设置格式。我将两者都尝试,感谢所有帮助。非常感谢,这正是我所需要的。同样有效,谢谢。。因为我是新手,所以任何东西都会让我感兴趣,并帮助我学习脚本和powershell的工作原理。。谢谢。也是的。。关于你的猜测,这是hyper-v,但出于好奇。。不同的虚拟机软件是否有不同的cmdlet?例如,如果我需要它来与VM workstation一起工作,它是否可以正常工作?我是否需要修改?VMware模块的cmdlet与某些Hyper-V cmdlet同名,但参数不同。您必须重新工作才能将其用于该模块。我理解,谢谢。