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同名,但参数不同。您必须重新工作才能将其用于该模块。我理解,谢谢。